Mysql

MySQL 導出使用者用分號“;”最後

  • September 11, 2019

我正在嘗試設置從一台伺服器自動導出使用者帳戶以導入另一台伺服器。我正在執行以下命令;

$ mysql -u root -p -B -s -e "show grants for 'myuser'@'localhost';" > user_export.sql

$ cat user_export.sql

GRANT USAGE ON *.* TO 'myuser'@'localhost' IDENTIFIED BY PASSWORD '*IHIHIHOOEHOEHOH'
GRANT SELECT, INSERT, UPDATE, DELETE ON `mydb`.* TO 'myuser'@'localhost'

這裡的問題是這些 SQL 語句不以 ; 結尾。所以我無法使用以下命令將其導入另一台遠端伺服器:

$ mysql -u root -p -D mydb < user_export.sql

我知道我可以編寫 bash one-liner 來包裝它並添加一個分號,但我希望能夠在最後得到這些帶有分號的語句,以保持這種美觀、簡單和清晰。

不同尋常的是,有兩種方法可以做到這一點:

選項 #1:使用pt-show-grants / mk-show-grants

Percona 已經把它變成了一個簡單的工具,;可以在每條 SQL 語句後附加分號 ( )

選項 #2:模擬 pt-show-grants / mk-show-grants

只需使用sed命令附加分號 ( ;)

mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

試一試 !!!

我之前提到過這些:

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