先导出源 数据库 用户权限表数据,再导入目标库。使用 mysqldump 导出mysql 库的 user、db 等权限表数据,生成 SQL 文件;检查并清理文件中的 DROP 语句及兼容性问题;最后通过 mysql 命令将该文件导入目标数据库,完成用户和权限迁移。

在 MySQL 中迁移用户和权限,核心是复制源数据库的用户账户、密码及权限配置到目标数据库。由于 MySQL 将用户信息存储在 mysql 数据库的 user、db、tables_priv 等系统表中,直接导出这些表的数据并导入到新实例是最有效的方式。以下是具体操作步骤。
1. 导出源数据库的用户和权限信息
使用 mysqldump 工具 导出 mysql 库中与用户权限相关的表:
mysqldump -u root -p --no-data mysql user db tables_priv columns_priv procs_priv > mysql_users.sql
说明:这里只导出结构(表定义),不导出数据,但为了后续插入数据,我们稍后需要实际数据。如果你希望连数据一起导出(推荐做法),去掉--no-data:
mysqldump -u root -p mysql user db tables_priv columns_priv procs_priv > mysql_users.sql
这会生成包含用户账号、全局权限、数据库级权限等信息的 SQL 文件。
2. 检查并调整 SQL 导出文件(可选)
打开 mysql_users.sql,确认是否包含敏感语句如DROP TABLE 或不必要的操作。可以手动删除 DROP 语句,避免在目标库误删原有用户表。
如果目标 MySQL 版本与源不同,注意字符集和 SQL 模式兼容性。确保 sql_mode 一致,避免导入失败。
3. 将用户信息导入目标数据库
登录目标 MySQL 服务器,执行导入命令:
mysql -u root -p
导入后,MySQL 并不会立即识别新的权限表内容,需要刷新权限:
FLUSH PRIVILEGES;
该命令让 MySQL 重新加载内存中的权限信息,使新用户和权限生效。
4. 验证用户和权限是否迁移成功
检查关键用户是否存在并拥有正确权限:
尝试从应用端或远程连接测试用户登录,确认认证和权限无误。
注意:如果使用了角色(MySQL 8.0+),还需导出 role_edges、default_roles 等表,并确保目标实例支持角色功能。
基本上就这些。只要保证 mysql 库中权限表完整迁移,并执行FLUSH PRIVILEGES,用户和权限就能正常工作。不复杂但容易忽略细节,比如主机名匹配、特殊字符密码处理等。建议在测试环境先演练一遍。


