mysql5.5版本数据迁移问题

场景:大数据所用的MySQL数据库中,部分表是myisam引擎的,部分表是innodb引擎的。并且表空间是共享表空间。

           大数据部门想将所有的myisam引擎的表,转换为innodb引擎的表,并大共享表空间转换为独立表空间。

迁移方案:1、新搭建一个实例。

                  2、把主库的表结构备份导入到新建的实例中。

                  3、然后把主库的数据使用mysqldump逻辑导出,最后source到新添加的从库中

本以为这样可以解决上面的两个问题,change master to之后,观察一会,主从关系都是yes状态,由于数据量比较大,近一个T了。第二天再次show slave status发现从库出现1048错误。提示的信息

观察旧从库和主库,并没有问题,初步判断原因是sql_mode原因。

观察主库的binlog文件。发现每个binlog开头都是SET @@session.sql_mode=2097152,这个表示的是在会话级别将sql_mode设置为严格模式;查阅资料,strict_trans_tables只对事务表启用严格模式。而对于 myisam引擎的表,例如:类型是int(1),在插入数据的时候插入了values('aa'),那么 aa不能转换为int,执行结果是会报错的。如果大于第一行数据,MySQL将非法值转换为最接近该列的合法值并插入调整后的值,如果不能转换,MySQL在列中插入隐式默认值,在任何情况下,MySQL都不会报错(除非语法错误),并会继续执行语句。说使用的是java语言,在mysql5.5版本数据库中,默认的sql_mode是空的。java发现数据库的sql_mode是空值的话,将数据库sql_mode转换为严格模式。而原来的主库和从库都没有问题,只有新的 从库会报错。个人推断是。由于新建的从库把原来的myisam的表都已经转换为innodb表了,那么之前主库的binlog中还有非法数据插入,binlog设置的是针对事务表有效,而非事务,将其数据截断了,而新的从库,都是事务表,所以会报错!!

 

画外音:

 

 

基本找到问题所在的原因之后:

还是想将数据全部备份之后,导入到从库中。修改引擎的方法,要么业务停,将表直接修改为innodb。要么程序端java修改,不要修改数据库的sql_mode。

参考链接:

https://blog.csdn.net/hjgzj/article/details/77885090

https://yq.aliyun.com/articles/59265

 

转载于:https://www.cnblogs.com/lucky8866/p/10677192.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值