像这样的脚本将使用 mysql cli 客户端打印出一系列您需要用来重新创建用户帐户的授权语句。如果您将数据库凭据存储在 .my.cnf 中,此命令效果最佳
#!/bin/bash
# adapted from (http://www.pyrosoft.co.uk/blog/2006/10/18/show-grants-for-all-users-on-mysql/)
(
mysql --batch --skip-column-names -e "SELECT user, host FROM user" mysql
) | while read user host
do
echo "# $user @ $host"
mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
done
如果您从一个版本的 mysql 跳转到另一个版本,您可能想要使用它而不是简单地转储 mysql 数据库。mysql 数据库的架构偶尔会更新。
IFS=$'\t'; while read user host; do
echo "user:$user host:$host"
mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
echo ""
done < <(mysql --batch --skip-column-names -e "SELECT user, host FROM mysql.user")
MYSQL_CONN="-uroot -prootpassword"
SQLSTMT="SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';')"
SQLSTMT="${SQLSTMT} FROM mysql.user WHERE user<>''"
mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" > /tmp/ShowGrants.sql
mysql ${MYSQL_CONN} -ANe < /tmp/ShowGrants.sql | sed 's/$/;/g' > MySQLUserGrants.sql
rm -f /tmp/ShowGrants.sql
像这样的脚本将使用 mysql cli 客户端打印出一系列您需要用来重新创建用户帐户的授权语句。如果您将数据库凭据存储在 .my.cnf 中,此命令效果最佳
如果您从一个版本的 mysql 跳转到另一个版本,您可能想要使用它而不是简单地转储 mysql 数据库。mysql 数据库的架构偶尔会更新。
这也将允许您选择要重新创建的帐户,如果您想消除一些杂乱无章的东西。
我最近在一个名称中包含空格的用户上使用它,这很困惑
read
,因为 IFS 默认情况下包含空格字符作为分隔符。我的新命令和改进命令,似乎在系统奇怪的用户名上效果更好。这将为每个用户创建一个
SHOW GRANTS;
文件。然后,回显每个用户的
SHOW GRANTS;
并在每一行附加一个分号。您还可以下载并使用这些工具来做同样的事情:
试试看 !!!
我相信您应该能够通过备份和恢复
mysql
数据库来迁移这些数据。