二進位制日誌管理操作
阿新 • • 發佈:2020-07-24
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混合模式