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日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【安装MongoDB】CentOS7 下
- 下一篇: 图形用户界面