如何复制用户权限与MySQL?

我有一个MySQL的安装与许多数据库和用户,我需要迁移到一个新的MySQL安装。 我可以使用phpMyAdmin导出然后导入数据库/表,但我不知道任何移动用户和权限。 我怎样才能轻松做到这一点?

像这样的脚本将使用mysql cli客户端打印出一系列需要用来重新创build用户帐户的授权语句。 如果您的数据库凭据存储在.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数据库的模式偶尔会被更新。

这也将允许你挑选你想要重新创build的账户,如果你想删除一些垃圾。


我最近在一个包含空格的用户名中使用了这个,这个名字混淆了read ,因为IFS默认包含空格字符作为分隔符。 我的新的和改进的命令,似乎是更好的系统怪异的用户名。

 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数据库来迁移这些数据。

这将创build一个SHOW GRANTS; 文件为每个用户。

然后,回显每个用户的SHOW GRANTS; 并在每行添加一个分号。

 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 

您也可以下载和使用这些工具来做同样的事情:

  • PT-显示赠款
  • MK-显示赠款

试一试 !!!