zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    包括”/“排除”设置禁用了加载功能。
    如何打造高质量的机器学习数据集?
    机器学习项目流程(一)初探数据集
    java 转义与反转义
    jfinal 获取刚保存的对象的主键 ,该主键在数据库中自增
    凤凰架构:构建可靠的大型分布式系统 ISBN:9787111683919 -推荐
    STC89C52控制74HC595,74HC138双色16x16点阵屏循环显示汉字
    STC89C52驱动MAX7219LED点阵级联, 文字滚动效果
    STM32F407VET6烧录出现flash download failed target dll has been cancelled
    DS1302与STC12的连接电路和驱动实现
  • 原文地址:https://www.cnblogs.com/lucky8866/p/10677192.html
Copyright © 2011-2022 走看看