2010-10-20 77 views
29

我試圖組裝mysqldump所需的所有選項,以便將我的應用程序數據庫使用的所有內容都創建爲單個腳本。這包括數據庫本身和所有數據庫用戶/密碼/特權。使用mysqldump和數據庫用戶

我已經得到了這一切想通了與用戶的一塊外......這裏就是我目前使用:

mysqldump -h host -u root -p \ 
    --add-drop-database --routines -B database_name > backup.sql 

所以,我缺少什麼?

+0

MySQL用戶都不會被保存在'database_name'。 – ceejayoz 2010-10-20 21:13:46

+0

我想鏈接到[DBA stackexchange中的這個解決方案](http://dba.stackexchange.com/questions/23265/mysql-show-grants-for-all-users/127529#127529)。 – knocte 2016-02-17 07:08:26

回答

36

數據庫用戶/密碼/權限保存在mysql數據庫中,並且不會被dump命令轉儲。你必須添加數據庫,以及星展名單轉儲:

mysqldump ... --routines --databases database_name mysql > backup.sql 

或只轉儲一切:

mysqldump ... --routines --all-databases > backup.sql 
+0

完美 - 這就是我剛纔發現的。我建議我們只是警告人們傾銷/恢復MySQL數據庫vs使用我鏈接的腳本可能會有一些意想不到的效果。如果兩臺服務器不是彼此的鏡像(它們沒有相同的數據庫)。 – 2010-10-20 21:16:45

+0

請記住,mysql數據庫中有關於您可能不傾銷的數據庫的信息。我不知道將元數據導入新的數據庫服務器時會發生什麼。 – Halfgaar 2014-01-17 09:20:10

+0

我其實想要的是相反的。我想要所有的「標準」數據庫轉儲,但不是用戶信息等。所以我使用了明確的dbs列表,而不是所有的dbs,以避免傾銷「mysql」數據庫。 – BuvinJ 2015-07-30 19:16:11

9

所以,我有一個根本性的誤解。用戶不是特定於數據庫的,而是在服務器級創建的。

您可以用下面的查詢來查看所有現有用戶:

SELECT * FROM mysql.user; 

認識到這一點,這是很明顯,mysqldump的不應該做與用戶任何事情。但是,如果你需要一個導出/導入用戶和燙髮的答案,我建議你檢查下面的文章 - 它幫助我。

http://pento.net/2009/03/12/backing-up-permissions-for-individual-databases/

我在這塊板子上的噪音道歉,但我想我會離開這個崗位櫃面其他人有同樣的誤解。

+4

不,這只是要做的事情。另外,如果這篇文章是ACTUALLY讓你解決的,那麼你應該將這個答案標記爲「答案」,而不是另一個。只是想我會分享。 – jcolebrand 2010-10-20 21:47:29

+3

僅供參考,引用的鏈接顯示的SQL語句給出了類似「UNION和INTO的錯誤用法」的錯誤,解決方案是將INTO移動到最後的SELECT語句 – knocte 2016-02-17 05:51:25

+0

是的,這是答案。它的答案和你將需要使用你的大腦有點不只是複製過去一些人的命令 – Johny19 2017-07-14 08:46:18

19

當傾銷MySQL數據庫,不要忘記:

--flush-privileges Emit a FLUSH PRIVILEGES statement after dumping the mysql 
        database. This option should be used any time the dump 
        contains the mysql database and any other database that 
        depends on the data in the mysql database for proper 
        restore. 
+0

這是什麼對我來說。謝謝 – 2012-07-17 18:01:35