MySQL5.7迁移到MySQL8

MySQL5.7迁移到MySQL8
双木老林使用 mysqldump
导出
1 | mysqldump -uroot -pxxxx -R -E -A --single-transaction -f > all.sql |
- -A : 所有库
- -R :导出存储过程以及自定义函数
- -E :导出事件
- -f : --force 在导出过程中忽略出现的 SQL 错误
重点 : --single-transaction => 在导出开始之前将会话事务隔离级别设置成 REPEATABLE READ 并执行语句 START TRANSACTION,只适用于事务引擎的表如 InnoDB。当指定该选项进行导出的过程中,应该避免其它会话连接执行如下语句:ALTER TABLE,CREATE TABLE,DROP TABLE,RENAME TABLE,TRUNCATE TABLE,因为一致性读并不能隔离以上语句,所以当 mysqldump 执行 SELECT 语句进行导出表数据时,其它会话执行以上语句容易产生数据不一致或者报错。该选项与 --lock-tables 是互斥的,因为 LOCK TABLES 语句会导致在执行的事务隐式提交。
导入
异常 1:
1 | ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER' |
解决方案:
1 | sed -i 's/,NO_AUTO_CREATE_USER//g' all.sql |
解释:
在 MySQL8 已经移除了 NO_AUTO_CREATE_USER,还有其他的相关可以参考官方说明:https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html
异常 2:
1 | ERROR 1418 (HY000) at line 2753: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) |
解决方案:
1 | mysql -uroot -p |
评论
匿名评论隐私政策












