1. 程式人生 > >MySQL二進制日誌

MySQL二進制日誌

實時 數據 var utf8 產生 定位 日誌格式 host 必須

二進制日誌由包含“ 事件 ”的文件組成,這些 事件描述了對數據庫內容的修改。服務器以二進制格式寫入這些文件。
1.查看binlog文件名列表
show binary logs;
技術分享圖片

2.查看binlog文件內容
show binlog events in ‘mysql-bin.000001‘ limit 10;
技術分享圖片

3.查看binlog當前位置點
show master status;
技術分享圖片

4.查看binlog 格式
日誌格式:statement,row,
row:優點:日誌比較清楚,會記錄每行數據修改細節 缺點:會產生大量的日誌
statement:優點:只記錄sql語句,解決了row格式的缺點,減少了日誌量,節省I/O 及存儲資源,提高了性能。 缺點:有些sql語句不能復制到slava,導致主從不一致,存在一些bug,語句執行錯誤不易恢復。

mixed:處於row與statement格式之間,很好的處理了其優缺點。

SELECT @@binlog_format;
技術分享圖片

5.刷新日誌
flush logs;

6.清除日誌
reset master;

7.用mysqlbinlog工具查看
mysqlbinlog -v --base64-output=decode-rows /usr/app/mysqllog/mysql_bin.000001
基於開始/結束時間
mysqlbinlog --start-datetime=‘2018-12-13 00:00:00‘ --stop-datetime=‘2018-12-14 15:01:01‘ -d hadoop /usr/app/mysqllog/mysql-bin.000001

基於pos值輸出到壓縮文件 ,註:test是庫名,/var/lib/mysql/mysql-bin.000001是二進制文件路徑
mysqlbinlog --start-position=2098 --stop-position=2205 -d test /usr/app/mysqllog/mysql-bin.000001 |gzip >test.sql.gz

提取指定位置的多個binlog日誌文件
mysqlbinlog --start-position="120" --stop-position="332" /usr/app/mysqllog/mysql-bin.000001 /usr/app/mysqllog/mysql-bin.000002|more

提取指定數據庫binlog並轉換字符集到UTF8
mysqlbinlog --database=test --set-charset=utf8 /usr/app/mysqllog/mysql-bin.000001 /usr/app/mysqllog/mysql-bin.000002 >test.sql

恢復數據
mysqlbinlog --start-position="120" --stop-position="332" /usr/app/mysqllog/mysql-bin.000001 | mysql -uroot -p

備份日誌:必須由兩個mysqlbinlog 完成
mysqlbinlog --read-from-remote-server --host=host_name --raw
binlog.000001 binlog.000131 binlog.000132

--read-from-remote-server可以用-R替代:連接到服務器並請求其二進制日誌, --host:主機ip,

mysqlbinlog --read-from-remote-server --host=host_name --raw
--to-last-log binlog.000001
--raw:寫入原始(二進制)輸出, binlog.000001:第一個文件, --to-last-log:最後一個文件讀完退出

實時讀取日誌
mysqlbinlog --read-from-remote-server --host=host_name --raw
--stop-never binlog.000001
--stop-never:到達最後一個日誌文件的末尾後保持與服務器的連接並繼續讀取新事件,沒有必要指定 --to-last-log讀取最後一個日誌文件,因為該選項是隱含的。

MySQL二進制日誌