mysql主从常见问题
从数据库无法同步
可能原因:1.从库上进行了写操作,2.从库机器重启事务回滚。
解决办法1:停掉主从同步,忽略一次错误,再开启同步。
解决办法2:停掉主从同步,查看主服务器上当前的 bin-log 日志名和偏移量,然后到从服务器上执行手动同步,再开启主从同步。
具体场景
1.
错误:主库创建或删除表没有通过执行sql,未写入binlog,从库上没有相关表;
解决方案:在从库上手动创建或删除表(建表语句可参考主库);
2.
2.1错误:在从库已经有该记录,又在主库上插入了同一条记录,从库重复记录,导致数据不一致。
解决方案:在从库上将重复的记录删除,再次重启主从;或者忽略这次错误,然后再次开启同步。
2.2错误:在主库上删除一条记录,而从上找不到。
解决方案:忽略这次错误,然后再次开启同步。
2.3错误:在主库上更新一条记录,而从库上找不到,丢失了数据。
解决方案:把丢失的数据在从库上填补,然后跳过报错即可。
3.
3.1错误:字段不一致
解决方案:修改不同的字段,然后再次开启同步。
3.2错误:表里缺少字段
解决方案:在缺少字段的库里的表里添加这个字段
4.
错误:超出MyISAM数据表大小限制(默认上限是4g)
解决方案:用AVG_ROW_LENGTH和MAX_ROWS建表选项把这个最大值扩大到800万TB,重启同步。
5.
错误:从库的中继日志relay-bin损坏
解决方案:在主库上找到同步的binlog和POS点,然后重新做同步,这样就可以有新的中继日志了。
6.
错误:binlog index记录不一致
解决方案:找到同步的点和日志文件,然后chage master即可。
7.
错误:主从时区不一致导致主从数据不一致
解决方案:把时区设置相同,尽量使用同一个时间服务器,
8.
错误:字段集不一致
解决方案:1.从库:去掉主键 2.从库:修改默认编码为gb2312 3.再次查询:
9.
错误:max_allowed_packet太小
解决方案:修改max_allowed_packet的大小,然后重启slave。建议主从一致
10.
错误:临时表太大导致磁盘写满
解决方案:修改socket目录到空间较大的分区,再重启。