我正在尝试将数据从 mysql 5.7 导出到 mysql 5.5 服务器。我面临的问题是 5.5 不支持多个ON UPDATE CURRENT_TIMESTAMP
,但 5.7 有多个时间戳列。问题是:有没有办法只禁用ON UPDATE CURRENT_TIMESTAMP
im mysqldum ,而不触及实际数据库。我尝试过--compatible=mysql323
和,--compatible=mysql40
但这些模式引入了其他兼容性问题,例如MODE=InnoDB
而不是ENGINE=InnoDB
。任何帮助或建议都将不胜感激。
答案1
使用 5.5 版本来mysqldump
创建转储。它可能会起作用。或者可能会引发其他麻烦。
5.5 的列默认值非常有限TIMESTAMP
。即使您可以关闭不兼容的语法,您也能得到一个CREATE TABLE
可以正常工作的版本。
这可能只是冰山一角。您打算在 5.5 版服务器上做什么?也许只是为了进行分析?而且您不会执行INSERTs
或UPDATEs
,所以默认值无关紧要?
计划 B:
mysqldump ... --no-data
然后编辑默认值TIMESTAMPs
并将结果提供给mysql
。表格将被构建,但尚未填充。
mysqldump ... --no-create | mysql ...
加载数据。(警告:我不确定 --no 参数的拼写)
答案2
您已经找到了转储的兼容性标志,但它没有特定的版本。
将目标数据库升级到 5.7 或更高版本。如果不可行,请编写一个程序来执行任何所需的转换并导入它。从正在运行的数据库中提取,或转换 5.7 转储。
(一般来说,任何重大变化的向前兼容性都很困难。通常您需要某些软件的新版本来读取新的数据结构和语法。)