Mysql
mysqldump所有數據庫,包括使用者/密碼和授權
我正在執行
10.5.12-MariaDB
並嘗試對所有數據庫進行完整備份,包括使用者帳戶/密碼和贈款,但不知何故我無法備份贈款,所以我錯過了一些東西。例子。
進行完整備份
old-DB # mysqldump --opt --all-databases > /root/openstack.sql
恢復到新的數據庫伺服器
new-DB # mysql < openstack.sql
現在我可以看到
mysql.user
表中的所有數據庫和所有使用者,但所有使用者都缺少授權。例子:
old-DB # mysql -e 'show grants for glance'; +-------------------------------------------------------------------------------------------------------+ | Grants for glance@% | +-------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `glance`@`%` IDENTIFIED BY PASSWORD '*6FE1E5E532A9189C900FB696AC9DEF84CDE2194A' | | GRANT ALL PRIVILEGES ON `glance`.* TO `glance`@`%` | +-------------------------------------------------------------------------------------------------------+
它在新的數據庫伺服器上失去
new-DB# mysql -e 'show grants for glance'; ERROR 1141 (42000) at line 1: There is no such grant defined for user 'glance' on host '%'
所以我做了以下
old-DB# mysql --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql
現在 MySQLUserGrants.sql 擁有所有使用者授予命令,所以我只需複制粘貼所有命令並粘貼到 new-DB 我得到以下錯誤
MariaDB [(none)]> GRANT USAGE ON *.* TO `glance`@`%` IDENTIFIED BY PASSWORD '*6FE1E5E532A9189C900FB696AC9DEF84CDE2194A'; ERROR 1133 (28000): Can't find any matching row in the user table
問題,我如何進行完整的 mysql 備份,其中包括所有內容,甚至包括贈款。(或者我錯過了什麼?)
是的。你可以使用
--system
開關。這僅存在於 MariaDB 版本中mysqldump
,儘管您可以使用它從 MySQL 數據庫中轉儲。
system=users
將為您的使用者和授權轉儲CREATE USER ...
和聲明:GRANT ...
mysqldump --opt --system=users --insert-ignore --all-databases > /root/openstack.sql
該
--insert-ignore
選項對於避免在導入轉儲時與現有使用者發生衝突很重要。該選項將導致CREATE USER IF NOT EXISTS
語句,而不僅僅是CREATE USER
.要真正包含所有內容,請改用
--system=all
.請參閱 MariaDB KB mysqldump和手冊頁中的文件(搜尋
--system
)。這是最近的一項功能,已向後移植到 MariaDB 10.2 及更高版本。
您在邏輯上支持贈款幾乎是在做正確的事情。
大約 7.5 年前我推薦了同樣的方法:導出所有 MySQL 使用者
您還可以使用pt-show-grants並附
FLUSH PRIVILEGES;
加到輸出( pt-show-grants ... echo "FLUSH PRIVILEGES;" ) > user_grants.sql