MySQL-MariaDB迁移到MySQL注意事项
记一次将MariaDB的数据迁移到MySQL的任务记录
迁移数据库的版本:
MariaDB:10.1.13
MySQL:5.7.36-log
1、刚开始使用mysqldump在MariaDB进行的全备
[root@suz-mysql-66-122 ~]# mysqldump -uroot -p12345 -A --skip-lock-tables --single-transaction --master-data=2 --flush-logs --hex-blob --triggers --routines --events > /data/full_`date +%F`.sql
2、之后在MySQL中进行的恢复
[root@suz-mysql-66-123 ~]# mysql -uroot -S /tmp/mysql.sock < 20_133_full_2023-05-10.sql
ERROR 1728 (HY000) at line 989: Cannot load from mysql.proc. The table is probably corrupted
当恢复到mysql.proc这张表的时候出现了报错,至此进程终断,未恢复的数据库及mysql库中未未恢复的表不再进行(包括user表)
网上查了一下,原因是MariaDB的mysql.proc和MySQL的mysql.proc表结构不一样(这是一张关于存储过程的表)
通过对比表结构发现,MySQL的proc表的definer字段长度是93,MariaDB的该字段长度是141
此外,'sql_mode'字段的取值范围也不相同
3、修改mysql.proc表结构
mysql> set @@session.sql_mode='';
mysql> alter table mysql.proc modify column definer char(93);
mysql> alter table proc modify column sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH');
4、继续导入未导入数据库
将未导入的数据库从全备中分离出来
[root@suz-mysql-66-123 ~]# sed -n '/^-- Current Database: `testdb`/,/^-- Current Database: `/p' 20_133_full_2023-05-10.sql > testdb.sql
[root@suz-mysql-66-123 ~]# mysql -uroot -S /tmp/mysql.sock < testdb.sql
此前需要关闭sql_mode,不然还是会报错
5、数据恢复成功,但新问题又来了
新建、删除用户的时候发现不能成功,报错说是插入数据和列数不匹配,对比后发现两者user表结构也不相同,头大了... ...
又从新的相同版本MySQL中导出整个mysql库进行恢复,flush privileges; 刷新下权限,之后当然所有的用户都没了,但是可以新建用户了。
后续不知道会不会产生其他新的问题了,持续关注中... ...
6、总结
如果迁移的数据库不多,那么就单独备份数据库出来,不要-A全备
[root@suz-mysql-66-123 ~]# mysqldump -uroot -pxxxxxx -B testdb1 testdb2 > /tmp/testdb.sql
恢复前数据库中先关闭:set global sql_mode=''; 不然会报错
[root@suz-mysql-66-123 ~]# mysql -uroot -S /tmp/mysql.sock < testdb.sql
第一次迁移MariaDB到MySQL,可能还有更好的方法,只是还没有了解到,有待提高。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?