如何从 Mysql 8.0 转储到 5.7?

Posted

技术标签:

【中文标题】如何从 Mysql 8.0 转储到 5.7?【英文标题】:How to take a dump from Mysql 8.0 into 5.7? 【发布时间】:2019-12-24 02:07:36 【问题描述】:

我想从 mysql 8.0.11 中进行转储并将其恢复到 5.7.27。

当我尝试恢复它时,我得到了错误:

ERROR 1273 (HY000) at line 25: Unknown collat​​ion: 'utf8mb4_0900_ai_ci'

然后我尝试使用 compatible 标志使其在较旧的 MySQL 数据库上更容易。

mysqldump --compatible=mysql4 --add-drop-table -u r00t -h xxx.eu-north-1.rds.amazonaws.com -p radius_db > ~/radius.sql

但这似乎也不起作用:

mysqldump: 无法执行 '/*!40100 SET @@SQL_MODE='MYSQL40' */': 变量 'sql_mode' 不能设置为 'MYSQL40' 的值 (1231)

任何建议将不胜感激。

【问题讨论】:

赞成这个真棒标题,我爱我在 SO 上的一点意外幽默 :) 这能回答你的问题吗? MySQL Import error - Unknown collation: 'utf8mb4_unicode_520ci_' 【参考方案1】:

简单地说,用作 DEFAULT "utf8" 和 COLLATE "utf8_general_ci"。

解决问题的一种方法是更改​​您的 import .sql-Files from

utf8mb4”到“utf8” 和“utf8mb4_0900_ai_ci”(或其他)到“utf8_general_ci

提示:不要忘记备份文件以防万一;-)

转到您的 (.sql) 导入文件并进行这些更改。 来自:

ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8_general_ci;

到:

ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

重新导入。

【讨论】:

谢谢,我最终将所有出现的 utf8mb4_0900_ai_ci 更改为 utf8mb4_general_ci 并且成功了。【参考方案2】:

您可以使用下面的代码将数据库从 mysql 8.x 移动到 mysql 5.x。

mysqldump db > db.sql

sed -i s/utf8mb4_0900_ai_ci/utf8mb4_general_ci/g db.sql

mysql db < db.sql

db 是您的数据库名称

【讨论】:

以上是关于如何从 Mysql 8.0 转储到 5.7?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 MySQL 转储从主机恢复到 Docker 容器

从 MySql 转储导入到配置单元

如何将 MySQL 5.5.40 升级到 MySQL 5.7

mysql 从远程数据库转储到本地主机输出文件

从 MySql 导出转储文件

如何从终端macbook转储mysql db