下面講講關(guān)于MySQL數(shù)據(jù)庫(kù)三種日志的特點(diǎn)和使用,文字的奧妙在于貼近主題相關(guān)。所以,閑話就不談了,我們直接看下文吧,相信看完MySQL數(shù)據(jù)庫(kù)三種日志的特點(diǎn)和使用這篇文章你一定會(huì)有所受益。
成都創(chuàng)新互聯(lián)擁有網(wǎng)站維護(hù)技術(shù)和項(xiàng)目管理團(tuán)隊(duì),建立的售前、實(shí)施和售后服務(wù)體系,為客戶提供定制化的網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站維護(hù)、四川雅安服務(wù)器托管解決方案。為客戶網(wǎng)站安全和日常運(yùn)維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護(hù)服務(wù)覆蓋集團(tuán)企業(yè)、上市公司、外企網(wǎng)站、商城網(wǎng)站制作、政府網(wǎng)站等各類型客戶群體,為全球成百上千企業(yè)提供全方位網(wǎng)站維護(hù)、服務(wù)器維護(hù)解決方案。mysqbinlog工具的作用是解析mysql的二進(jìn)制binlog日志內(nèi)容,把二進(jìn)制的日志解析成可以在MySQL數(shù)據(jù)庫(kù)里執(zhí)行的SQL語(yǔ)句。
MySQL數(shù)據(jù)目錄下的如下文件就是mysql的binlog日志
mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 mysql-bin.000004 mysql-bin.000005 mysql-bin.000006 mysql-bin.000007 mysql-bin.000008 . . . . . .. . 提示:要想生成binlog必須在配置文件中打開(kāi)log-bin功能 [root@db01 3306]# greplog-bin /data/3306/my.cnf log-bin =/data/3306/mysql-binmysql的binlog日志作用是用來(lái)記錄mysql內(nèi)部增刪等對(duì)mysql數(shù)據(jù)庫(kù)有更新的內(nèi)容的記錄(對(duì)數(shù)據(jù)的改動(dòng)),對(duì)數(shù)據(jù)庫(kù)查詢的語(yǔ)句如show,select開(kāi)頭的語(yǔ)句,不會(huì)被binlog日志記錄。用于數(shù)據(jù)庫(kù)的主從復(fù)制,以及增量恢復(fù)。
測(cè)試題:
在MySQL數(shù)據(jù)庫(kù)中,關(guān)于binlog日志,下列說(shuō)法正確的是-----------(A)
A:依靠足夠長(zhǎng)度的binlog日志和定期的全備,我們可以恢復(fù)任何時(shí)間點(diǎn)的單表數(shù)據(jù)。
B:以mysql主從同步為例,binlog中會(huì)記錄主數(shù)據(jù)庫(kù)的所有操作。
C:以mysql主從同步為例,binlog中會(huì)記錄主數(shù)據(jù)庫(kù)的所有查詢操作。
D:binlog通過(guò)cat和vi無(wú)法查看,但可以通過(guò)gedit查看。
默認(rèn)情況binlog日志是二進(jìn)制格式的,不能使用查看文本工具的命令查看,例如:cat、vi
[root@db01 3306]# file /data/3306/mysql-bin.000001 /data/3306/mysql-bin.000001: MySQL replication log解析指定庫(kù)的binlog日志
范例:利用mysqlbinlog-d參數(shù)解析指定庫(kù)的binlog日志
[root@db01 3306]# oldboy /data/3306/mysql-bin.000001 -r oldboy.sql [root@db01 3306]# ll oldboy.sql -rw-r--r-- 1 root root 4731 Aug 31 04:36 oldboy.sql [root@db01 3306]# cat oldboy.sql結(jié)論:mysqlbinlog工具分庫(kù)導(dǎo)出binlog,如果使用-d參數(shù),那更新數(shù)據(jù)時(shí),必須有usedatabase,才能分出指定庫(kù)的binlog,例如:
use oldboy; insert into test values(1,’oldboy’)下面的寫(xiě)法就不行
nsert into oldboy.test values(1,’oldboy’)官方資料
按照位置截?。壕_
mysqlbinlog mysql-bin.000003 365 456 pos.sql#說(shuō)明:指定文件的第365到456結(jié)束,是binlog文件中的“# at 365”---“# at 456”;-r是指定文件,相當(dāng)于重定向,如果命令中指定開(kāi)始不指定結(jié)尾就是到文件的結(jié)尾,如果不指定開(kāi)始則是從文件開(kāi)頭開(kāi)始。
按照時(shí)間截?。耗:?,不準(zhǔn)
mysqlbinlog mysql-bin.000003 -'2016-10-8 12:12:12' '2016-10-8 12:20:20' -r time.sql#說(shuō)明:時(shí)間在該binlog文件中的 # at456下面即使,只指定開(kāi)始時(shí)間就是到文件結(jié)尾,只指定結(jié)尾,則是從開(kāi)頭開(kāi)始;-r是指定文件
mysqlbinlog命令:
1. 把binlog日志解析為SQL語(yǔ)句(包含位置和時(shí)間點(diǎn))。
2. -d參數(shù)根據(jù)指定庫(kù)拆分binlog(拆分單表binlog可通過(guò)SQL關(guān)鍵字過(guò)濾)。
3.通過(guò)位置參數(shù)截取部分binlog:--syart-position=365 --stop-position=456,;精確定位取部分內(nèi)容。
4.通過(guò)時(shí)間參數(shù)截取部分binlog:-stsrt-datetime='2016-10-8 12:12:12' --stop-deter=time='2016-10-8 12:20:20',模糊截取部分內(nèi)容,會(huì)丟數(shù)據(jù)。
5. -r指定文件名,相當(dāng)于重定向。
6.解析ROW級(jí)別binlog日志的方法
1.錯(cuò)誤日志(error.log)介紹
MySQL的錯(cuò)誤日志記錄MySQL服務(wù)進(jìn)程mysql在啟動(dòng)/關(guān)閉或運(yùn)行過(guò)程中遇到的錯(cuò)誤信息。
2.錯(cuò)誤日志(error.log)實(shí)踐
法1:在配置文件中調(diào)整方法,當(dāng)然可以在啟動(dòng)時(shí)加入啟動(dòng)參數(shù)
[mysqld_safe] log-error=/data/3306/mysql_oldboy3306.err法2:?jiǎn)?dòng)MySQL命令里加入:
mysql_safe --detaults-file=/data/3306/my.cnf &在數(shù)據(jù)庫(kù)里也可以看到
mysql> show variables like '%log_error%'; +---------------+---------------------------------+ | Variable_name | Value | +---------------+---------------------------------+ | log_error | | +---------------+---------------------------------+ 1 row in set (0.00 sec)如果mysql數(shù)據(jù)庫(kù)起不起來(lái)排查步驟
1.將日志文件備份,然后清空日志文件,并重啟數(shù)據(jù)庫(kù),查看報(bào)錯(cuò)。
2. 如果是多實(shí)例的話講多實(shí)例目錄下的目錄權(quán)限chown -R mysql.....。
3. 查看是否有管理mysql數(shù)據(jù)庫(kù)的用戶。
1.普通查詢?nèi)罩荆╣eneralquery log)介紹
普通查詢?nèi)罩荆╣eneral querylog),記錄客戶端連接信息和執(zhí)行的SQL語(yǔ)句信息(增刪改查,全部記錄)。工作中不用,會(huì)消耗IO性能,
2.普通查詢?nèi)罩緂eneralquery log)調(diào)整
mysql> show variables like 'general_log%'; +-------------------------+--------------------------+ | Variable_name |Value | +-------------------------+--------------------------+ | general_log | ON | | general_log_file | /data/3306/data/db01.log | +-------------------------+--------------------------+ 2 rows in set (0.00 sec)臨時(shí)生效:
mysql> set global general_log_file ='/data/3306/data/db01.log'; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'general_log%'; +-------------------------+--------------------------+ | Variable_name |Value | +-------------------------+--------------------------+ | general_log | OFF | | general_log_file | /data/3306/data/db01.log | +-------------------------+--------------------------+ 2 rows in set (0.00 sec)永久生效(配置文件中配置):
[root@db01 3306]# grep gene /data/3306/my.cnf general_log = on general_log_file = /data/3306/data/db01.log實(shí)際的普通查詢?nèi)罩臼纠?/p>
1.慢查詢?nèi)罩窘榻B:
慢查詢?nèi)罩?,記錄?zhí)行時(shí)間超出指定值的SQL語(yǔ)句
2.慢查詢?nèi)罩镜恼{(diào)整
long_query_time = 1 log-slow-queries = /data/3306/slow.log log_queries_not_using_indexes慢查詢的設(shè)置,對(duì)于數(shù)據(jù)庫(kù)SQL的優(yōu)化非常重要
[root@db01 /]# egrep "quer"/data/3306/my.cnf|tail -3 long_query_time = 1 log-slow-queries = /data/3306/slow.log log_queries_not_using_indexes利用慢查詢進(jìn)行優(yōu)化解決方案
1. 開(kāi)啟慢查詢參數(shù)
long_query_time = 1 log-slow-queries = /data/3306/slow.log log_queries_not_using_indexes2. 慢查詢?nèi)罩厩懈钅_本
[root@db01 /]# vim /server/scripts/cut_slow_log.sh #!/bin/bash cd /data/3306 &&\ /bin/mv slow.log slow.log.$(date +%F) &&\ mysqladmin -uroot -poldboy123 -S/data/3306/mysql.sock flush-log [root@db01 scripts]# tail -2 /var/spool/cron/root # cut mysql slow log 00 00 * * * /bin/sh /server/scripts/cut_slow_log.sh>/dev/null 2>&13. 使用工具mysqlsla分析慢查詢,定時(shí)給相關(guān)人員信箱
使用explain優(yōu)化SQL語(yǔ)句(select語(yǔ)句)的基本流程 * * * * *
原因:當(dāng)網(wǎng)站出現(xiàn)問(wèn)題,到會(huì)訪問(wèn)慢,在數(shù)據(jù)庫(kù)中超過(guò)2秒就是很慢的查詢了!
思路:當(dāng)用戶訪問(wèn)數(shù)據(jù)慢時(shí),就要想到是不是滿查詢引起的,所以我們要查找慢查詢,而找找慢查詢分兩種情況,第一種是比較緊急情況下使用下面緊急處理的現(xiàn)場(chǎng)抓取的方法,進(jìn)入mysql數(shù)據(jù)庫(kù)將慢查詢找到,然后建立索引,這起見(jiàn)借助explain可以查看慢查詢語(yǔ)句是否經(jīng)過(guò)索引,如果沒(méi)有經(jīng)過(guò)索引就建立索引,第二種則是不那么緊急的情況,可以在平時(shí)就關(guān)注負(fù)載、cpu等信息,當(dāng)發(fā)現(xiàn)有異常時(shí)時(shí)就進(jìn)行檢查,這些都是可以通過(guò)修改配置文件來(lái)將慢查詢的語(yǔ)句輸入到sllow.log里面,然后通過(guò)分析工具進(jìn)行分析,以郵件的形式發(fā)給開(kāi)發(fā)人員和dba人員讓他們來(lái)介入處理。
排查方法:首先查看web負(fù)載高不高,存儲(chǔ)壓力大不大,還有數(shù)據(jù)庫(kù)負(fù)載和磁盤(pán)IO,還有cpu等原因。負(fù)載高的話常規(guī)情況下是數(shù)據(jù)庫(kù)慢查詢導(dǎo)致的,下面是查詢數(shù)據(jù)庫(kù)慢查詢?nèi)缦拢?/p>
(1)抓慢查詢SQL語(yǔ)句方法
在數(shù)據(jù)庫(kù)查找慢查詢(緊急處理)
mysql> show full processlist; +----+------+-----------+--------+---------+------+-------+-----------------------+ | Id | User | Host | db | Command | Time | State |Info | +----+------+-----------+--------+---------+------+-------+-----------------------+ | 9 | root | localhost | oldboy | Query | 0 | NULL | show full processlist | +----+------+-----------+--------+---------+------+-------+-----------------------+ 1 row in set (0.00sec)說(shuō)明:如果數(shù)據(jù)庫(kù)正在對(duì)外提供訪問(wèn),訪問(wèn)量大時(shí)。連續(xù)執(zhí)行此命令會(huì)有很多語(yǔ)句,建議每隔兩秒執(zhí)行兩次,當(dāng)發(fā)現(xiàn)同一個(gè)命令連續(xù)出現(xiàn)時(shí),就可能是慢查詢語(yǔ)句。
在命令行查詢慢查詢(日常處理)
[root@db01 ~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock -e "showfull processlist;"|egrep -vi "sleep" Id User Host db Command Time State Info 11 root localhost NULL Query 0 NULL show full processlist說(shuō)明:此命令可以說(shuō)是未雨綢繆;重要不緊急,分析慢查詢?nèi)罩?/p>
配置參數(shù)記錄慢查詢語(yǔ)句
long_query_time = 2 log_queries_not_using_indexes log-slow-queries = /data/3306/slow.log(2)抓到慢查詢后,使用explain語(yǔ)句檢查索引執(zhí)行情況(看下有沒(méi)有走索引)
explain select * from test where name='oldgirl'\G explain select * from test where name='oldgirl'\G提示:這兩條命令是查詢的結(jié)果是一樣的!SQL_NO_CACHE是防止有緩存
(3)對(duì)需要建索引的條件列建立索引
大表不能高峰期建立索引,300萬(wàn)記錄就是達(dá)標(biāo)
(4)分析man查詢工具mysqlsla(每天早晨發(fā)郵件)。
切割慢查詢?nèi)罩?/p>
1.mv切割、reload進(jìn)程(和mginx日志切割一個(gè)原理)
[root@db01 3306]# vim /data/3306/my.cnf log-slow-queries = /data/3306/slow.log [root@db01 3306]# /data/3306/mysql restart Restarting MySQL... Stoping MySQL... Starting MySQL... [root@db01 3306]# ll slow.log -rw-rw---- 1 mysqlmysql 380 Aug 27 15:59 slow.log [root@db01 3306]# mv /data/3306/slow.log /opt/$(date +%F)_slow.log [root@db01 3306]# ll /opt/ -rw-rw---- 1 mysql mysql 190 Aug 27 16:26 2016-08-27_slow.log [root@db01 3306]# mysqladmin -uroot -poldboy123 -S /data/3306/mysql.sock flush-logs [root@db01 3306]# ll /data/3306/slow.log -rw-rw---- 1 mysqlmysql 190 Aug 27 16:28 /data/3306/slow.log2. 寫(xiě)成腳本(定時(shí)任務(wù))
mv /data/3306/slow.log/opt/$(date +%F)_slow.log mysqladmin -uroot -poldboy123 -S/data/3306/mysql.sock flush-logs提示:可以將以上命令寫(xiě)成腳本,每天進(jìn)行切割,在使用相應(yīng)的工具進(jìn)行分析
對(duì)于以上MySQL數(shù)據(jù)庫(kù)三種日志的特點(diǎn)和使用相關(guān)內(nèi)容,大家還有什么不明白的地方嗎?或者想要了解更多相關(guān),可以繼續(xù)關(guān)注我們的行業(yè)資訊板塊。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。