一 主从复制原理
大致步骤如下:
- 主服务器(master)把数据更改记录到二进制日志(binlog)中
- 从服务器(slave)把主服务器的二进制日志复制到自己的中继日志(relay log)中
- 从服务器重做中继日志中的日志,把更改应用到自己的数据库上,以达到数据的最终一致性
涉及的线程:
MySQL主从复制涉及到三个线程,一个运行在主节点(log dump thread),其余两个(I/O thread, SQL thread)运行在从节点,如下图所示:
- 主节点 binary log dump 线程
当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁,当读取完成,甚至在发动给从节点之前,锁会被释放。
- 从节点I/O线程
当从节点上执行start slave
命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点binlog dump 进程发来的更新之后,保存在本地relay-log中。
- 从节点SQL线程
SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。
二 主服务器配置
在mysql的my.cnf文件最后添加
[mysqld]
log-bin=master-binlog
binlog_format=mixed
server-id=1
重启
mysql -uroot -p输入密码进入mysql
使用 show master status G查看状态
使用 show variables like ‘%log_bin%’ 查看配置情况
三 从服务器配置
在mysql的my.cnf文件最后添加
[mysqld]
relay_log=salve-relay-log
server-id=2
重启
mysql -uroot -p输入密码进入mysql
stop slave; 关闭slave(如果你以前配置过主从的话,一定要先关闭)
配置主服务器:
change master to
master_host='176.123.123.111',
master_port=3306,
master_user='root',
master_password='123456',
master_log_file='master-binlog.000001', //查看主服务器得到 看上图
master_log_pos=154 //查看主服务器得到 看上图
start slave; 启动从服务器
show slave status; 查看是否配置成功