如何快速导出MySQL所有用户的授权语句以便迁移服务器?

云涛同学_3666

云涛同学_3666

2026-07-26

951人浏览

原创

应使用 show grants 逐个导出权限,而非直接导出 mysql.user 表;因真实权限分散在多张系统表且结构随版本变化,硬导易丢权限、锁账号或致登录失败;show grants 才能生成人眼可读、机器可执行的完整授权语句。

如何快速导出mysql所有用户的授权语句以便迁移服务器?

直接用 SHOW GRANTS 逐个生成,别碰 mysql.user

导出权限不是 dump 一张表的事。mysql.user 只存密码哈希和账号状态,真正权限分散在 mysql.dbmysql.tables_priv 等至少 5 张表里,结构随版本变化(比如 5.7 的 password 字段在 8.0 已被 authentication_string 替代),硬导会丢权限、锁账号、甚至导致登录失败。SHOW GRANTS FOR 'u'@'h' 才是唯一能还原“人眼可读、机器可执行”的完整授权逻辑的方式。

批量导出所有非系统用户的 SHOW GRANTS 语句

终端一行命令搞定(Linux/macOS):

mysql -Nse "SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''' ;') FROM mysql.user WHERE user NOT IN ('mysql.infoschema','mysql.session','mysql.sys','root') AND user NOT LIKE 'performance_schema%'" | mysql -N | sed 's/$/;/g'
  • -N 关闭列名输出,-s 去除多余空格,避免解析失败
  • 过滤掉内置用户(mysql.session 等)——否则 SHOW GRANTS 会报错中断
  • sed 's/$/;/g' 给每行末尾补分号,方便后续直接 source 执行
  • 输出结果就是一串可直接在目标库运行的 GRANT ... TO 'u'@'h'; 语句

MySQL 8.0+ 必须额外处理角色和认证插件

如果源库用了角色(CREATE ROLE + GRANT role_name TO 'u'@'h'),SHOW GRANTS 输出里会有 SET DEFAULT ROLE,但不会展开角色本身的权限。漏掉角色定义,导入后权限不生效。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 先导出角色权限:SHOW GRANTS FOR ROLE 'role_name';
  • 再导出角色绑定关系:SELECT * FROM mysql.role_edges WHERE TO_HOST = '%';(注意 host 匹配)
  • 检查用户认证插件:SELECT user, host, plugin FROM mysql.user; —— 若目标环境客户端老旧(如 PHP 7.2),需在新库执行 ALTER USER 'u'@'h' IDENTIFIED WITH mysql_native_password BY 'pwd'; 降级插件

导入前清空目标库旧权限比盲目追加更安全

直接执行导出的 GRANT 语句大概率报错:ERROR 1396 (HY000): Operation CREATE USER failed(用户已存在),或权限叠加引发越权。

  • 推荐做法:先对每个要迁移的账号执行 DROP USER IF EXISTS 'u'@'h';(MySQL 8.0.13+ 支持)
  • 若版本太低,改用 REVOKE ALL PRIVILEGES ON *.* FROM 'u'@'h'; REVOKE GRANT OPTION ON *.* FROM 'u'@'h';
  • 导入后必须执行 FLUSH PRIVILEGES;,内存权限缓存不刷新,新语句等于没执行
  • 特别注意:REVOKE 不重置密码、不解除锁定、不修改过期状态——这些字段得单独查 mysql.user 补全

实际迁移时最容易卡在「以为导出了就完事」——SHOW GRANTS 输出的是授权快照,但用户是否存在、密码是否兼容、角色是否定义、host 白名单是否适配目标网络,这四件事缺一不可。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

417

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

820

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2372

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

796

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

689

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

354

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2116

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

3892

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

627

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 169人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 271人学习