mysql binlog二進(jìn)制日志詳解
更新時(shí)間:2011年10月31日 23:13:00 作者:
二進(jìn)制日志包含了所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)(例如,沒有匹配任何行的一個(gè)DELETE)的所有語句
基本概念
定義:
二進(jìn)制日志包含了所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)(例如,沒有匹配任何行的一個(gè)DELETE)的所有語句。
作用:
1。二進(jìn)制日志的主要目的是在恢復(fù)使能夠最大可能地更新數(shù)據(jù)庫,因?yàn)槎M(jìn)制日志包含備份后進(jìn)行的所有更新。
2。二進(jìn)制日志還用于在主復(fù)制服務(wù)器上記錄所有將發(fā)送給從服務(wù)器的語句。
不良影響:
運(yùn)行服務(wù)器時(shí)若啟用二進(jìn)制日志則性能大約慢1%。
如何啟動:
通過 –log-bin=file選項(xiàng)可以啟用
(更改my.ini文件)
日志位置
>>如果沒有指定文件名,則Mysql使用hostname-bin文件.
>>如果指定了相對路徑,則假定該路徑相對于數(shù)據(jù)目錄
>>Mysql在文件名后添加了數(shù)字索引.所以該文件最后的形式為filename.number
如果你在日志名中提供了擴(kuò)展名(例如,–log-bin=file_name.extension),則擴(kuò)展名被悄悄除掉并忽略。
更換策略:
使用索引來循環(huán)文件,在以下條件將循環(huán)至下一個(gè)索引
1。服務(wù)器重啟
2。服務(wù)器被更新
3。日志到達(dá)了最大日志長度 max_binlog_size
4。日志被刷新 mysql> flush logs;
工具介紹:
shell>>mysqlbinlog [option] binlogFile> newfile
如: D:\mysql\log>mysqlbinlog binlog.000001 > 1.txt
一個(gè)例子:
log-bin=”D:/mysql/log/binlog” 那么,在該文件夾下就會有文件D:/mysql/log/binlog.000001等
常見問題
1.如何清除binlog
>>>使用下面的兩個(gè)命令
PURGE {MASTER | BINARY} LOGS TO ‘log_name' //log_name不會被清除
PURGE {MASTER | BINARY} LOGS BEFORE ‘date' //date不會被清除
實(shí)例如下:
mysql> purge master logs to ‘binlog.000004′;
Query OK, 0 rows affected (0.01 sec)
mysql> purge master logs before '2009-09-22 00:00:00′;
Query OK, 0 rows affected (0.05 sec)
>>>或使用命令
RESET MASTER
刪除之前所有的binlog,并重新生成新的binlog
后綴從000001開始
注:如果您有一個(gè)活性的從屬服務(wù)器,該服務(wù)器當(dāng)前正在讀取您正在試圖刪除的日志之一,
則本語句不會起作用,而是會失敗,并伴隨一個(gè)錯(cuò)誤。
不過,如果從屬服務(wù)器是休止的,并且您碰巧清理了其想要讀取的日志之一,則從屬服務(wù)器啟動后不能復(fù)制。
當(dāng)從屬服務(wù)器正在復(fù)制時(shí),本語句可以安全運(yùn)行。您不需要停止它們。
2.記錄到二進(jìn)制日志知的內(nèi)容配置
binlog-do-db=sales 只記錄sales庫
binlog-ignore-db=sales 除sales庫不記錄,其他都記錄
但是如果在操作數(shù)據(jù)庫之前,不使用use $dbname 那么所有的SQL都不會記錄
如果使用了use $dbname,那么判斷規(guī)則取決于這里的$dbname,而不是SQL中操作的庫
3.二進(jìn)制日志不準(zhǔn)確的處理
默認(rèn)情況下,并不是每次寫入時(shí)都將二進(jìn)制日志與硬盤同步。因此如果操作系統(tǒng)或機(jī)器(不僅僅是MySQL服務(wù)器)崩潰,有可能二進(jìn)制日志中最后的語句丟失。
要想防止這種情況,你可以使用sync_binlog全局變量(1是最安全的值,但也是最慢的),使二進(jìn)制日志在每N次二進(jìn)制日志寫入后與硬盤同步。
即使sync_binlog設(shè)置為1,出現(xiàn)崩潰時(shí),也有可能表內(nèi)容和二進(jìn)制日志內(nèi)容之間存在不一致性。
如果崩潰恢復(fù)時(shí)MySQL服務(wù)器發(fā)現(xiàn)二進(jìn)制日志變短了(即至少缺少一個(gè)成功提交的InnoDB事務(wù)),
如果sync_binlog =1并且硬盤/文件系統(tǒng)的確能根據(jù)需要進(jìn)行同步(有些不需要)則不會發(fā)生,則輸出錯(cuò)誤消息 (“二進(jìn)制日志<名>比期望的要小”)。
在這種情況下,二進(jìn)制日志不準(zhǔn)確,復(fù)制應(yīng)從主服務(wù)器的數(shù)據(jù)快照開始。
定義:
二進(jìn)制日志包含了所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)(例如,沒有匹配任何行的一個(gè)DELETE)的所有語句。
作用:
1。二進(jìn)制日志的主要目的是在恢復(fù)使能夠最大可能地更新數(shù)據(jù)庫,因?yàn)槎M(jìn)制日志包含備份后進(jìn)行的所有更新。
2。二進(jìn)制日志還用于在主復(fù)制服務(wù)器上記錄所有將發(fā)送給從服務(wù)器的語句。
不良影響:
運(yùn)行服務(wù)器時(shí)若啟用二進(jìn)制日志則性能大約慢1%。
如何啟動:
通過 –log-bin=file選項(xiàng)可以啟用
(更改my.ini文件)
日志位置
>>如果沒有指定文件名,則Mysql使用hostname-bin文件.
>>如果指定了相對路徑,則假定該路徑相對于數(shù)據(jù)目錄
>>Mysql在文件名后添加了數(shù)字索引.所以該文件最后的形式為filename.number
如果你在日志名中提供了擴(kuò)展名(例如,–log-bin=file_name.extension),則擴(kuò)展名被悄悄除掉并忽略。
更換策略:
使用索引來循環(huán)文件,在以下條件將循環(huán)至下一個(gè)索引
1。服務(wù)器重啟
2。服務(wù)器被更新
3。日志到達(dá)了最大日志長度 max_binlog_size
4。日志被刷新 mysql> flush logs;
工具介紹:
shell>>mysqlbinlog [option] binlogFile> newfile
如: D:\mysql\log>mysqlbinlog binlog.000001 > 1.txt
一個(gè)例子:
log-bin=”D:/mysql/log/binlog” 那么,在該文件夾下就會有文件D:/mysql/log/binlog.000001等
常見問題
1.如何清除binlog
>>>使用下面的兩個(gè)命令
PURGE {MASTER | BINARY} LOGS TO ‘log_name' //log_name不會被清除
PURGE {MASTER | BINARY} LOGS BEFORE ‘date' //date不會被清除
實(shí)例如下:
mysql> purge master logs to ‘binlog.000004′;
Query OK, 0 rows affected (0.01 sec)
mysql> purge master logs before '2009-09-22 00:00:00′;
Query OK, 0 rows affected (0.05 sec)
>>>或使用命令
RESET MASTER
刪除之前所有的binlog,并重新生成新的binlog
后綴從000001開始
注:如果您有一個(gè)活性的從屬服務(wù)器,該服務(wù)器當(dāng)前正在讀取您正在試圖刪除的日志之一,
則本語句不會起作用,而是會失敗,并伴隨一個(gè)錯(cuò)誤。
不過,如果從屬服務(wù)器是休止的,并且您碰巧清理了其想要讀取的日志之一,則從屬服務(wù)器啟動后不能復(fù)制。
當(dāng)從屬服務(wù)器正在復(fù)制時(shí),本語句可以安全運(yùn)行。您不需要停止它們。
2.記錄到二進(jìn)制日志知的內(nèi)容配置
binlog-do-db=sales 只記錄sales庫
binlog-ignore-db=sales 除sales庫不記錄,其他都記錄
但是如果在操作數(shù)據(jù)庫之前,不使用use $dbname 那么所有的SQL都不會記錄
如果使用了use $dbname,那么判斷規(guī)則取決于這里的$dbname,而不是SQL中操作的庫
3.二進(jìn)制日志不準(zhǔn)確的處理
默認(rèn)情況下,并不是每次寫入時(shí)都將二進(jìn)制日志與硬盤同步。因此如果操作系統(tǒng)或機(jī)器(不僅僅是MySQL服務(wù)器)崩潰,有可能二進(jìn)制日志中最后的語句丟失。
要想防止這種情況,你可以使用sync_binlog全局變量(1是最安全的值,但也是最慢的),使二進(jìn)制日志在每N次二進(jìn)制日志寫入后與硬盤同步。
即使sync_binlog設(shè)置為1,出現(xiàn)崩潰時(shí),也有可能表內(nèi)容和二進(jìn)制日志內(nèi)容之間存在不一致性。
如果崩潰恢復(fù)時(shí)MySQL服務(wù)器發(fā)現(xiàn)二進(jìn)制日志變短了(即至少缺少一個(gè)成功提交的InnoDB事務(wù)),
如果sync_binlog =1并且硬盤/文件系統(tǒng)的確能根據(jù)需要進(jìn)行同步(有些不需要)則不會發(fā)生,則輸出錯(cuò)誤消息 (“二進(jìn)制日志<名>比期望的要小”)。
在這種情況下,二進(jìn)制日志不準(zhǔn)確,復(fù)制應(yīng)從主服務(wù)器的數(shù)據(jù)快照開始。
相關(guān)文章
mysql多行子查詢實(shí)戰(zhàn)案例(只包含不相關(guān)子查詢)
在MySQL中多行子查詢(也稱為 IN 子查詢)是指子查詢返回多行數(shù)據(jù),并且這些數(shù)據(jù)用于主查詢中的某個(gè)條件判斷,這篇文章主要介紹了mysql多行子查詢(只包含不相關(guān)子查詢)的相關(guān)資料,需要的朋友可以參考下2024-10-10
Mysql中有關(guān)Datetime和Timestamp的使用總結(jié)
mysql數(shù)據(jù)庫常用的時(shí)間類型有timestamp和datetime,兩者主要區(qū)別是占用存儲空間長度不一致、可存儲的時(shí)間也有限制,本文就來詳細(xì)的介紹一下,感興趣的可以了解一下2021-12-12
解決MySql8.0 查看事務(wù)隔離級別報(bào)錯(cuò)的問題
這篇文章主要介紹了解決MySql8.0 查看事務(wù)隔離級別報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
mysql存儲過程之引發(fā)存儲過程中的錯(cuò)誤條件(SIGNAL和RESIGNAL語句)實(shí)例分析
這篇文章主要介紹了mysql存儲過程之引發(fā)存儲過程中的錯(cuò)誤條件(SIGNAL和RESIGNAL語句),結(jié)合實(shí)例形式分析了mysql使用SIGNAL和RESIGNAL語句來引發(fā)存儲過程中的錯(cuò)誤條件相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-12-12
MySQL快速禁用賬戶登入及如何復(fù)制/復(fù)用賬戶密碼(最新推薦)
這篇文章主要介紹了MySQL如何快速禁用賬戶登入及如何復(fù)制/復(fù)用賬戶密碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01
MySql中 is Null段判斷無效和IFNULL()失效的解決方案
這篇文章主要介紹了MySql中 is Null段判斷無效和IFNULL()失效的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Windows系統(tǒng)中完全卸載MySQL數(shù)據(jù)庫實(shí)現(xiàn)重裝mysql
這篇文章主要介紹了Windows系統(tǒng)中完全卸載MySQL數(shù)據(jù)庫實(shí)現(xiàn)重裝mysql數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05

