1. 读写分离优缺点

优点:减轻主库的压力,缺点:主库宕机数据的一至性。

2. 准备两台主机(虚拟机就好了)

master:192.168.104.86

slave:192.168.104.96

mysql数据库安装就不说了,自己找。

mysql版本号:5.6.28

mycat版本号:mycat-1.5.1-RELEASE-20160405120037

3. 主从环境

master上建立复制账号

mysql>GRANT REPLICATION SLAVE ON *.* TO   IDENTIFIED BY 'rep111';

slave上建立同步

mysql>change master to master_host='192.168.104.86',master_user='rep',master_password='rep111', master_log_file='mysql_bin.000060',master_log_pos=120;

查看状态

wKioL1csEOuyqjalAAA-WYdzgeg096.png


4.基于Mycat读写分离配置

schema.xml文件配置

balance为3:所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力switchType为1:默认值,自动切换。
heartbeat:主从切换的心跳语句必须为select user().

wKiom1csH_LhLAjFAAA_X87tViI363.png

a.写测试

shell>mysql -h127.0.0.1 -utest -ptest -P8066

mysql>use TESTDB;

mysql> create table company (id int not null primary key,name varchar(100));
Query OK, 0 rows affected (0.08 sec)

tail -f /usr/local/mycat/logs/mycat.log

wKiom1csIjnB1whMAABHJsHUZoc663.png

可以看到数据是创建在86上面。

那我们再插入一条数据看看是不是还是写入86库上面。

mysql> insert into company(id,name) values(1,'alibaba');
Query OK, 1 row affected (0.06 sec)

同样查看日志还是写往86上面

wKioL1csJHCiApzKAABB1A4OtHo072.png

那现在我们试试读看,是不是会向96拿数据

mysql> select * from company;
+----+---------+
| id | name    |
+----+---------+
|  1 | alibaba |
+----+---------+
1 row in set (0.01 sec)

通过下图可以知道,和我们预想的一样。

wKioL1csJmji5X5qAAFUkzaPh6Q511.png

从96上查寻一下,数据也同步过来了。

[root@web02 mysql]# mysql -uroot -p222222 -e "select * from db1.company";
Warning: Using a password on the command line interface can be insecure.
+----+---------+
| id | name    |
+----+---------+
|  1 | alibaba |
+----+---------+


b.如果此时86宕机了,会发生什么事情。

[root@web01 src]# systemctl stop mysql

wKiom1csLtTTLjz4AABcXvd6sl4288.png

这时我们插入条数据试试。

mysql> insert into company(id,name) values(3,'tencent');
ERROR 2013 (HY000): Lost connection to MySQL server during query
mysql> insert into company(id,name) values(3,'tencent');
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    2
Current database: TESTDB
Query OK, 1 row affected (0.03 sec)

wKioL1csMT3B2g9PAABBQpZKziY661.png

数据写往96上面去了。同样查寻也在96上面。

wKiom1csMTfwW3HuAAE2L__ZTMA631.png

总结:

当写主机192.168.104.86宕机,(只要是没往192.168.104.96写数据,86立马好了,那么还是86写,96读,一但写了数据不管86是否恢复,96都承担读、写。

当读主机192.168.104.96宕机,192.168.104.86承担读、写, 当192.168.104.96恢复,数据写还是在192.168.104.86,读在96。

到此,读写分离,主从切换就完成了。

但好像有一个问题,86宕机,96承担写入,86恢复了,96宕机了,那86如何获得已经写入了96的数据。不像mha会从96上复制binlog来回补。不知道是不是那里没有设置好的原因,欢迎指教。。