MySQL數據庫備份與還原


備份對於數據庫而言是至關重要的。當數據文件發生損壞、MySQL服務出現錯誤、系統內核崩潰、計算機硬件損壞或者數據被誤刪等事件時,使用一種有效的數據備份方案,就可以快速解決以上所有的問題。MySQL提供了多種備份方案,包括:邏輯備份、物理備份、全備份以及增量備份,你可以選擇最適合自己使用的方式備份數據。

物理備份通過直接復制包含有數據庫內容的目錄與文件實現,這種備份方式適用於對重要的大規模數據進行備份,並且要求實現快速還原的生產環境。典型的物理備份就是復制 MySQL數據庫的部分或全部目錄,物理備份還可以備份相關的配置文件。但采用物理備份需要MySQL處於關閉狀態或者對數據庫進行鎖操作,防止在備份的過程中改變發送數據。物理備份可以使用mysqlbackup對InnoDB數據進行備份,使用mysqlhotcopy對MyISAM數據進行備份。另外,也可以使用文件系統級別的cp、scp、tar、rsync等命令。

邏輯備份通過保存代表數據庫結構及數據內容的描述信息實現,如,保存創建數據結構以及添加數據內容的SQL語句,這種備份方式適用於少量數據的備份與還原。邏輯備份需要查詢MySQL服務器獲得數據結構及內容信息,因為需要查詢數據庫信息並將這些信息轉換為邏輯格式,所以相對於物理備份而言比較慢。邏輯備份不會備份日志、配置文件等不屬於數據庫內容的資料。邏輯備份的優勢在於不管是服務層面、數據庫層面還是數據表層面的備份都可以實現,由於是以邏輯格式存儲的,所以這種備份與系統、硬件無關。

全備份將備份某一時刻所有的數據,增量備份僅備份某一段時間內發生過改變的數據。通過物理或邏輯備份工具就可以完成完全備份,而增量備份需要開啟MySQL二進制日志,通過日志記錄數據的改變,從而實現增量差異備份。

下面將通過一些案例介紹如何使用MySQL提供的工具命令進行邏輯備份。使用 mysqldump 備份數據庫,默認該工具會將SQL語句信息導出至標准輸出,可以通過重定向將輸出保存至文件:

(1)備份所有的數據庫

 mysqldump -u root -p --all-databases > bak.sql

(2)備份指定的數據庫db1、db2以及db3

mysqldump -u root -p --databases db1 db2 db3 > bak.sql

(3)備份db數據庫,當僅備份一個數據庫時,--databases可以省略

mysqldump -u root -p db4 > bak.sql

mysqldump -u root -p --databases db4 > bak.sql

兩者之間的差別在於不使用 --databases 選項,則備份輸出信息中不會包含CREATE DATABASE或USE語句。不使用 --databases 選項備份的數據文件,在后期進行數據還原操作時,如果該數據庫不存在,必須先創建該數據庫。

使用mysql命令讀取備份文件,實現數據還原功能:

mysql -u root -p < bak.sql

mysql -u root -p db4 < bak.sq1

 

案例:下面將 testDB 數據庫中的內容導出成一個文件,並保存到 /home/目錄下

[root@192 home]# mysqldump -u root -p testDB > /home/bak.sql Enter password:

然后進入MySQL數據庫,徹底刪除 testDB 數據庫,然后重新創建 testDB 數據庫

mysql> select * from testDB.mybook; +--------+-------+-------+
| name   | price | pages |
+--------+-------+-------+
| Linux2 |    40 |   200 |
| Linux4 |    60 |   400 |
+--------+-------+-------+
2 rows in set (0.00 sec) mysql> drop database testDB; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec) mysql> exit

創建數據庫

mysql> create database testDB; Query OK, 1 row affected (0.00 sec) mysql> exit Bye

將備份的數據導入到剛新建的 testDB 數據庫中

[root@192 home]# mysql -u root -p testDB < /home/bak.sql Enter password:

 查看數據是否恢復成功

[root@192 home]# mysql -u root -p Enter password: mysql> select * from testDB.mybook; +--------+-------+-------+
| name   | price | pages |
+--------+-------+-------+
| Linux2 |    40 |   200 |
| Linux4 |    60 |   400 |
+--------+-------+-------+
2 rows in set (0.00 sec)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM