使用xtrabackup 做完全備份。
我們安裝完xtrabackup之后,它給我們提供了幾個命令行工具
其中我們備份要使用的命令是innobackupex,這是一個腳本它在內部封裝了幾個xtrabackup的幾個命令行,使得innobackupex使用起來會非常簡化
首先去官網下載rpm包安裝之后就可以使用了
這工具一般用於本地備份,如果需要遠程連接某個數據庫進行備份還需要借助其他工具。
完全備份:一般而言備份就是執行數據導出
命令 xtrabackupex --user=xx --password=xx /save/to/path
這樣就可以實現完全備份,將整個數據庫的所有數據進行備份到指定的路徑
需要注意的是,必須是有執行備份權限的用戶才可以備份。
我們可以專門創建一個用戶給他reload, lock tables, replication client 這三個權限就行
比如:
創建用戶
CREATE USER 'backup'@'localhost' IDENTIFIED BY 'pwd' ;
將其所有權限收回
REVOKE ALL PRIVILEGES, GRANT OPTION FROM backup@'localhost';
重新授權之后備份權限
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup'@'localhost';
重新刷新授權表
FLUSH PRIVILEGES;
比如我們備份所有庫
innobackupex -user=root -password='abc' /mysql-backup
執行之后會自動創建mysql-backup目錄,無需我們手動創建。備份好之后會在我們備份目錄下面生成一個以當前時間為名字的目錄。
這個以當前時間命名的目錄里面主要包含了以下文件
1. 我們備份我所有數據庫的名稱
2. 我們的表空間文件
3. mysql的配置文件
4. 二進制日志文件,備份這一刻你的二進制文件名,以及postion位置
如果不會自動創建備份目錄則會報錯:我們需要手動創建目錄,並且將目錄的屬主,屬組改為mysql
備份好之后還需要進行一些操作
一般情況下,在備份完成后,數據尚且不能用於恢復操作,因為備份的數據中可能會包含,尚未提交的事務,或者已經提交,但是尚未同步到數據文件中的事務。因此,此時數據文件仍然處於不一致狀態。因此我們需要進行一些准備操作。這個工作的主要作用是通過回滾未提交的事務。以及同步以及提交的事務到數據文件中,使得數據文件處於一致狀態
使用 --apply-log 選項可以實現上述功能。比如:
innobackupex --apply-log /path/to/backup-dir
后面跟上了指定的已經備份好的數據,保存的路徑,就可以實現上述工作
只有執行了這個,才能用備份的數據進行恢復
我們備份好之后,萬一我們的數據庫又發生了改變呢,因為是在線數據庫,隨時有用戶存儲數據的。
這種情況下我們就需要使用二進制日志進行即時點恢復。
因此二進制日志非常重要。
我們備份完之后,還需要對二進制日志進行備份,二進制日志一般保存在數據目錄下面,命名一般是mysql-bin.00000x
備份二進制日志之前,先登錄mysql 執行一下刷新日志flush logs;
這樣刷新之后就會產生一個新的二進制日志,我們再備份那個老的就行。
直接復制這個文件到
實現還原:
假如我們已經備份好了日志文件,以及使用xtrabackup對數據庫進行了一次全備份。
我們數據庫出現故障了,我們需要還原。注意,使用xtrabackup實現
還原數據在數據庫關閉的狀態進行還原
還原數據:
使用innobackupex --cpoy-back /path/to/backup-dir
后面跟上你的備份數據時候,數據保存的路徑
注意,恢復后的數據文件還是保存在你原來的數據目錄下面,如果這個數據屬主,屬組都變成root的話,需要將其改變為mysql
chown -R mysql.mysql /path/to/data
然后登陸上數據庫,進行二進制日志恢復。
首先找到我們備份的二進制文件路徑
將其讀取出來保存的另外的文件后綴名為 .sql,使用mysqlbinlog 命令,
比如
mysqlbinlog /root/mysql-bin.000001 >/root/abc.sql
然后連接到mysql數據庫,進行二進制日志恢復
mysql>set sql_log_bin=0;
mysql>source /root/abc.sql;
mysql>set sql_log_bin=1;
如果沒有報錯就完成了
我們到一定要定期的對二進制日志進行手動備份