最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何备份和还原MySQL账号及授权信息
时间:2026-08-30 19:49:49 编辑:袖梨 来源:一聚教程网
<p>能,但需显式指定mysql库及权限表并授权:GRANT SELECT ON mysql.* TO 'root'@'localhost'; FLUSH PRIVILEGES; 用mysqldump -u root -p --skip-lock-tables --no-create-info --skip-triggers mysql user db tables_priv等导出,还原后必须执行FLUSH PRIVILEGES。</p>
mysqldump 能不能直接备份用户账号?
不能。默认情况下 mysqldump --all-databases 不会导出 mysql 库里的权限表(如 user、db、tables_priv 等),除非显式指定要备份该库,且用户有足够权限读取这些系统表。
更关键的是:MySQL 8.0+ 默认启用 caching_sha2_password 认证插件,其密码哈希存储在 mysql.user 表的 authentication_string 字段里——但直接导出并还原这个字段,在目标实例版本不一致或插件未启用时,会导致账号无法登录。
-
mysqldump -u root -p mysql可以导出用户表,但还原后需手动刷新权限:FLUSH PRIVILEGES; - 若只备份业务库(如
mysqldump -u root -p myapp),mysql库完全不会被包含 - 使用
--skip-lock-tables或--single-transaction对mysql库无效,该库不支持事务
正确备份账号和授权信息的操作方式
最稳妥的方式是单独导出 mysql 库,并配合 --skip-triggers 和显式指定表,避免触发器干扰;同时建议用 --no-create-info 避免建表语句冲突(因系统表结构可能随版本变化)。
推荐命令:
mysqldump -u root -p --no-create-info --skip-triggers mysql user db tables_priv columns_priv procs_priv proxies_priv > mysql_grants_backup.sql
-
--no-create-info:跳过CREATE TABLE语句,防止还原时因表结构差异报错 -
--skip-triggers:mysql库中部分表(如user)有触发器,不跳过可能在导入时报错 - 只导出核心权限表,不包括日志类表(如
general_log、slow_log),减少冗余和风险 - 务必确保执行用户拥有对
mysql库所有相关表的SELECT权限
还原账号时为什么 FLUSH PRIVILEGES 很关键?
MySQL 不会自动重载权限缓存。即使你用 mysql -u root -p mysql 成功写入了 user 表,新账号或修改后的权限也不会立即生效。
必须手动执行:
mysql -u root -p -e "FLUSH PRIVILEGES;"
- 遗漏这步,常见现象是:账号看起来已存在,但用该账号连接时提示
Access denied -
FLUSH PRIVILEGES是唯一可靠方式,重启 MySQL 服务也能生效,但没必要且影响业务 - 如果还原的是整个
mysql库(含非权限表),仍只需执行一次FLUSH PRIVILEGES,无需逐表处理
跨版本迁移账号时最容易忽略的兼容性问题
MySQL 5.7 和 8.0 的账号体系差异极大,直接还原 mysql.user 表大概率失败。
- MySQL 8.0 移除了
Password字段,改用authentication_string;5.7 还保留旧字段,混用会丢权限 - 8.0 默认认证插件是
caching_sha2_password,而 5.7 是mysql_native_password;还原后若客户端不支持新插件,连接直接拒绝 - 解决办法不是硬拷贝表,而是用
SHOW CREATE USER+SHOW GRANTS生成可移植的 SQL:
SELECT CONCAT('CREATE USER '', user, ''@'', host, '' IDENTIFIED WITH ', plugin, ' AS '', authentication_string, '';') FROM mysql.user WHERE user != '';nSELECT CONCAT('GRANT ', privilege, ' ON ', `table_schema`, '.', `table_name`, ' TO '', grantee, '';') FROM information_schema.role_table_grants WHERE grantee != '';
这类语句生成的结果才是版本安全、可复用的账号重建脚本。
相关文章
- .net 4.0 sdk下载 运行时Targeting Pack区别 08-30
- 女神异闻录夜幕魅影虎狼丸强度分析 08-30
- 手绘早餐日志图鉴提示词怎么写-画面元素和风格参数 08-30
- 女神异闻录夜幕魅影奇境少年是谁? 08-30
- TPLink TLWDR7400 无线路由器WiFi名称和密码设置 08-30
- PULSE 运动鞋产品规格表 08-30