1.mysqldump+mysqlbinlog介紹
mysqldump備份結合binlog日志恢復。MySQL備份一般采取全庫備份加日志備份的方式,例如每天執行一次全備份,每小時執行一次二進制日志備份,這樣在MySQL故障后可以使用全備份和日志備份將數據恢復到最后一個二進制日志備份前的任意位置或時間。
2.binlog
2.1介紹
MySQL的二進制日志記錄著該數據庫的所有增刪改的操作日志(前提是要在自己的服務器上開啟binlog),還包括了這些操作的執行時間。為了顯示二進制文件內容,可以使用mysqlbinlog命令查看。
2.2用途
1)主從復制
2)恢復數據
2.3開啟binary log功能
通過編輯my.cnf中的log-bin選項可以開啟二進制日志,形式如下:
log-bin [=DIR/[filename]]
其中,DIR參數指定二進制文件的存儲路徑;filename參數指定二進制文件的文件名,其形式為filename.number,number的形式為000001、000002等。每次重啟MySQL服務或運行mysql>flush logs;都會生成一個新的二進制日志文件,這些日志文件的number會不斷遞增。除了生成上述的文件外還會生成一個名為fiename.index的文件,這個文件中存儲所有二進制日志文件的清單,又稱為二進制文件的索引。
開啟binary log功能的命令操作:
vim /etc/my.cnf
log_bin=/data/mysql/mysql-bin
/etc/init.d/mysqld restart
查看是否開啟:
[root@CentOS 7 ~]# mysql
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin? ? ? ? ? ? ?| ON? ? |
+---------------+-------+
1 row in set (0.00 sec)
3.二進制日志操作的相關命令
3.1查看MySQL Server上的二進制日志
mysql> show binary logs;
+------------------+-----------+
| Log_name? ? ? ? ? ? ?| File_size? |
+------------------+-----------+
| mysql-bin.000001 |? ? ? ?120? ?|
| mysql-bin.000002 |? ? ? ?120? ?|
| mysql-bin.000003 |? ? ?65402 |
| mysql-bin.000004 |? 1190629|
| mysql-bin.000005 |? ? ? ?262? ?|
+------------------+-----------+
5 rows in set (0.00 sec)
3.2查看二進制日志信息
mysql> mysql> show binlog events in 'mysql-bin.000001';
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
| Log_name? ? ? ? ? ?| Pos? | Event_type? | Server_id? |End_log_pos | Info? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
|mysql-bin.000001|? ?4? ? |Format_desc|? ? ? 3306? ? |? ? ? ?120? ? ? ? | Server ver: 5.6.36-log, Binlog ver: 4 |
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
1 row in set (0.00 sec)
3.3查看二進制日志的事件
mysql> show binlog events;
3.4把某個二進制日志之前的其他二進制日志都刪除
pugre binary logs to 'mysql-bin.00010';
3.5把指定時間之前的二進制文件刪除
pugre binary logs before '2018-5-7 22:46:26';
4.使用binlog恢復之前刪除的數據(id=2)
注意:在實際生產環境中,如果遇到需要恢復數據庫的情況,不要讓用戶能訪問到數據庫,以避免新的數據插入進來,以及在主從的環境下,關閉主從。
4.1查看binlog文件,從中找出delete from test.tb1 where id=2
[root@CentOS7 ~]# cd /data/mysql/
[root@CentOS7 mysql]# mysqlbinlog -v mysql-bin.000002? ? (由于顯示太多,就不寫了。但從中可以看出delete事件發生position是27,事件結束position是416)
4.2恢復流程
直接用bin-log日志將數據庫恢復到刪除位置287前,然后跳過故障點,載進行恢復
4.3由于之前沒有做過全庫備份,所以使用所有binlog日志恢復,所以生產環境中需要很長時間恢復,導出相關binlog文件
[root@CentOS7 mysql]# mysqlbinlog /data/mysql/mysql-bin.000001 > /tmp/mysql-bin.000001.sql
[root@CentOS7 mysql]# mysqlbinlog --stop-position=287 /data/mysql/mysql-bin.000002 > /tmp/287.sql
[root@CentOS7 mysql]# mysqlbinlog --start-position=416 /data.mysql/mysql-bin.000002 > /tmp/416.sql
4.4刪除test數據庫
mysql>drop database test;
4.5利用binlog恢復數據
[root@CentOS7 mysql]# mysql -uroot -p123456 < /tmp/mysql-bin.000001.sql
[root@CentOS7 mysql]# mysq -uroot -p123456 < /tmp/287.sql
[root@CentOS7 mysql]# mysql -uroot -p123456 < /tmp/416.sql
4.6恢復后,檢查表的數據是否完整
mysql>select * from test.tb1;
4.7mysqlbinlog相關參數
--start-datetime? ? 從二進制日志文件中讀取指定時間戳或本地計算機時間之后的日志事件
--stop-datetime? ? 從二進制日志文件中讀取指定時間戳或本地計算機時間之前的日志事件
--start-position? ? ?從二進制日志文件中讀取指定position事件位置作為開始
--stop-position? ? ?從二進制日志文件中讀取指定position事件位置作為事件截至
5.mysqldump
5.1介紹
是MySQL用于備份和數據轉移的一個工具。主要生產一系列的SQL語句,可以封裝到文件,該文件包含所有重建數據庫所需的SQL命,如create database、create table、insert等。可以用來實現輕量級的快速遷移或恢復數據庫。
mysqldump是將數據表導成SQL腳本文件,在不同的MySQL版本之間升級時相對比較合適。
5.2使用建議
一般在數據量很小的時候(幾個G)可以由于備份。當數據量比較大的情況下,不建議使用mysqldump進行備份
5.3使用對象
可以針對單個表、多個表、單個數據庫、多個數據庫、所有數據庫進行導出的操作
6.mysqldump相關操作命令
6.1導出數據庫test
mysqldump -uroot -p --flush-logs test > /tmp/terst.sql
--flush-logs? 完整備份的時候重新開啟一個新的binlog
6.2數據庫的導入
mysql -uroot -p test > /tmp/test.sql
6.3導出指定數據庫或單個表
mysqldump [options] db_name [tbl_name]
6.4導出多個數據庫
mysqldump [options] --databases db_name
6.5導出所有
mysqldump [options] --all-databases