1.mysqldump+mysqlbinlog介紹mysql
mysqldump備份結合binlog日誌恢復。MySQL備份通常採起全庫備份加日誌備份的方式,例如天天執行一次全備份,每小時執行一次二進制日誌備份,這樣在MySQL故障後可使用全備份和日誌備份將數據恢復到最後一個二進制日誌備份前的任意位置或時間。sql
2.binlog
數據庫
2.1介紹vim
MySQL的二進制日誌記錄着該數據庫的全部增刪改的操做日誌(前提是要在本身的服務器上開啓binlog),還包括了這些操做的執行時間。爲了顯示二進制文件內容,可使用mysqlbinlog命令查看。服務器
2.2用途ide
1)主從複製工具
2)恢復數據spa
2.3開啓binary log功能rest
經過編輯my.cnf中的log-bin選項能夠開啓二進制日誌,形式以下:日誌
log-bin [=DIR/[filename]]
其中,DIR參數指定二進制文件的存儲路徑;filename參數指定二進制文件的文件名,其形式爲filename.number,number的形式爲00000一、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