如何使用MySQL複製使用者權限?

如何使用MySQL複製使用者權限?

我有一個包含許多資料庫和使用者的 MySQL 安裝,我需要將其遷移到新的 MySQL 安裝。我可以使用 phpMyAdmin 匯出然後匯入資料庫/表,但我不知道有什麼可以移動使用者和權限。我怎樣才能輕鬆做到這一點?

答案1

像這樣的腳本將使用 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 資料庫的模式偶爾會更新。

如果您想消除一些多餘的內容,這也允許您選擇要重新建立的帳戶。


我最近在一個名稱中包含空格的用戶上使用了它,這令人困惑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")

答案2

這將為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} -AN < /tmp/ShowGrants.sql | sed 's/$/;/g' > MySQLUserGrants.sql
rm -f /tmp/ShowGrants.sql

您也可以下載並使用這些工具來執行相同的操作:

試一試 !

答案3

我相信您應該能夠透過備份和還原資料庫來遷移這些資料mysql

相關內容