应仅导出mysql库中的user、db、tables_priv、columns_priv、procs_priv、global_grants等权限表,跳过information_schema、performance_schema、sys;导出时取消全选、手动勾选,sql格式下禁用create database和drop table选项,启用反引号和列名。
直接导出 mysql 数据库中的 user、db、tables_priv 等表即可,但必须跳过 information_schema 和 performance_schema —— 它们不能导出,强行选中会报错或生成空文件。
只导出系统权限表,别碰系统元数据库
phpMyAdmin 的「数据库」列表里显示的 mysql 是唯一需要操作的目标;information_schema、performance_schema、sys 这三个是只读虚拟库,点进去也看不到真实表结构,勾选后导出会失败或返回 0 字节。真正存权限配置的是 mysql 库下的这些表:
-
user(全局权限) -
db(数据库级权限) -
tables_priv、columns_priv(表/列级权限) -
procs_priv(存储过程权限) -
global_grants(MySQL 8.0+ 的角色相关权限)
导出时在 mysql 数据库页面勾选上述表,**取消全选,手动勾**——默认全选会把 innodb_index_stats 这类统计表也带上,它们不是配置,且可能因引擎不兼容导致还原失败。
导出格式选 SQL,禁用 CREATE DATABASE 和 DROP TABLE
这类备份用于迁移或恢复权限,不是重建整个 mysql 库。如果导出带 CREATE DATABASE `mysql` 或 DROP TABLE,还原时会破坏现有系统表结构甚至锁死服务。
- 在导出页面的「格式」下拉选
SQL - 展开「格式特定选项」→ 取消勾选
添加 DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT - 同样取消勾选
添加 CREATE DATABASE / TABLE - 勾选
包含列名(提高可读性)和使用反引号包裹字段和表名(避免关键字冲突)
这样导出的 SQL 文件每条 INSERT 都是安全的覆盖写入,适合用 mysql -u root mysql 直接导入。
MySQL 8.0+ 要额外处理 role_edges 和 default_roles
MySQL 8.0 引入角色机制后,权限关系不再只存在 user 表里。role_edges 记录角色继承关系,default_roles 记录用户默认启用的角色。漏掉它们,还原后角色权限会丢失。
- 确认你的 MySQL 版本:
SELECT VERSION(); - 如果是 8.0+,导出时务必一并勾选
role_edges和default_roles - 这两个表内容极少,但结构依赖严格,导出时不要勾选「仅数据」——必须包含
CREATE TABLE语句,否则还原时报错Table doesn't exist
如果你不确定版本,宁可多导两个表,也不要少导——它们在 5.7 中不存在,导入时会被忽略,无副作用。
最常被忽略的是:导出后没验证 SQL 文件是否真含数据。打开备份文件搜 INSERT INTO `user`,如果一行都没,说明导出时没正确勾选表,或者当前用户没权限读取 mysql 库——这时候得换 root 或有 SELECT 权限的账号再试。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











