如何使用Mysqldump備份和恢復MySQL資料庫
如何使用mysqldump備份和恢復MySQL資料庫
本教程介紹如何使用mysqldump實用程式從命令列備份和還原MySQL或MariaDB資料庫。
mysqldump實用程式建立的備份檔案基本上是一組可用於重新建立原始資料庫的SQL語句。
如果不備份資料庫,則軟體錯誤或硬碟驅動器故障可能是災難性的。 為了幫助您節省大量時間和挫折,強烈建議您採取預防措施,定期備份MySQL資料庫。
您還可以使用mysqldump實用程式將MySQL資料庫傳輸到另一個MySQL伺服器。
Mysqldump命令語法
在討論如何使用mysqldump命令之前,讓我們先回顧一下基本語法。
mysqldump實用程式表示式採用以下形式:
mysqldump [options] > file.sql
- file.sql - 轉儲(備份)檔案
備份單個MySQL資料庫
要使用root使用者建立名為database_name的資料庫的備份並將其儲存到名為database_name.sql的檔案,您將執行以下命令:
mysqldump -u root -p database_name > database_name.sql
系統將提示您輸入root密碼。 輸入它,按Enter鍵,轉儲過程將開始。 根據資料庫大小,該過程可能需要一些時間。
如果您以用於執行匯出的同一使用者身份登入,並且該使用者不需要密碼,則可以省略-u和-p選項:
mysqldump database_name > database_name.sql
備份多個MySQL資料庫
要使用一個命令備份多個MySQL資料庫,您需要使用--database選項,後跟要備份的資料庫列表。 每個資料庫名稱必須用空格分隔。
mysqldump -u root -p --database database_name_a database_name_b > databases_a_b.sql
上面的命令將建立一個包含兩個資料庫的轉儲檔案。
備份所有MySQL資料庫
要備份所有MySQL資料庫,您將使用--all-databases選項:
mysqldump -u root -p --all-databases > all_databases.sql
與上一個示例相同,上面的命令將建立一個包含所有資料庫的轉儲檔案。
將所有MySQL資料庫備份為單獨的檔案
mysqldump實用程式不提供將所有資料庫備份為單獨檔案的選項,但我們可以通過簡單的bash FOR迴圈輕鬆實現:
for DB in $(mysql -e 'show databases' -s --skip-column-names); do
mysqldump $DB > "$DB.sql";
done
上面的命令將使用資料庫名稱作為檔名建立所有資料庫的單獨轉儲檔案。
建立壓縮的MySQL資料庫備份
如果資料庫大小非常大,那麼壓縮輸出是個好主意。 為此,只需將輸出管道傳輸到gzip實用程式,然後將其重定向到檔案,如下所示:
mysqldump database_name > | gzip > database_name.sql.gz
使用時間戳建立備份
如果要在同一位置保留多個備份,則需要將日期新增到備份檔名:
mysqldump database_name > database_name-$(date +%Y%m%d).sql
上面的命令將建立一個格式為database_name-20180617.sql的檔案
如果您使用cronjob自動執行資料庫備份,則還可以使用以下命令刪除超過30天的任何備份:
find /path/to/backups -type f -name "*.sql" -mtime +30 -delete
當然,您需要根據備份位置和檔名調整命令。 要了解有關find命令的更多資訊,請使用命令列指南檢查我們如何在Linux中查詢檔案。
恢復MySQL轉儲
您可以使用mysql工具恢復MySQL轉儲。 在大多數情況下,您需要建立要匯入的資料庫。 如果資料庫已經存在,則需要將其刪除。
在以下示例中,第一個命令將建立名為database_name的資料庫,然後將dump database_name.sql匯入其中:
mysql -u root -p -e "create database database_name";
mysql -u root -p database_name < database_name.sql
從完整的MySQL轉儲中恢復單個MySQL資料庫
如果使用-all-databases選項備份所有資料庫,並且要從包含多個數據庫的備份檔案還原單個數據庫,請使用--one-database選項,如下所示:
mysql --one-database database_name < all_databases.sql
在一個命令中匯出和匯入MySQL資料庫
而不是從一個數據庫建立轉儲檔案,然後將備份匯入另一個MySQL資料庫,您可以使用以下單行:
mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name
上面的命令會將輸出傳遞給遠端主機上的mysql客戶端,並將其匯入名為remote_database_name的資料庫中。 在執行該命令之前,請確保遠端伺服器上已存在該資料庫。
總結
本教程僅介紹基礎知識,但對於想要學習如何使用mysqldump實用程式從命令列建立和恢復MySQL資料庫的人來說,它應該是一個很好的開端。
如果您有任何問題或反饋,請隨時發表評論。