采用binlog日志的好處
掌控所有更改操作,必要時可用於恢復數據
數據庫主從復制的必要條件
[linyouyi@localhost~]# vim /etc/my.cnf [mysqld] .. .. log-bin=mysql-bin //啟用二進制日志,並指定前綴 .. ..
[linyouyi@dbsvr1 ~]# service mysqld restart
確認binlog日志文件
新啟用binlog后,每次啟動MySQl服務都會新生成一份日志文件:
[linyouyi@localhost~]# ls /var/lib/mysql/mysql-bin.* /var/lib/mysql/mysql-bin.000001 /var/lib/mysql/mysql-bin.index
清除binlog日志
刪除早前指定版本的binlog日志
RURGE MASTER LOGS TO "binlog日志"
刪除所有binlog日志,重新新建日志
RESET MASTETR
分析binlog日志
使用mysqlbinlog工具
格式:mysqlbinlog [選項] 日志文件
常用選項
--start-datatime="YYYY-mm-dd HH:MM:SS"
--stop-datatime="YYYY-mm-dd HH:MM:SS"
--start-position=起止位置
--stop-positon=結束位置
[linyouyi@localhost ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 [linyouyi@localhost ~]# mysqlbinlog --start-datetime="2018-10-20 23:30" /var/lib/mysql/mysql-bin.000002
利用binlog恢復數據
基本方法
使用mysqlbinlog提取歷史SQL操作
通過管道交給mysql命令重做
案例
重做第一份binlog所記錄的更改操作
執行指定Pos節點范圍內的sql命令恢復數據
根據上述日志分析,只要恢復從2018-10-12 20:40:50到2018-10-20 23:15:50之間的操作即可。可通過mysqlbinlog指定時間范圍輸出,結合管道交給msyql命令執行導入重做:
[linyouyi@loclahost ~]# mysqlbinlog \ --start-datetime="2018-10-12 20:40:50" \ --stop-datetime="2018-10-20 23:15:50" \ /var/lib/mysql/mysql-bin.000002 | mysql -u linyouyi -p Enter password: 若是全部重做 [linyouyi@loclahost ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 | mysql -u linyouyi -p Enter password:
mysql備份工具
mysqlhotcopy不足
僅適用於MyISAM引擎的數據庫
備份過程中,數據插入和更新操作都會被掛起
mysqldump不足
效率較低,備份和還原速度慢
備份過程中,數據插入和更新操作會被掛起
XtraBackup工具
在線熱備份工具
備份過程中不鎖表,適合生產環境適用
支持整體備份和增量備份
組件一xtrabackup:C程序,支持InnoDB和XtraDB,不能備份數據表結構
組件二innobackupex:以Perl腳本封裝xtrabackup,還支持MyISAM,能備份數據表結構
| xtrabackup基本選項 | |
| 基本選項 | 解釋 |
| --backup | 執行備份操作 |
| --target-dir | 備份到目標文件夾 |
| --datadir | 備份的原始文件夾(Mysql庫的位置) |
| --prepare | 准備恢復數據 |
| --increamental-basedir | 增量備份時,指定參照的完整備份路徑 |
| --incremental-dir | 准備恢復目錄時,指定增量備份的路徑 |
1)使用XtraBackup執行數據庫備份
[linyouyi@localhost~]# mkdir -p /backup/mysql [linyouyi@localhost~]# xtrabackup_56 –backup --datadir=/var/lib/mysql/ --target-dir=/backup/mysql/
2)確認備份好的文件數據:
[linyouyi@loclahost~]# ls /backup/mysql/
3)做一個增量備份(基於前一步的完整備份)
[linyouyi@localhost ~]# xtrabackup_56 --backup \ #xtrabackup_55 是5.5版本,xtrabackup_56是5.6版本 --datadir=/var/lib/mysql/ \ --target-dir=/backup/inc01/ \ --incremental-basedir=/backup/mysql/
確認備份好的文件數據:
[linyouyi@localhost~]# ls /backup/inc01/
對比完整備份、增量備份的大小:
[linyouyi@localhost~]# du -sh /backup/mysql/ /backup/inc01/ 11M /backup/mysql/ //完整備份的大小 264K /backup/inc01/
准備用於恢復的數據庫目錄
以/backup/mysql/可用來重建MySQL服務器。這種情況下,官方建議連做兩次--prepare,以確保數據一致性:
[linyouyi@localhost ~]# xtrabackup_56 --prepare --target-dir=/backup/mysql/ [linyouyi@localhost ~]# xtrabackup_56 --prepare --target-dir=/backup/mysql/
准備恢復“完整備份+增量備份”
以/backup/mysql/用來重建MySQL服務器,但這種情況下需提前合並相關增量備份的數據:
先准備完整備份目錄,添加--apply-log-only僅應用日志:
[linyouyi@loclahost ~]# xtrabackup_56 --prepare --target-dir=/backup/mysql --apply-log-only
然后整合增量備份的數據,通過--incremental-dir選項指定增量位置:
[linyouyi@localhost ~]# xtrabackup_56 --prepare \ --target-dir=/backup/mysql --apply-log-only \ --incremental-dir=/backup/inc01
至此,已經把全量備份和增量備份合並了
接着停止數據庫,刪除/var/lib/mysql/下的內容,拷貝數據
[linyouyi@localhost home]# systemctl stop mariadb //刪除/var/lib/mysql/下的內容 [linyouyi@localhost home]# rm -rf /var/lib/mysql/* #[linyouyi@hadoop01 home]# innobackupex --defaults-file=/etc/my.cnf --copy-back /home/mysql --user=linyouyi --password=123456 [linyouyi@localhost home]# xtrabackup --copy-back --target-dir=/home/mysql [linyouyi@localhost home]# chown -R mysql:mysql /var/lib/mysql/ [linyouyi@localhost home]# systemctl start mariadb
至此,數據已經恢復成功
