mysql備份恢復的場景一:
數據庫數據比較小的情況下,使用mysqldump做完全備份,使用mysqlbinlog做增量備份。
完全備份,示例:
# mysqldump -A --lock-all-tables --routines --triggers --master-data=2 > /backup/all-`date +%F`.sql
增量備份,示例:
# mysqlbinlog /mydata/data/mysql-bin.0000## > /backup/incre-`date +%F`.sql
恢復的過程:
1、關閉數據庫:
# service mysqld stop
2、修改配置文件,使得啓動數據庫也不對外提供服務:
# vim /etc/my.cnf #在mysqld字段添加如下內容: skip-networking
也可以Mysql使用的套接字文件的位置,避免其他人使用數據庫
socket=/home/USERNAME/mysql.sock #在修改配置文件中生成mysql.sock文件的位置的時候,客戶端和服務器端的配置都需要改動爲一致的mysql.sock文件路徑及名稱。這樣其他的客戶端在連接的時候由於配置的不一致而無法連接到數據庫,而修復數據庫的管理員是可以的。
3、啓動數據庫,並嘗試恢復:
# service mysqld start
這個時候一定要記得如果在命令行下直接輸入# mysql < /path/from/file.sql的方式恢復數據庫,那麼新生成的數據庫中會多出來很多的二進制日誌記錄。所以這種恢復的方式是不太好的,或者說習慣是不好的,備份的時候使用命令行,這種習慣是好的,恢復的時候要連入數據庫,先將環境變量設置爲不記錄二進制日誌,然後再恢復,這樣可以避免很多不必要的日誌記錄,免去磁盤空間的浪費。
連入數據庫:
# mysql > SET session sql_log_bin=0; > SOURCE /path/from/file.sql; > SOURCE /path/from/incre.sql;
將所有的數據都恢復回來以後,開啓二進制日誌的記錄功能。
> SET session sql_log_bin=1; >\q
停止Mysql服務
# service mysqld stop
編輯配置文件,將服務的權限放開,刪除掉skip-networking選項,修改套接字文件生成的目錄位置至原來定義的位置。:
# vim /etc/my.cnf
以完全訪問的模式重啓服務器。
# service mysqld start
mysql備份恢復場景二
基於LVM快照的方式備份:
連入mysql數據庫,對數據庫的所有表施加共享鎖:
# mysql > FLUSH TABLES WITH READ LOCK;
在實際的生產環境中這條命令可能會請求很長時間長能完成對所有表施加鎖,
施加鎖成功後,需要記錄一下此時使用的二進制日誌文件及日誌所在的位置信息,要將這個信息保存做好記錄並備份。
> SHOW MASTER STATUS;
此時,可以另起一個終端,進行快照的創建,簡單的示例如下:
# lvcreate -s -L SIZE -p r -n NAME /dev/VG_NAME/LV_NAME
創建好快照以後,在前一個終端執行一下日誌滾動的功能:
> FLUSH LOGS 這樣操作的目的是生成新的二進制日誌記錄文件,之後的二進制日誌都會被存放進這個文件中,備份數據庫的操作理解起來比較容易,只是習慣很多時候更爲重要,也是避免數據有損失的很重要的保證,之前的備份方式中,mysqldump命令可以做全部備份,其帶有的--master-data選項可以記錄二進制日誌文件的名稱及位置,我個人覺得在使用mysqldump做備份時滾動日誌並不利於日後做增量備份時查看之前備份的位置,爲了避免操作上的重複查看日誌內容,也避免在習慣上會遺漏,有時滾動,有時忘記滾動日誌,就會對備份的數據造成影響。但使用基於快照的方式備份時,建議使用FLUSH LOGS,這樣生成新的日誌文件,便於快照備份的文件與數據庫中文件進行比較查看,所以,在這種場景下最好是使用這個命令。如果數據庫數據很小,我覺得還是做每次做完全備份來得簡單,而且恢復數據也方便。使用一個完全備份的腳本基本可以解決問題。
滾動日誌之後釋放鎖:
> UNLOCK TABLES;
之後進行快照內容的複製和歸檔備份的操作。
使用LVM方式備份的數據庫恢復操作:
這個過程其實與mysqldump命令的恢復方式基本一致,只是將完全備份的數據庫內容複製到數據庫的數據目錄下,然後如果有其他的增量部分的數據恢復就需要使用二進制日誌文件做增量部分的數據恢復操作。不過具體的操作過程也是要按照前一種恢復的方式,恢復的時候啓動服務也不要對外提供服務,而且要關閉二進制日誌記錄的功能(當有增量數據的情況下需要恢復時),避免產生不必要的二進制日誌記錄。
mysql備份工作中要備份很關鍵的是二進制日誌文件,二進制日誌文件與數據庫的數據目錄不能在一個磁盤上,這是最基本的要求,另外,還要備份配置文件,這些都是數據庫配置工作中重要的基礎性工作。