mysql主从同步读写分离
标签: mysql
环境背景
随着网站用户增加访问量增大,数据库读写会成为整个架构的瓶颈。所以我们一般使用数据库的主从同步将“读”和“写”分开,从而提高数据库的 读写性能。
主从原理
mysql主从复制可以分为:
- 单向主从
- 双向主主
- 线性级联单项双主
- 环状级联单向多主
- 环状级联单向多主多从
原理基本一致:mysql_Slave服务器的IO线程会通过在master上已经授权的复制用户权限请求连接master服务器,并请求从执行binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change
master命令指定的)之后开始发送binlog日志内容。Master服务器接收到来自Slave服务器的IO线程的请求后,其上负责复制的IO线程会根据Slave服务器的IO线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的IO线程。返回的信息中除了binlog日志内容外,还有在Master服务器端记录的IO线程。返回的信息中除了binlog中的下一个指定更新位置。当Slave服务器的IO线程获取到Master服务器上IO线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的Relay Log(即中继日志)文件(Mysql-relay-bin.xxx)的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取master端新binlog日志时能告诉Master服务器从新binlog日志的指定文件及位置开始读取新的binlog日志内容。Slave服务器端的SQL线程会实时检测本地Relay Log 中IO线程新增的日志内容,然后及时把Relay LOG 文件中的内容解析成sql语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这样sql语句,并在relay-log.info中记录当前应用中继日志的文件名和位置点。
环境搭建
centos 7
mysql 5.7(mysql安装见mysql安装)
1 | sed -i 's#=enforcing#=disabled#' /etc/selinux/config |
主从同步
在MySQL_MASTER配置文件中添加内容
1 | vim/etc/mysql/my.cnf |
登陆mysql_master服务器
1 | grant replication slave on *.* to 'admin' @'192.168.1.%' identified by 'admin'; |
重启mysql服务
1 | service mysql restart |
登陆mysql_master服务器
1 | show master status; |
在MYSQL_SLAVE配置文件中添加内容
1 | vim/etc/mysql/my.cnf |
登陆mysql_slave服务器
1 | change master to master_host='192.168.1.103',master_port=3306,master_user='admin',master_password='admin',master_log_file='master-bin.000001',master_log_pos=316; |
1 | start|stop slave; #启动|关闭同步 |
1 | Slave_IO_Running:YES |
显示以上参数为YES表明同步没有问题