日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL的binlog日志

發布時間:2025/7/14 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL的binlog日志 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:MySQL的4種不同日志


?

  • 1:error log,錯誤日志。

記錄了系統啟動,運行以及停止過程中遇到的一些問題

  • 2:general log,普通日志

記錄了MySQL執行的所有語句以及語句開始執行的時間等信息,用戶可以選擇打開它

  • 3:slow log,慢日志

記錄了MySQL所有慢查詢相關的信息。一般用來查詢慢sql。

  • 4:binlog,二進制日志

二進制日志則以事件event的形式記錄了MySQL的庫表結構以及表數據的所有變更信息

?

二:簡介


?

binlog是記錄了所欲數據表結構變更(例如create、alter table..)以及數據表修改(insert、update、delete...)的二進制日志。 binlog不會記錄select和show這樣的操作,因為這類操作對數據本身并沒有修改。

從宏觀上看,binlog由一系列的binlog文件和一個index文件組成。數據庫所有的變更都是以事件的形式記錄在binlog文件中,index文件記錄當前使用了那些binlog文件。binlog文件以一個4字節的常量作為開頭(標識這是一個binlog文件),后面跟著一系列的binlog事件。對于不同的binlog格式,相同語句記錄在binlog文件中的事件也有所不同。

2.1 binlog的作用

binlog主要有幾種主要作用,恢復、復制、審計

  • 恢復(recovery):某些數據的恢復需要二進制日志。通過mysqlbinlog工具來恢復數據。
  • 復制(replication):其原理與恢復類似,通過復制和執行二進制日志使一臺遠程的MySQL(slave)與一臺MySQL數據(master)進行實時同步。
  • 審計(audit):用戶可以通過二進制日志中的信息來進行審計,判斷是否有對數據庫進行注入攻擊。

除了上面介紹的幾個作用外,binlog對于事務存儲引擎的崩潰恢復也有非常重要的作用。在開啟binlog的情況下,為了保證binlog與redo的一致性,MySQL將采用事務的兩階段提交協議。當MySQL系統發生崩潰時,事務在存儲引擎內部的狀態可能為prepared和commit兩種。對于prepared狀態的事務,是進行提交操作還是進行回滾操作,這時需要參考binlog:如果事務在binlog中存在,那么將其提交;如果不在binlog中存在,那么將其回滾,這樣就保證了數據在主庫和從庫之間的一致性

mysql安裝在centos上

?

三:binlog的使用


?

3.1 開啟binlog日志

找到mysql的配置文件my.cnf,用vi打開, vi my.cnf 在 [mysqld] 下面加上:

log-bin=mysql-bin

然后重啟mysql使配置生效

/usr/local/mysql/bin/mysqld_safe --user=mysql &

3.2 查看binlog是否開啟

登錄mysql數據庫,使用下面命令查看binlog是否開啟:

show variables like "log_%"; mysql> show variables like "log_%"; +----------------------------------------+--------------------------------+ | Variable_name | Value | +----------------------------------------+--------------------------------+ | log_bin | ON | | log_bin_basename | /var/lib/mysql/mysql-bin | | log_bin_index | /var/lib/mysql/mysql-bin.index | | log_bin_trust_function_creators | ON | | log_bin_use_v1_row_events | OFF | | log_error | /var/lib/mysql/mysql_error.log | | log_output | FILE | | log_queries_not_using_indexes | OFF | | log_slave_updates | OFF | | log_slow_admin_statements | OFF | | log_slow_slave_statements | OFF | | log_throttle_queries_not_using_indexes | 0 | | log_warnings | 1 | +----------------------------------------+--------------------------------+

log_bin 為 ON ,表示已經開啟

3.2 常用binlog操作命令

命 令
1、show master logs;?
查看所有binlog日志列表
3、show master status;?
查看master狀態,即最后(最新)一個binlog日志的編號名稱,及其最后一個操作事件pos結束點(Position)值
3、flush logs;?
刷新log日志,自此刻開始產生一個新編號的binlog日志文件;注:每當mysqld服務重啟時,會自動執行此命令,刷新binlog日志;在mysqldump備份數據時加 -F 選項也會刷新binlog日志;
4、reset master;?
重置(清空)所有binlog日志

?

四:查看binlog日志內容


?

4.1 使用mysqlbinlog自帶查看命令

# /usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000013下面截取一個片段分析:...............................................................................# at 552#131128 17:50:46 server id 1 end_log_pos 665 Query thread_id=11 exec_time=0 error_code=0 ---->執行時間:17:50:46;pos點:665 SET TIMESTAMP=1385632246/*!*/; update zyyshop.stu set name='李四' where id=4 ---->執行的SQL /*!*/; # at 665 #131128 17:50:46 server id 1 end_log_pos 692 Xid = 1454 ---->執行時間:17:50:46;pos點:692 ............................................................................... 注: server id 1 數據庫主機的服務號; end_log_pos 665 pos點 thread_id=11 線程號

4.2:上面這種辦法讀取出binlog日志的全文內容較多,不容易分辨查看pos點信息,這里介紹一種更為方便的查詢命令:

mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];選項解析:IN 'log_name' 指定要查詢的binlog文件名(不指定就是第一個binlog文件) FROM pos 指定從哪個pos起始點開始查起(不指定就是從整個文件首個pos點開始算) LIMIT [offset,] 偏移量(不指定就是0) row_count 查詢總條數(不指定就是所有行) 截取部分查詢結果: *************************** 20. row *************************** Log_name: mysql-bin.000021 ----------------------------------------------> 查詢的binlog日志文件名 Pos: 11197 ----------------------------------------------------------> pos起始點: Event_type: Query ----------------------------------------------------------> 事件類型:Query Server_id: 1 --------------------------------------------------------------> 標識是由哪臺服務器執行的 End_log_pos: 11308 ----------------------------------------------------------> pos結束點:11308(即:下行的pos起始點) Info: use `zyyshop`; INSERT INTO `team2` VALUES (0,345,'asdf8er5') ---> 執行的sql語句 *************************** 21. row *************************** Log_name: mysql-bin.000021 Pos: 11308 ----------------------------------------------------------> pos起始點:11308(即:上行的pos結束點) Event_type: Query Server_id: 1 End_log_pos: 11417 Info: use `zyyshop`; /*!40000 ALTER TABLE `team2` ENABLE KEYS */ *************************** 22. row *************************** Log_name: mysql-bin.000021 Pos: 11417 Event_type: Query Server_id: 1 End_log_pos: 11510 Info: use `zyyshop`; DROP TABLE IF EXISTS `type`

這條語句可以將指定的binlog日志文件,分成有效事件行的方式返回,并可使用limit指定pos點的起始偏移,查詢條數;

A.查詢第一個(最早)的binlog日志:mysql> show binlog events\G; B.指定查詢 mysql-bin.000021 這個文件: mysql> show binlog events in 'mysql-bin.000021'\G; C.指定查詢 mysql-bin.000021 這個文件,從pos點:8224開始查起: mysql> show binlog events in 'mysql-bin.000021' from 8224\G; D.指定查詢 mysql-bin.000021 這個文件,從pos點:8224開始查起,查詢10條 mysql> show binlog events in 'mysql-bin.000021' from 8224 limit 10\G; E.指定查詢 mysql-bin.000021 這個文件,從pos點:8224開始查起,偏移2行,查詢10條 mysql> show binlog events in 'mysql-bin.000021' from 8224 limit 2,10\G;




參考: https://www.cnblogs.com/martinzhang/p/3454358.html 寫的很好的一篇關于binlog文章,所以我直接拿來了

轉載于:https://www.cnblogs.com/jiujuan/p/10397362.html

總結

以上是生活随笔為你收集整理的MySQL的binlog日志的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。