AIOps 一场颠覆传统运维的盛筵
903
2022-10-15
主从复制故障解决
一、从库数据冲突导致同步停止
1、模拟错误:模拟重现故障的能力是运维人员最重要的能力。
show slave status报错:
且show slave status \G;
Slave_IO_Running:yes
Slave_SQL_Running:no
Seconds_Behind_Master:NULL
Last_Error:Error 'Cant't create database 'xiaoliu';database exists' on query.Default database:'xiaoliu'.Query:'create database xiaoliu'.
1007:数据库已经存在;
解决方法:stop slave;
get global sql_slave_skip_counter=1;指针跳跃;
start slave;
对于普通的互联网业务,忽略问题不是很大。当然,要确认不影响公司业务的前提下。
企业场景解决主从同步,比主从不一致对当前更重要,然后如果主从数据一致也很重要,再找个时间恢复一下这个从库。
slave和master同步,主要关键点:
Slave_IO_Running:yes;
Slave_SQL_Running:yes;
Seconds_Behind_Master是否为0;0表示已经同步。
2、根据错误号跳过指定的错误
slave-skip-errors=1032,1062,1007 ->一般由于入库重复导致的失败就可以忽略。
对于错误代码,应该使用slave服务器错误日志中错误消息提供的编号和SHOW SLAVE STATUS 的输出。
可以可以使用不推荐的all值忽略索引错误信息,不考虑发生的错误。无需而言,如果使用该值,我们不能保证数据的完整性。在这种情况下,如果slave服务器的数据与master服务器上的不相近请不要抱怨(或编写bug报告)。
二、让MYSQL从库开启binlog方法
#>vi my.cnf
log-bin=/data/3307/mysql-bin
log-slave-updates
expire_logs_days=7
三、主库master DOWN机(预案)
数据库宕机、服务器宕机
查看两个线程的更新状态:mysql>show processlist \G;
#>cat /data/3307/data/master.info,查看那个位置更靠前,或选个POS最大的作为主库。
1、确保所有的relay-log全部更新完毕。
在每个从库上执行stop slave io_thread,show processlist;
直到看到has read all read log;表示从库更新都执行完毕;
2、登录:mysql -uroot -p密码 -S /data/3306/mysql.sock
stop slave;
retset master;
quit;
3、进到数据库数据目录,删除master.info relay-log.info
cd /data/3306/data
rm -f master.info relay-log.info
检查授权表,read-only等参数
4、32 3306提升从库为主库
vi /data/3306/mysql-bin
如果存在log-slave-updates read-only等一定注释掉。
/data/3306/mysql restart
到此为止,提升主库完毕。
5、如果主库服务器没DOWN,需要去主库拉取binlog补全提升主库的从库。
......
四、双主及多主同步过程
参数说明:
解决主键自增长变量冲突
Master1:
auto_increment_increment=2 自增ID的间隔,如1 3 5间隔为2.
auto_increment_offset=1 ID的初始位置,偏移量。
log-slave-updates 开启从库binlog日志。
log-bin
(将形成1,3,5,7,9....序列)
Master2:
auto_increment_increment=2 自增ID的间隔,如2 4 6间隔为2.
auto_increment_offset=2 ID的初始位置。
log-slave-updates 开启从库binlog日志。
log-bin
(将形成2,4,6,8....序列)
主库写到1,3,5时,从库从6,8,10写 ID不连续,从最大写。
双向同步,互为主从。
发表评论
暂时没有评论,来抢沙发吧~