MySQL读写分离
一、介绍
读写分离式把对数据库的读操作和写操作分开,以应对不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,可以减轻单台服务器的压力。
通过配置Mycat中writehost和readhost组件实现读写分离,支持MySQL、Oracle和SQL Server。
二、一主一从
2.1 原理
MySQL的主从复制是基于二进制日志(binlog)实现的
2.2 读写分离-MyCat配置
MyCat控制后台数据库的读写分离和负载均衡由schema.xml文件datahost标签和balance属性控制。
三、双主双从
3.1 介绍
一个主机Master1用于处理所有写请求,它的主机slave1和另一台主机Master2及从机Slave2复制所有读请求。当Master1宕机后,Master2主机负责写请求,Master1、Master2互为备用机。
3.2 准备工作
准备五台服务器,具体配置如下:
关闭所有服务防火墙:
systemctl stop firewalld
systemctl disable firewalld
3.3 搭建双主双从
第一步:Master1配置
1.修改配置文件/etc/my.cnf
#mysql服务ID,保证整个集群环境中唯一,取值范围:1-(2^32-1),默认为1 server-id=1 #指定同步的数据库 binlog-do-db=db01 binlog-do-db=db02 binlog-do-db=db03 #作为从库时,有写入操作也要更新二进制日志 long-slave-updates
2.重启MySQL服务器
systemctl restart mysqld
第二步:Master2配置
1.修改配置文件/etc/my.cnf
#mysql服务ID,保证整个集群环境中唯一,取值范围:1-(2^32-1),默认为1 server-id=3 #指定同步的数据库 binlog-do-db=db01 binlog-do-db=db02 binlog-do-db=db03 #作为从库时,有写入操作也要更新二进制日志 long-slave-updates
2.重启MySQL服务器
systemctl restart mysqld
第三步:分别在两台主库创建账号并授权
#创建itcast用户,设置密码,该用户可以在任意主机上连接MySQL服务 create user 'itcast'@'%' identified with mysql_native_password by 'Root@123456' #为‘itcast'@'%'用户分配主从复制权限 grant replication slave on *.* to 'itcast'@'%';
第四步:查看两台主库的二进制日志坐标
show master status;
第五步:配置查看Slave1
1.修改配置文件/etc/my.cnf
#mysql服务ID,保证整个集群环境中唯一,取值范围:1-(2^32-1),默认为1 server-id=2
2.重启MySQL服务器
systemctl restart mysqld
第六步:配置查看Slave2
1.修改配置文件/etc/my.cnf
#mysql服务ID,保证整个集群环境中唯一,取值范围:1-(2^32-1),默认为1 server-id=4
2.重启MySQL服务器
systemctl restart mysqld
第七步:创建主从关联
change replication source to source_host='主库ip地址', source_user='主库用户名',source_password='主库密码',source_log_file='二进制文件名',source_log_pos=二进制文件位置;
注意:master1与slave1关联,master2与slave2关联
第八步:启动两台从库主从复制,查看从库状态
start slave; show slave status\G;
第九步:设置两台主库相互复制
1.master1与master2相互复制
change replication source to source_host='主库ip地址', source_user='主库用户名',source_password='主库密码',source_log_file='二进制文件名',source_log_pos=二进制文件位置;
2.启动两台从库主从复制,查看从库状态
start slave; show slave status\G;
3.4 双主双从读写分离
3.4.1 配置
MyCat控制后台数据库的读写分离和负载均衡由schema.xml文件 datahost标签和balance属性控制,通过writeType和switchType来完成失败自动切换