导出所有 MySQL 用户

Jus*_*tin 7 mysql permissions users

我需要导出所有 MySQL 数据库用户(包括权限)以进行迁移。有超过 5,000 个用户,这样做的最佳方法是什么?

我应该把mysql.user桌子扔掉吗?

Rol*_*DBA 10

如果您将用户移动到另一个运行相同 MySQL 主要版本的数据库服务器,复制mysql.user是不够的。如果用户有权访问特定数据库,则复制mysql.user会带来用户和密码。

然后,您必须复制以下内容

  • mysql.db 用于数据库级授权
  • mysql.tables_priv 表级赠款
  • mysql.columns_priv 对于列级赠款

这是转储它的合乎逻辑的方法:作为 SQL GRANT 命令!!!

建议#1

如果你已经安装了 Percona Toolkit,运行pt-show-grants到一个文本文件

GRANT_FILE=MyDatabaseUSers.sql
pt-show-grants -uroot -p > ${GRANT_FILE}
Run Code Online (Sandbox Code Playgroud)

建议#2

如果你没有 Percona Toolkit 并且迫不及待,这是我个人的模拟

GRANT_CMDS=/tmp/ShowGrantsToExport.sql
GRANT_FILE=MyDatabaseUSers.sql
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(host),';')"
SQL="${SQL} FROM mysql.user WHERE user<>'' AND host<>''"
mysql ${MYSQL_CONN} -ANe"${SQL}" > ${GRANT_CMDS}
mysql ${MYSQL_CONN} < ${GRANT_CMDS} | sed 's/$/;/g' > ${GRANT_FILE}
Run Code Online (Sandbox Code Playgroud)

结语

在新的 DB Server 上,迁移数据后,以 root 身份登录 mysql 并运行

mysql> source MyDatabaseUSers.sql
Run Code Online (Sandbox Code Playgroud)

试一试 !!!