1.binlog日志:
即二進(jìn)制日志,它記錄了數(shù)據(jù)庫上的所有改變罢低,并以二進(jìn)制的形式保存在磁盤中滑沧;
它可以用來查看數(shù)據(jù)庫的變更歷史俩滥、數(shù)據(jù)庫增量備份和恢復(fù)徒爹、Mysql的復(fù)制(主從數(shù)據(jù)庫的復(fù)制)
2.binlog有三種格式:Statement荚醒、Row以及Mixed。
–基于SQL語句的復(fù)制(statement-based replication,SBR)隆嗅,?
–基于行的復(fù)制(row-based replication,RBR)界阁,?
–混合模式復(fù)制(mixed-based replication,MBR)。
2.1 Statement?
每一條會修改數(shù)據(jù)的sql都會記錄在binlog中榛瓮。
優(yōu)點(diǎn):不需要記錄每一行的變化铺董,減少了binlog日志量,節(jié)約了IO禀晓,提高性能。
缺點(diǎn):由于記錄的只是執(zhí)行語句坝锰,為了這些語句能在slave上正確運(yùn)行粹懒,因此還必須記錄每條語句在執(zhí)行的時(shí)候的一些相關(guān)信息,以保證所有語句能在slave得到和在master端執(zhí)行時(shí)候相同的結(jié)果顷级。另外mysql 的復(fù)制,像一些特定函數(shù)功能凫乖,slave可與master上要保持一致會有很多相關(guān)問題。
ps:相比row能節(jié)約多少性能與日志量弓颈,這個(gè)取決于應(yīng)用的SQL情況帽芽,正常同一條記錄修改或者插入row格式所產(chǎn)生的日志量還小于Statement產(chǎn)生的日志量,但是考慮到如果帶條件的update操作翔冀,以及整表刪除导街,alter表等操作,ROW格式會產(chǎn)生大量日志纤子,因此在考慮是否使用ROW格式日志時(shí)應(yīng)該跟據(jù)應(yīng)用的實(shí)際情況搬瑰,其所產(chǎn)生的日志量會增加多少款票,以及帶來的IO性能問題。
2.2 Row
5.1.5版本的MySQL才開始支持row level的復(fù)制,它不記錄sql語句上下文相關(guān)信息泽论,僅保存哪條記錄被修改艾少。
優(yōu)點(diǎn): binlog中可以不記錄執(zhí)行的sql語句的上下文相關(guān)的信息,僅需要記錄那一條記錄被修改成什么了翼悴。所以rowlevel的日志內(nèi)容會非常清楚的記錄下每一行數(shù)據(jù)修改的細(xì)節(jié)缚够。而且不會出現(xiàn)某些特定情況下的存儲過程,或function鹦赎,以及trigger的調(diào)用和觸發(fā)無法被正確復(fù)制的問題.
缺點(diǎn):所有的執(zhí)行的語句當(dāng)記錄到日志中的時(shí)候潮瓶,都將以每行記錄的修改來記錄,這樣可能會產(chǎn)生大量的日志內(nèi)容钙姊。
ps:新版本的MySQL中對row level模式也被做了優(yōu)化毯辅,并不是所有的修改都會以row level來記錄,像遇到表結(jié)構(gòu)變更的時(shí)候就會以statement模式來記錄煞额,如果sql語句確實(shí)就是update或者delete等修改數(shù)據(jù)的語句思恐,那么還是會記錄所有行的變更。
2.3 Mixed
從5.1.8版本開始膊毁,MySQL提供了Mixed格式胀莹,實(shí)際上就是Statement與Row的結(jié)合。
在Mixed模式下婚温,一般的語句修改使用statment格式保存binlog描焰,如一些函數(shù),statement無法完成主從復(fù)制的操作栅螟,則采用row格式保存binlog荆秦,MySQL會根據(jù)執(zhí)行的每一條具體的sql語句來區(qū)分對待記錄的日志形式,也就是在Statement和Row之間選擇一種.
2.4 binlog 日志模式查看(或者查看數(shù)據(jù)庫的配置文件my.cnf---->binlog_format):
2.5修改日志模式:?
? ? ? 直接修改:set globle binlog_format='MIXED'
? ? ? 或者配置文件中修改vim my.cnf---->binlog_format=MIXED
2.6日志存在的位置:查看my.cnf 配置中有寫
或者直接查看binlog日志列表:show binary logs;
2.7查看當(dāng)前正在寫入的binlog文件: show master status?
2.8刷新新的binlog日志文件:
2.9binlog文件的查看:
數(shù)據(jù)庫中查看binlog日志: show binlog events in 'mysql-bin.000002'力图;
非數(shù)據(jù)庫查看:
mysqlbinlog --start-datetime='開始時(shí)間' --stop-datetime='結(jié)束時(shí)間' binlog日志文件的名稱 > /tmp/mysql.log
慢查詢:
1.配置文件my.cnf配置:
slow_query_log 慢查詢開啟狀態(tài)
slow_query_log_file 慢查詢?nèi)罩敬娣诺奈恢茫ㄟ@個(gè)目錄需要MySQL的運(yùn)行帳號的可寫權(quán)限步绸,一般設(shè)置為MySQL的數(shù)據(jù)存放目錄)
long_query_time 查詢超過多少秒才記錄
2.慢日志刷新:
a. 重命名慢查詢?nèi)罩? mv slow.log slow.log-old01
b. 刷新日志? ? /usr/local/mysql/bin/mysqladmin -uroot -p flush-logs
c. 查看執(zhí)行結(jié)果? ? ls slow.*?
? ? ? ? ? ? ? ? ? slow.log slow.log-old01