Mysql

備份與 MySQL 特定使用者相關的所有權限

  • July 22, 2019

我想從 MySQL 數據庫中備份與特定使用者(例如u_1)相關的所有權限,並在另一台伺服器中恢復。如此處所述,The 'mysql' database contains users/privileges/passwords.因此我必須備份所有mysql數據庫表中的所有相關數據(mysql.user,,mysql.db…)。我可以執行這個命令:

$ mysqldump -u root --flush-privileges -r mysql.sql -p mysql

但當然mysql.sql包含所有使用者和所有權限

我也試過這個命令:

$ mysqldump -u root -p --where="user.user='u_1'" mysql user> mysql.sql

但正如預期的那樣,它只包含一行mysql.user表格。

有沒有辦法去除除 之外的其他使用者u_1

擷取輸出

SHOW GRANTS FOR 'u_1'@localhost;
SHOW GRANTS FOR 'u_1'@'%';

(以及涉及的任何其他“主機”。)

然後重播GRANTs以在其他地方建立歷史憑據。

通過這個腳本,您可以備份所有 mysql 的使用者,除了root

mysql -BNe "select concat('\'',user,'\'@\'',host,'\'') from mysql.user where user != 'root'" | \
while read uh; do mysql -BNe "show grants for $uh" | sed 's/$/;/; s/\\\\/\\/g'; done > grants.sql

因此,如果您只需要導出特定使用者,例如 ( u_1)

mysql -BNe "select concat('\'',user,'\'@\'',host,'\'') from mysql.user where user = 'u_1'" | \
while read uh; do mysql -BNe "show grants for $uh" | sed 's/$/;/; s/\\\\/\\/g'; done > grants.sql

您可以通過以下方式恢復它:

mysql -u root <grants.sql

引用自:https://dba.stackexchange.com/questions/186755