1. 程式人生 > 實用技巧 >二進位制日誌管理操作

二進位制日誌管理操作

1.開啟二進位制日誌

[root@db02 ~]# vim /etc/my.cnf
[mysqld]
server_id
log_bin=/usr/local/mysql/data/mysql-bin

2.檢視二進位制日誌

#物理檢視
[root@db02 ~]# ll /usr/local/mysql/data/
-rw-rw---- 1 mysql mysql      120 Jul 21 19:24 mysql-bin.000001
-rw-rw---- 1 mysql mysql       39 Jul 21 19:24 mysql-bin.index

#資料庫檢視
mysql> show variables like '%log_bin%';

3.事件

1.什麼是事件
	1)在binlog中最小的記錄單元為event
	2)一個事務會被拆分成多個事件(event)

2.事件(event)特性
    1)每個event都有一個開始位置(start position)和結束位置(stop position)。
    2)所謂的位置就是event對整個二進位制的檔案的相對位置。
    3)對於一個二進位制日誌中,前120個position是檔案格式資訊預留空間。
    4)MySQL第一個記錄的事件,都是從120開始的。

4.重新整理binlog

1)flush logs;
2)重啟資料庫時會重新整理
3)二進位制日誌上限,預設1G(max_binlog_size)

5.刪除binlog

1.根據存在時間刪除日誌
#臨時生效
SET GLOBAL expire_logs_days = 7;
#永久生效
[root@db01 data]# vim /etc/my.cnf
[mysqld]
expire_logs_days = 7

2.使用purge命令刪除
PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;

3.根據檔名刪除
PURGE BINARY LOGS TO 'mysql-bin.000010';

4.使用reset master
mysql> reset master; 

二進位制日誌作用

1.記錄已提交的DML事務語句,並拆分為多個事件(event)來進行記錄
2.記錄所有DDL、DCL等語句,總之,二進位制日誌會記錄所有對資料庫發生修改的操作
3.如果我擁有資料庫搭建開始所有的二進位制日誌,那麼我可以把資料恢復到任意時刻
4.資料的備份與恢復
5.資料的複製

1.資料庫的備份與恢復

1.新增資料

mysql> create database binlog;

mysql> use binlog

mysql> create table binlog(id int);

mysql> insert binlog values(1),(2),(3);

mysql> insert binlog values(4);

mysql> insert binlog values(5);

2.刪除資料

#誤刪除兩條資料
mysql> delete from binlog where id=5;

mysql> delete from binlog where id=4;

3.通過binlog恢復資料

#檢視二進位制日誌找到位置點
[root@db02 data]# mysqlbinlog mysql-bin.000002

#將位置點之間的資料取出
[root@db02 data]# mysqlbinlog --start-position=631 --stop-position=978 mysql-bin.000002 > /tmp/hf.sql

#將資料匯入回去
[root@db02 data]# mysql < /tmp/45.sql

2.使用binlog配合資料庫升級

1.準備一臺新的資料庫,版本為5.6.38
2.舊資料庫備份資料
	[root@db03 ~]# mysqldump -uroot -p123 --triggers -R --master-data=2 -B ku linux9 myisam qiudao qiudaodsb tmp world xiangqing >/tmp/full.sql
3.將備份的資料庫傳到新資料庫
	[root@db03 ~]# scp /tmp/full.sql 172.16.1.52:/tmp/
4.修改sql中的儲存引擎
	[root@db02 data]# sed -i 's#MyISAM#InnoDB#g' /tmp/full.sql
5.將修改後的sql檔案匯入新資料
	[root@db02 data]# mysql < /tmp/full.sql
6.將程式碼中的資料庫地址修改為新的資料庫地址
7.通過binlog將資料遷移過程中新生成的資料取出
	[root@db03 data]# mysqlbinlog -uroot -p123 --start-position=120 --stop-position=465 mysql-bin.000014 > /tmp/bu.sql
	[root@db03 data]# scp /tmp/bu.sql 172.16.1.52:/tmp/
8.將新資料匯入新庫
	[root@db02 data]# mysql < /tmp/bu.sql

二進位制日誌

1.作用

1.記錄已提交的DML事務語句,並拆分為多個事件(event)來進行記錄
2.記錄所有DDL、DCL等語句
3.資料的備份恢復
4.資料的複製

#如果我擁有資料庫搭建開始所有的二進位制日誌,那麼我可以把資料恢復到任意時刻

2.二進位制日誌介紹

1.二進位制日誌預設是關閉的
2.檢視二進位制
	mysql> show variables like '%log_bin%';
3.配置
	[root@db03 ~]# vim /etc/my.cnf
	server_id=1
	log_bin=/service/mysql/data/mysql-bin
4.開啟二進位制一般儲存子 $datadir/ 下面,以'mysql-bin.00000N'命名

3.二進位制日誌工作模式

1.工作模式種類

1.statement  語句模式
2.row		行級模式
3.mixed		混合模式

2.檢視工作模式

mysql> show variables like '%binlog_format%';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)

3.STATEMENT語句模式

#語句模式,mysql5.6預設的模式
記錄資料庫中操作過得所有sql語句

#檢視
[root@db03 data]# mysqlbinlog mysql-bin.000014

#優缺點:
1.易讀
2.不安全
3.相對於行級模式佔用磁碟空間小

4.row行級模式

#行級模式,mysql5.7預設的模式
記錄的是資料的變化過程

#配置行級模式
[root@db03 data]# vim /etc/my.cnf
binlog_format=row

#檢視方式
[root@db03 data]# mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.000016

#優缺點:
1.安全
2.不易讀
3.相對於語句模式佔用磁碟大

5.mixed混合模式