mysql主从复制原理
mysql中有一种二进制日志,这种日志会记录所有修改数据库的操作,主从复制的原理实际上就是把主服务器的binlog日志复制到从服务器上执行一遍,这样从节点的数据就可以保持与主节点数据一致了。
主从复制过程
(1)首先因为从节点需要复制主节点的binlog日志,所以必须保证主节点启用二进制日志(log-bin=mysql-bin)
(2)从节点会开启一个I/O线程扮演mysql客户端,去请求主节点的二进制日志的事件
(3)主节点启动一个dump线程,检查自己二进制日志中的事件,跟对方请求的位置对比,如果不带请求位置参数,则主节点就会第一个日志文件中的第一个事件一个个发送给从节点
(4)从节点收到主节点发送过来的数据,把它放到中继日志(relay log)中,并且记录该次请求到主节点哪个二进制日志文件的哪个位置
(5)从节点另外一个SQL线程会把中继日志(relay log)中的事件读取出来,并且在执行一遍
实验环境
192.168.186.133 mysql-master
192.168.186.134 mysql-slave
192.168.186.135 mysql-slave
##mysql-master配置
vim /etc/my.cnf
[mysqld] |
查看是否开启log-bin
mysql> show global variables like ‘%log%’;
查看master主节点二进制日志
show master logs;
查看主节点的server id
show global variables like ‘%server_id%’
创建主节点复制权限的用户
grant replication slave,replication client on . to ‘twf’@’%’ identified by ‘tang1611’;
从服务器配置
vim /etc/my.cnf
[mysqld] |
查看中继日志是否开启
在master主节点查看binlog
show binary logs;
建立主从关系
CHANGE MASTER TO MASTER_HOST=’192.168.186.133’,MASTER_USER=’twf’,MASTER_PASSWORD=’tang1611’, MASTER_LOG_FILE=’mysql-bin.000007’,MASTER_LOG_POS=1675;
启动从节点复制线程
start slave;
测试
(1)主节点创建数据库
create database mydb; |
(2)在从节点查看二进制日志,查看是否成功复制成功