迁移至MariaDB时,导入MySQL备份如何排除系统数据库?
MySQL迁移MariaDB:排除系统数据库导入的方案
方案1:重新生成不含系统库的备份(最优解)
如果还能访问原MySQL服务器,直接用mysqldump导出时排除系统数据库,从根源避免导入冲突:
mysqldump -u root -p --all-databases \ --ignore-database=mysql \ --ignore-database=information_schema \ --ignore-database=performance_schema \ --ignore-database=sys \ > clean_backup.sql
说明:mysql是核心权限系统库,information_schema/performance_schema/sys是元数据、性能统计类系统库,MariaDB自身会维护这些库,无需手动导入。
方案2:过滤现有备份文件中的系统库内容
如果无法重新备份,用命令行工具过滤原备份里的系统库相关语句:
# 过滤掉系统库的创建、使用、删除语句 grep -vE '^(CREATE DATABASE|USE|DROP DATABASE).*`mysql`|`information_schema`|`performance_schema`|`sys`' backupdb.sql > filtered_backup.sql # 导入过滤后的备份 mysql -u root -p < filtered_backup.sql
提示:如果备份包含系统库的表操作语句,可进一步用sed删除对应段落,比如删除USE mysql;之后直到下一个USE命令之间的所有内容。
方案3:手动编辑备份文件(适合小体积备份)
直接打开backupdb.sql,删除所有涉及mysql、information_schema、performance_schema、sys的内容,包括:
CREATE DATABASE /*!32312 IF NOT EXISTS*/mysql...类语句USEmysql;语句- 所有
mysql库下的表创建、数据插入代码
额外注意:迁移用户权限
因为排除了mysql库,原MySQL的用户权限不会自动同步,可单独导出权限相关表再导入:
# 从原MySQL导出权限表 mysqldump -u root -p mysql user db tables_priv columns_priv > user_perms.sql # 导入到MariaDB mysql -u root -p mysql < user_perms.sql
导入后执行FLUSH PRIVILEGES;使权限生效。
内容的提问来源于stack exchange,提问作者jstuardo
相关产品推荐
相关产品推荐

