phpMyAdmin 不提供一键导出用户权限功能,需在SQL页签中执行CONCAT查询生成SHOW GRANTS语句,再逐条运行获取可复用的GRANT语句;注意host通配符、权限访问限制及密码哈希兼容性。
phpmyadmin 本身不提供“导出用户权限”的独立图形按钮,必须通过 sql 查询 + 手动构造语句实现——没有一键导出权限的菜单项,别在“导出”页签里浪费时间。
为什么找不到“导出权限”选项?
phpMyAdmin 的导出功能只面向数据库、表、视图等对象,mysql.user、mysql.db 等权限表被默认隐藏(即使你有访问权限),且系统不会自动拼接 GRANT 语句。它的“导出”页签压根不识别权限逻辑,只会导出原始表数据,而直接导出 mysql.user 表的结果无法直接复用(字段加密、无结构化权限表达)。
用 SQL 查询生成可执行的 GRANT 语句
在 phpMyAdmin 的“SQL”页签中运行以下查询(需有 SELECT 权限访问 mysql 系统库):
SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';') AS query FROM mysql.user WHERE user != '';执行后会得到一串 SHOW GRANTS FOR 'xxx'@'yyy'; 语句,再逐条执行它们(或复制全部到新 SQL 页签批量运行),就能拿到真正的 GRANT 输出。注意:host 字段可能含通配符(如 % 或 localhost),必须保留原样,否则重建权限会失败。
- 如果只想导出特定用户,把
WHERE改成WHERE user = 'myuser' - 若提示
Access denied for user,说明当前账号没权限查mysql.user,得换高权限账号(如 root)登录 - phpMyAdmin 对长文本结果默认截断,点结果行右侧的
Full texts链接才能看到完整GRANT语句
导出前务必确认权限视图是否启用
MySQL 5.7+ 默认启用 performance_schema 和 information_schema 中的权限视图(如 INFORMATION_SCHEMA.ROLE_TABLE_GRANTS),但 phpMyAdmin 不依赖这些——它只认 mysql 库的原始表。所以不必折腾视图,也别试图用 SELECT * FROM mysql.tables_priv 导出,那些字段是二进制权限位,没法直接转 GRANT。
立即学习“PHP免费学习笔记(深入)”;
- 检查是否能访问
mysql库:SHOW DATABASES;结果里要有mysql - 如果 phpMyAdmin 显示
mysql库为灰色不可点,说明当前用户被显式禁止访问该库(REVOKE SELECT ON mysql.* FROM ...),只能联系 DBA 调整 - 导出的
GRANT语句里若含IDENTIFIED BY PASSWORD,说明 MySQL 版本较老(5.6 及以前),新版本会用IDENTIFIED WITH,迁移时要注意兼容性
真正麻烦的不是怎么生成语句,而是 GRANT 语句里隐含的 host 匹配逻辑和密码哈希格式——漏掉一个单引号或写错 @'10.0.0.%' 的斜杠,恢复时就会报 ERROR 1133 (HY000)。别信“导出所有权限”这种模糊操作,每个用户都得单独验证。



















