伺服器的二進位制日誌由包含「 事件 」的檔案組成,這些事件描述了對資料庫內容的修改。
伺服器以二進位制格式寫入這些檔案。要以文字格式顯示其內容,請使用 mysqlbinlog實用程式。
還可以使用 mysqlbinlog顯示複製設定中從屬伺服器寫入的中繼日誌檔案的內容,因為中繼日誌的格式與二進位制日誌相同。
mysqlbinlog是二進位制日誌的客戶端命令工具,用於檢視或備份二進位制日誌檔案轉換為乙個sql檔案,恢復時直接source引用即可
常用選項:
mysqlbinlog [option] log_file...
--start-position=# 指定開始位置
--stop-position=# 指定結束位置
--start-datetime= 起始時間
--stop-datetime= 結束時間
時間的格式:yyyy-mm-dd hh:mm:ss,2019-11-11 11:11:11
--base64-output[=name]
-v -vvv :詳細資訊,預設是看不到執行的語句的,使用-v可以變相的看到執行的語句
vim /etc/my.cnf
[mysqld]
# 日誌記錄路徑及日誌名稱,會在mysql-bin後面自動新增.000001字尾,要確保/data/binlog目錄存在。並且許可權正確
log-bin=/data/binlog/mysql-bin
# 記錄二進位制日誌的格式,row行格式,取值有statement|row|mixed
binlog-format=row
# 日誌產生後多長時間清除,天為單位
expire_logs_days=30
在資料庫中:
mariadb [hello]> show master logs ; # 此命令檢視當前日誌記錄的位置
+------------------+-----------+
| log_name | file_size |
+------------------+-----------+
| mysql-bin.000001 | 508970 |
+------------------+-----------+
1 row in set (0.00 sec)
在shell中:
mysqlbinlog工具會將經過base64編碼過的二進位制日誌轉換為適用於讀的sql語句型別,以便檢視
# 檢視二進位制日誌
mysqlbinlog /data/binlog/mysql-bin.000001 -vvv | less
注意:其中並不能顯示像普通的sql語句,像以下內容
create table `student` (
`id` tinyint(4) not null auto_increment,
`name` varchar(20) default null,
`age` tinyint(4) default '25',
`***` enum('f','m') default 'm',
`phone` char(11) default null,
`class` tinyint(4) default null,
primary key (`id`)
) engine=innodb auto_increment=21 default charset=utf8mb4
用mysqlbinlog匯出,實現備份檔案
# 全備,當二進位制日誌檔案過多過大時,不建議使用mysqlbinlog備份,有其他工具實現
mysqlbinlog /data/binlog/mysql-bin.000001 > all.sql
# 指定乙個時間到某時間的部分備份,備份的只是兩個時間段中間產生的資料
mysqlbinlog --start-datetime="2019-11-11 18:05:00" --stop-datetime="2019-11-11 18:10:00" > time.sql
# 指定位置實現部分備份
在資料庫中:檢視目前的日誌位置
mariadb [(none)]> show master logs;
+------------------+-----------+
| log_name | file_size |
+------------------+-----------+
| mysql-bin.000001 | 508970 |
+------------------+-----------+
在shell中:使用位置並備份
mysqlbinlog --start-position=400000 --stop-position=500000 > point.sql
注意:此處只是示例,真的備份要根據你的實際情況來,這裡只是說明方法
用mysqlbinlog恢復資料
刪除資料庫全備恢復
恢復時建議暫時將二進位制日誌記錄關閉,因為恢復操作都是之前的資料,記錄日誌也是無用的
備份出來的檔案中的sql語句會事先做判斷,如果某庫存在,則該庫不予建立,如果庫或表不存在,則建立
破壞:rm -rf /var/lib/mysql/hello/ # hello為我做實驗的資料庫
恢復:登入到資料庫中,執行source命令
mariadb [(none)]> source all.sql;
mariadb [mysql]> show databases;
+--------------------+
| database |
+--------------------+
| information_schema |
| db1 |
| hello |
| mysql |
| performance_schema |
| test |
+--------------------+
注意
1)如果使用匯出的指令碼恢復資料,前提是指令碼中必須要有建立的命令,他會認為就是建立指令碼。如果沒有建立的命令那就不能恢復
2)如果drop刪除了乙個表,那麼匯出的指令碼中應該要有create命令,要不沒法恢復
3)delete刪除的資料要有insert命令
4)二進位制日誌檔案中只是記錄了每條命令的執行,要在有資料庫的基礎上才能執行命令不是嗎
指令碼實現每小時備份binlog
1、編輯指令碼
vim bac-binlog.sh
#!/bin/bash
##description backup mysql binlog
time=`date -d "-1 hours" +"%f %t"`
mysqlbinlog --start-datetime="$time" /data/binlog/mysql-bin.0* > /tmp/binlog/mysql-binlog-`date +"%f-%h"`.sql
2、為指令碼新增執行許可權
chmod +x bac-binlog.sh
3、新增cron任務計畫
crontab -e
01 * * * * /root/bak-binlog.sql &> /dev/null # 將產生的資訊全部丟到/dev/null,以免接收無用的郵件
如有錯誤請指正! mysqlbinlog工具的使用
1.檢視最新的binlog狀態 show master status 2.檢視具體的binlog檔案 show binlog events in mysql bin.000004 from 154 limit 2,2 g 注意沒有分號 3.產生新的日誌檔案 flush logs 4.重置日誌,刪除所...
MySQL工具 mysqlbinlog 日誌管理
由於伺服器生成的二進位制日誌檔案以二進位制格式儲存,所以如果想檢查這些檔案的文字格式,就會用到 mysqlbinlog 日誌管理工具。更多的選項使用 mysqlbinlog help 檢視。d,database name 指定資料庫名稱,只列出指定的資料庫相關操作 o,offset n 忽略日誌中的...
mysqlbinlog使用詳解
mysqlbinlog用於處理二進位制日誌檔案的實用工具詳解 mysqlbinlog 從二進位制日誌讀取語句的工具。在二進位制日誌檔案中包含的執行過的語句的日誌可用來幫助從崩潰中恢復 在my.cnf這個檔案中加一行 windows為my.ini vi etc my.cnf mysqld log bi...