美文网首页
Mysql实现主从复制、读写分离

Mysql实现主从复制、读写分离

作者: Lugton | 来源:发表于2019-11-26 15:55 被阅读0次

在一个系统中,如果只使用一个mysql数据库,难以承受大并发量,系统的高可用性差。搭建mysql集群,分为主节点和从节点,通过主从复制实现数据备份、故障转移、MySQL集群、高可用、读写分离。而在平时的正常运行中,对数据库的读操作比写操作多得多,实现读写分离可以有效地减轻单台数据库的压力

下面介绍主从复制步骤

1.分别在主从节点上 vim /etc/my.cnf

[mysqld]
log-bin=mysql-bin   //[必须]启用二进制日志
server-id=36      //[必须]服务器唯一ID

2.授权主节点允许远程访问

GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by 'root'; 
flush privileges;
show master status;

记住File以及Position

3.配置从节点供主节点访问

change master to master_host='192.168.1.36',master_user='root',master_password='root',master_log_file='mysql-bin.000003',master_log_pos=786; 
flush privileges;
start slave; 
show slave status;

看Slave_IO_Running、Slave_SQL_Running状态,为Yes则表明设置成功

这样主从复制就已经配置成功了。

测试可知,在master新建一个数据库,slave会进行同步。


下面介绍读写分离步骤

1.安装Mycat(系统要预先装好jdk)

wget http://dl.mycat.io/1.6.6/Mycat-server-1.6.6.1-test-20180729105217-linux.tar.gz
tar -zxvf Mycat* -C /usr/local

2.配置环境变量

vim /etc/profile
export MYCAT_HOME=/usr/local/mycat
export PATH=${JAVA_HOME}/bin:${MYCAT_HOME}/bin:${PATH}

3.配置用户

vim /usr/local/mycat/conf/server.xml
设置用户名、密码、数据库名

4.配置读写分离

vim /usr/local/mycat/conf/schema.xml 

<dataNode name="dn4" dataHost="slave" database="glo-index"/>
<dataHost name="slave" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100" maxRetryCount="4">
                <heartbeat>show slave status</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="192.168.1.36:3306" user="root"
                                   password="root">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="192.168.1.60:3306" user="root" password="root" />
                </writeHost>
                <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
 </dataHost>

注意两个参数:

balance:负载均衡类型

  • balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
  • balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡
  • balance="2",所有读操作都随机的在writeHost、readhost上分发。
  • balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力

switchType:切换模式

  • switchType='-1' 表示不自动切换
  • switchType='1' 默认值,表示自动切换
  • switchType='2' 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
  • switchType='3' 基于MySQL galary cluster的切换机制(适合集群

因此,该配置文件中的balance="1"意味着作为stand by writeHost的hostS1和hostS2将参与select语句的负载均衡,这就实现了主从的读写分离,switchType='-1'意味着当主挂掉的时候,不进行自动切换,即hostS1和hostS2并不会被提升为主,仍只提供读的功能。这就避免了将数据写进slave的可能性,毕竟,单纯的MySQL主从集群并不允许将数据读进slave中,除非配置的是双master。

测试一下:

在slave数据库中写入数据id为14的数据,master不会同步


slave
master

在master数据库中写入数据id为15的数据,slave同步


master
slave

至此,mysql的主从复制+读写分离就实现了。

参考:https://segmentfault.com/a/1190000016507131
https://www.cnblogs.com/cxyyh/p/10815393.html

相关文章

网友评论

      本文标题:Mysql实现主从复制、读写分离

      本文链接:https://www.haomeiwen.com/subject/vkoewctx.html