昨天排查mysql数据库主从同步的错误,查看mysql日志时发现无法导出日志。
报错内容: mysqlbinlog: unknown variable
'default-character-set=utf8'
解决方法 : mysqlbinlog --no-defaults -v --stop-position=88888888 master-bin.000221 > ./mysql_tmp.log
无默认值 设置结束位置 输出到指定文件
使用 AWK 命令:
找出出错的文件行号:
user@linux:~# cat mysql_tmp.log | awk '/end_log_pos 7307725/ {print NR}'
93049
选择行号附近的数值: cat mysql_tmp.log | awk 'NR==92900,NR==93100'
注: NR = 行号,需要设置在报错行数前后!设置其前后N行,找出其对应的sql语句
验证报错导致的SQL语句, 在从库执行该语句,使主从数据正常。
可直接查找出错误SQL数据
mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS master-bin.000445 | grep -A '10' 166900259
清理数据库主从日志:
首先需要保证在主数据库服务器在无更改的情况下才可以进行操作,否则容易漏掉数据。
先停止从库,清理从库
stop slave;
reset slave all;
清理主库
reset master;
查看主库状态
show master status;
设置从库同步位置
change master to master_host='IP地址', master_port= mysql_port, master_user='mysql_user', master_password='mysql_passwd', master_log_file='master-bin.000001', master_log_pos=107;
启动从库同步
start slave;
查看从库状态是否正常
show slave status\G;