生产mysql问题解决记录

Posted w329636271

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产mysql问题解决记录相关的知识,希望对你有一定的参考价值。

起因

今天生产排查发mysql主从同步有问题;
查看mysql的错误日志发现如下错误;

经过排查发现是因为备份导致的服务器的丢包;最终导致,keepalive的vip的漂移;
而应用中对某个表使用了先删除,后新增的模式;从而导致的冲突;而当前冲突的表是quartz的表,非业务表;从而想到两个办法;1 忽略quartz的表,不同步;2.keepalive配置超时时间超过容器需要备份的时间;

配置表不同步

replicate-wild-ignore-table 同 replication-ignore-table 功能一样,但是可以加通配符
replicate-wild-ignore-table=manager.qrtz_%
replicate-wild-ignore-table=manager_test.qrtz_%
replicate-wild-ignore-table=manager.sys_quartz_job_log
replicate-wild-ignore-table=manager.c_%

主从错误恢复

mysql主从同步过程中,如果出现一条语句同步失败报错了,那后面的语句也肯定不能同步成功了。例如,主库有一条数据,而从库并没有这一条数据,然而,在主库执行了删除这一条数据的操作,那么从库没有这么一条数据就肯定删除不了,从而报错了。在此时的从数据库的数据同步就失败了,因此后面的同步语句就无法继续执行。

(1)在从数据库中,使用SET全局sql_slave_skip_counter来跳过事件,跳过这一个错误,然后执行从下一个事件组开始。

stop slave;
set global sql_slave_skip_counter=1;
start slave;

(2)在从数据库中,重新连上主数据库。这种操作会直接跳过中间的那些同步语句,可能会导致一些数据未同步过去的问题,但这种操作也是最后的绝招。最好就是令从数据库与主数据库的数据结构和数据都一致了之后,再来恢复主从同步的操作。

stop slave;
change master to master_host='192.168.17.130',master_port=3306,master_user='masterbackup',master_password='123456',master_log_file='master-bin.000001',master_log_pos=2050;
start slave;

问题

dba:(none)> start slave;ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
解决

dba:(none)> reset slave;
dba:(none)> change master to ......
dba:(none)> start slave;

binlog查看命令
mysql命令

show master logs

show binlog events in 'mysql-bin.000120' from 124  limit 10

binlog命令

mysqlbinlog --no-defaults --database=test --start-datetime="2022-03-15 09:00:00" --stop-datetime="2022-03-17 20:00:00" mysql-bin.000001   |more

在Statement模式下,直接记录SQL比较直观。在Row模式下,使用binlog_rows_query_log_events参数也可以记录SQL。参数的默认为值为FALSE,如果为true的情况下,会通过Rows Query Event来记录SQL。

在my.cnf中添加以下配置,来开启row模式下的SQL记录:

binlog-rows-query-log_events=1

以上是关于生产mysql问题解决记录的主要内容,如果未能解决你的问题,请参考以下文章

一个生产环境C++工程段错误的排查

一个生产环境C++工程段错误的排查

使用mysql设计一个全局订单生产计数器

记录解决cmd打不开/闪退

企业生产环境数据库备份锁表问题

Java基础学习总结(182)——Java 日志记录实践总结