MySQL的binlog日志
一:MySQL的4種不同日志
?
- 1:error log,錯(cuò)誤日志。
記錄了系統(tǒng)啟動(dòng),運(yùn)行以及停止過程中遇到的一些問題
- 2:general log,普通日志
記錄了MySQL執(zhí)行的所有語(yǔ)句以及語(yǔ)句開始執(zhí)行的時(shí)間等信息,用戶可以選擇打開它
- 3:slow log,慢日志
記錄了MySQL所有慢查詢相關(guān)的信息。一般用來(lái)查詢慢sql。
- 4:binlog,二進(jìn)制日志
二進(jìn)制日志則以事件event的形式記錄了MySQL的庫(kù)表結(jié)構(gòu)以及表數(shù)據(jù)的所有變更信息
?
二:簡(jiǎn)介
?
binlog是記錄了所欲數(shù)據(jù)表結(jié)構(gòu)變更(例如create、alter table..)以及數(shù)據(jù)表修改(insert、update、delete...)的二進(jìn)制日志。 binlog不會(huì)記錄select和show這樣的操作,因?yàn)檫@類操作對(duì)數(shù)據(jù)本身并沒有修改。
從宏觀上看,binlog由一系列的binlog文件和一個(gè)index文件組成。數(shù)據(jù)庫(kù)所有的變更都是以事件的形式記錄在binlog文件中,index文件記錄當(dāng)前使用了那些binlog文件。binlog文件以一個(gè)4字節(jié)的常量作為開頭(標(biāo)識(shí)這是一個(gè)binlog文件),后面跟著一系列的binlog事件。對(duì)于不同的binlog格式,相同語(yǔ)句記錄在binlog文件中的事件也有所不同。
2.1 binlog的作用
binlog主要有幾種主要作用,恢復(fù)、復(fù)制、審計(jì)
- 恢復(fù)(recovery):某些數(shù)據(jù)的恢復(fù)需要二進(jìn)制日志。通過mysqlbinlog工具來(lái)恢復(fù)數(shù)據(jù)。
- 復(fù)制(replication):其原理與恢復(fù)類似,通過復(fù)制和執(zhí)行二進(jìn)制日志使一臺(tái)遠(yuǎn)程的MySQL(slave)與一臺(tái)MySQL數(shù)據(jù)(master)進(jìn)行實(shí)時(shí)同步。
- 審計(jì)(audit):用戶可以通過二進(jìn)制日志中的信息來(lái)進(jìn)行審計(jì),判斷是否有對(duì)數(shù)據(jù)庫(kù)進(jìn)行注入攻擊。
除了上面介紹的幾個(gè)作用外,binlog對(duì)于事務(wù)存儲(chǔ)引擎的崩潰恢復(fù)也有非常重要的作用。在開啟binlog的情況下,為了保證binlog與redo的一致性,MySQL將采用事務(wù)的兩階段提交協(xié)議。當(dāng)MySQL系統(tǒng)發(fā)生崩潰時(shí),事務(wù)在存儲(chǔ)引擎內(nèi)部的狀態(tài)可能為prepared和commit兩種。對(duì)于prepared狀態(tài)的事務(wù),是進(jìn)行提交操作還是進(jìn)行回滾操作,這時(shí)需要參考binlog:如果事務(wù)在binlog中存在,那么將其提交;如果不在binlog中存在,那么將其回滾,這樣就保證了數(shù)據(jù)在主庫(kù)和從庫(kù)之間的一致性
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數(shù)據(jù)庫(kù),使用下面命令查看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 ,表示已經(jīng)開啟
3.2 常用binlog操作命令
| 1、show master logs;? 查看所有binlog日志列表 |
| 3、show master status;? 查看master狀態(tài),即最后(最新)一個(gè)binlog日志的編號(hào)名稱,及其最后一個(gè)操作事件pos結(jié)束點(diǎn)(Position)值 |
| 3、flush logs;? 刷新log日志,自此刻開始產(chǎn)生一個(gè)新編號(hào)的binlog日志文件;注:每當(dāng)mysqld服務(wù)重啟時(shí),會(huì)自動(dòng)執(zhí)行此命令,刷新binlog日志;在mysqldump備份數(shù)據(jù)時(shí)加 -F 選項(xiàng)也會(huì)刷新binlog日志; |
| 4、reset master;? 重置(清空)所有binlog日志 |
?
四:查看binlog日志內(nèi)容
?
4.1 使用mysqlbinlog自帶查看命令
# /usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000013下面截取一個(gè)片段分析:...............................................................................# at 552#131128 17:50:46 server id 1 end_log_pos 665 Query thread_id=11 exec_time=0 error_code=0 ---->執(zhí)行時(shí)間:17:50:46;pos點(diǎn):665 SET TIMESTAMP=1385632246/*!*/; update zyyshop.stu set name='李四' where id=4 ---->執(zhí)行的SQL /*!*/; # at 665 #131128 17:50:46 server id 1 end_log_pos 692 Xid = 1454 ---->執(zhí)行時(shí)間:17:50:46;pos點(diǎn):692 ............................................................................... 注: server id 1 數(shù)據(jù)庫(kù)主機(jī)的服務(wù)號(hào); end_log_pos 665 pos點(diǎn) thread_id=11 線程號(hào)4.2:上面這種辦法讀取出binlog日志的全文內(nèi)容較多,不容易分辨查看pos點(diǎn)信息,這里介紹一種更為方便的查詢命令:
mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];選項(xiàng)解析:IN 'log_name' 指定要查詢的binlog文件名(不指定就是第一個(gè)binlog文件) FROM pos 指定從哪個(gè)pos起始點(diǎn)開始查起(不指定就是從整個(gè)文件首個(gè)pos點(diǎn)開始算) LIMIT [offset,] 偏移量(不指定就是0) row_count 查詢總條數(shù)(不指定就是所有行) 截取部分查詢結(jié)果: *************************** 20. row *************************** Log_name: mysql-bin.000021 ----------------------------------------------> 查詢的binlog日志文件名 Pos: 11197 ----------------------------------------------------------> pos起始點(diǎn): Event_type: Query ----------------------------------------------------------> 事件類型:Query Server_id: 1 --------------------------------------------------------------> 標(biāo)識(shí)是由哪臺(tái)服務(wù)器執(zhí)行的 End_log_pos: 11308 ----------------------------------------------------------> pos結(jié)束點(diǎn):11308(即:下行的pos起始點(diǎn)) Info: use `zyyshop`; INSERT INTO `team2` VALUES (0,345,'asdf8er5') ---> 執(zhí)行的sql語(yǔ)句 *************************** 21. row *************************** Log_name: mysql-bin.000021 Pos: 11308 ----------------------------------------------------------> pos起始點(diǎn):11308(即:上行的pos結(jié)束點(diǎn)) 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`這條語(yǔ)句可以將指定的binlog日志文件,分成有效事件行的方式返回,并可使用limit指定pos點(diǎn)的起始偏移,查詢條數(shù);
A.查詢第一個(gè)(最早)的binlog日志:mysql> show binlog events\G; B.指定查詢 mysql-bin.000021 這個(gè)文件: mysql> show binlog events in 'mysql-bin.000021'\G; C.指定查詢 mysql-bin.000021 這個(gè)文件,從pos點(diǎn):8224開始查起: mysql> show binlog events in 'mysql-bin.000021' from 8224\G; D.指定查詢 mysql-bin.000021 這個(gè)文件,從pos點(diǎn):8224開始查起,查詢10條 mysql> show binlog events in 'mysql-bin.000021' from 8224 limit 10\G; E.指定查詢 mysql-bin.000021 這個(gè)文件,從pos點(diǎn):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 寫的很好的一篇關(guān)于binlog文章,所以我直接拿來(lái)了
轉(zhuǎn)載于:https://www.cnblogs.com/jiujuan/p/10397362.html
總結(jié)
以上是生活随笔為你收集整理的MySQL的binlog日志的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【安装MongoDB】CentOS7 下
- 下一篇: 图形用户界面