mysql主从复制
主从复制原理
多实例
必须开启二进制日志
#二(至少两个实例)二(二进制日志)三(三个线程)
描述主从复制的原理
当master进行dml操作时,会写入到binlog(二进制日志),dump线程会自动读取新生成的二进制日志,通过网络发送到slave的Io线程,io线程会转存到中继日志,sql线程从中继日志中读取数据,并执行到对应的数据库
服务器配置
主服务器配置
1.修改主服务器id
[mysqld]
server-id=128
启动数据库 systemctl start mysqld
2.开启二进制, set sql_log_bin=1; 8.0默认为开启
3.在主服务上查看二进制位置,从服务器复制此位置之后的数据
show master logs;
binlog.000006 | 157 | No
4.创建可供远程复制的账号
=(root@localhost) [(none)]>create user repluser@'10.0.0.%' identified by '123456';
5.授权账号复制的权限
=(root@localhost) [(none)]>grant replication slave on *.* to repluser@'10.0.0.%';
>show processlist; #查看线程
从服务器1配置
1.修改从服务器id
[mysqld]
server-id=132
2.直接输入进mysql终端进行配置
CHANGE MASTER TO
MASTER_HOST='10.0.0.128',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='binlog.000006',
MASTER_LOG_POS=157,
MASTER_CONNECT_RETRY=10;
3.打开两个线程
> start slave;
4.查看从节点状态
> show slave status\G
Slave_IO_Running: yes
Slave_SQL_Running: yes
Seconds_Behind_Master: 0 #表示同步完成
从服务器2配置
1.将主服务器所有数据导到文件
[19:37:50 root@rocky8 ~]# mysqldump -A -F --single-transaction --master-data=1 > /backup/all.sql
2.远程发送到新增的从服务器
scp /backup/all.sql 10.0.0.129:
3.修改从服务器id
vim /etc/my.cnf
[mysqld]
server-id=129
4.在从服务器上修改all.sql文件
vim all.sql
CHANGE MASTER TO
MASTER_HOST='10.0.0.128', .....新增部分
MASTER_USER='repluser', .....新增部分
MASTER_PASSWORD='123456', .....新增部分
MASTER_PORT=3306, .....新增部分
MASTER_LOG_FILE='binlog.000007', MASTER_LOG_POS=157;
5.临时禁用二进制
(root@localhost) [(none)]>set sql_log_bin=0;
6.执行all.sql,恢复数据库加执行从服务器
(root@localhost) [(none)]>source all.sql;
7.打开两个线程
> start slave;
双主服务器配置
将主从配置按照相反的方向来一遍,在从上配置主,在主上配置从
两个机器不能同时写,会发生堵塞,后面的数据也无法通过
跳过事件的个数
关闭线程:stop slave;
set global sql_slave_skip_counter=1 #跳过一个错误
开启线程:start slave;
跳过事件的编号
[mysqld]
slave_skip_errors=1007|ALL