新聞中心
數(shù)據(jù)庫(kù)日志是一個(gè)非常重要的組成部分,它記錄了數(shù)據(jù)庫(kù)的所有操作,包括增刪改查等等。在MySQL中,數(shù)據(jù)庫(kù)日志以二進(jìn)制日志的形式存在,在實(shí)際的應(yīng)用場(chǎng)景中,可能會(huì)出現(xiàn)二進(jìn)制日志太大的情況,這時(shí)有必要截?cái)鄶?shù)據(jù)庫(kù)日志,以減小數(shù)據(jù)庫(kù)的存儲(chǔ)壓力,并且還可以?xún)?yōu)化數(shù)據(jù)庫(kù)的性能。

那么如何截?cái)郙ySQL數(shù)據(jù)庫(kù)日志呢?下面,將對(duì)此進(jìn)行詳細(xì)的介紹。
一、什么是MySQL數(shù)據(jù)庫(kù)日志?
MySQL的數(shù)據(jù)庫(kù)日志包括二進(jìn)制日志、錯(cuò)誤日志、慢查詢(xún)?nèi)罩尽⒉樵?xún)?nèi)罩镜鹊?。其中,二進(jìn)制日志是最重要的一個(gè),它記錄了數(shù)據(jù)庫(kù)的所有操作,包括insert、update、delete、create、alter等等命令,二進(jìn)制日志以二進(jìn)制的形式存在。
二、二進(jìn)制日志的作用
二進(jìn)制日志的作用非常重要,它可以用于備份、恢復(fù)、主從同步和故障恢復(fù)等操作。任何對(duì)數(shù)據(jù)庫(kù)的操作都會(huì)被記錄在二進(jìn)制日志中,這樣就可以進(jìn)行數(shù)據(jù)恢復(fù)。同時(shí),二進(jìn)制日志還可以用于實(shí)現(xiàn)主從同步,主庫(kù)將自己的二進(jìn)制日志傳輸?shù)綇膸?kù)中,從庫(kù)再執(zhí)行相應(yīng)的操作。
三、
在MySQL中,二進(jìn)制日志會(huì)不斷增長(zhǎng),當(dāng)二進(jìn)制日志過(guò)大時(shí),會(huì)對(duì)數(shù)據(jù)庫(kù)的性能和存儲(chǔ)造成不小的影響。因此,我們需要對(duì)二進(jìn)制日志進(jìn)行截?cái)嗖僮鳌?/p>
下面是在MySQL中如何截?cái)喽M(jìn)制日志。
1. 執(zhí)行SHOW MASTER STATUS;命令,查看當(dāng)前MySQL服務(wù)器日志文件名稱(chēng)及文件偏移位置。
2. 執(zhí)行FLUSH LOGS;命令,關(guān)閉當(dāng)前日志文件,重新打開(kāi)一個(gè)新的二進(jìn)制日志文件,同時(shí)會(huì)生成一個(gè)新的日志文件。
3. 執(zhí)行PURGE BINARY LOGS TO ‘日志文件名稱(chēng).文件偏移位置’;命令,來(lái)截?cái)喽M(jìn)制日志。這條命令的作用是將二進(jìn)制日志文件中所有的日志記錄過(guò)期的二進(jìn)制文件刪除,只保留到指定的位置為止。
4. 執(zhí)行SHOW BINARY LOGS;命令,查看當(dāng)前可用的日志文件。
通過(guò)以上步驟,我們就可以對(duì)MySQL的二進(jìn)制日志進(jìn)行截?cái)嗖僮鳌?/p>
四、小結(jié)
當(dāng)數(shù)據(jù)庫(kù)的二進(jìn)制日志過(guò)大時(shí),我們需要對(duì)其進(jìn)行截?cái)嗖僮鳎蕴岣邤?shù)據(jù)庫(kù)的性能和存儲(chǔ)空間的利用率。MySQL數(shù)據(jù)庫(kù)提供了非常便捷的操作方式,通過(guò)上述步驟,我們就可以輕松地實(shí)現(xiàn)二進(jìn)制日志的截?cái)?。在?shí)際應(yīng)用中,我們需要根據(jù)不同情形進(jìn)行相關(guān)操作,以達(dá)到更好的效果。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
如何查看mysql數(shù)據(jù)庫(kù)操作記錄日志
1、首先確認(rèn)你日志是否啟用了mysql>show variables like ‘log_bin’。
2、如果啟用了,即ON,那日志文件就在mysql的安裝目錄的data目錄下。
3、怎樣知道當(dāng)前的日志mysql> show master status。
4、看
二進(jìn)制
日志文件用mysqlbinlog,shell>mysqlbinlog mail-bin.000001或者shell>mysqlbinlog mail-bin.| tail,Windows 下用類(lèi)似的。
MySQL的日志操作:
1、首先,登陸mysql后,執(zhí)行
sql語(yǔ)句
:show variables like ‘log_bin’。
2、#錯(cuò)誤日志log-errol開(kāi)啟方式:在my.ini的選項(xiàng)下:添加代碼:log-error=E:\log-error.txt。
記錄內(nèi)容:主要是記錄啟動(dòng)、運(yùn)行或停止mysqld時(shí)出現(xiàn)的致命性問(wèn)題,都是系統(tǒng)級(jí)的錯(cuò)誤記錄。
3、#查詢(xún)?nèi)罩荆簂og,開(kāi)啟方式:在my.ini的選項(xiàng)下:添加代碼:log=E:/mysql_log.txt。
4、#二進(jìn)制日志:log-bin,開(kāi)啟方式:在my.ini的選項(xiàng)下:添加代碼:log-bin=E:/mysql_log_bin,記錄內(nèi)容:主要是記錄所有的更改數(shù)據(jù)的語(yǔ)句,可使用mysqlbinlog命令
恢復(fù)數(shù)據(jù)
。
這是一個(gè)慢查詢(xún)?nèi)罩镜恼故竟ぞ撸軌驇椭?DBA 或者開(kāi)發(fā)人員分析數(shù)據(jù)庫(kù)的性能問(wèn)題,給出全面的數(shù)據(jù)擺脫直接查看 slow-log。QAN(Query Analytics)
PMM 目前有 2 個(gè)版本,但是對(duì)于 QAN 來(lái)說(shuō)其大致由三部分組成:
QAN-Agent(client):負(fù)責(zé)采集 slow-log 的數(shù)據(jù)并上報(bào)到服務(wù)端
QAN-API(server):負(fù)責(zé)存儲(chǔ)采集的數(shù)據(jù),并對(duì)外提供查詢(xún)接口
QAN-APP:專(zhuān)門(mén)用來(lái)展示慢查詢(xún)數(shù)據(jù)的 grafana 第三方插件
1. 數(shù)據(jù)流轉(zhuǎn)
slow-log –> QAN-Agent –> QAN-API QAN-APP(grafana)
2. pmm1 架構(gòu)圖
3. pmm2 架構(gòu)圖
一.錯(cuò)誤日志
錯(cuò)誤日志在Mysql數(shù)據(jù)庫(kù)中很重要,它記錄著mysqld啟動(dòng)和停止,以及服務(wù)器在運(yùn)行過(guò)程中發(fā)生的任何錯(cuò)誤的相關(guān)信息。
1.配置信息
–log-error=用來(lái)指定錯(cuò)誤日志存放的位置。
如果沒(méi)有指定,默認(rèn)hostname.err做為文件名,默認(rèn)存放在DATADIR目錄中。
也可以將log-error配置到my.cnf文件中,這樣就省去了每次在啟動(dòng)mysqld時(shí)都手工指定–log-error.例如:
$ vi /etc/my.cnf
# The MySQL server
….
log-error = /var/lib/mysql/test2_mysqld.err
…..
2.錯(cuò)誤信息樣板
:21:55 mysqld started
:21:55 InnoDB: Started; log sequence number
:21:55 /usr/local/mysql/bin/mysqld: ready for connections.
Version: ‘5.0.26-standard-log’ socket: ‘/var/lib/mysql/mysql.sock’ port: 3306 MySQL Community Edition – Standard (GPL)
:24:13 /usr/local/mysql/bin/mysqld: Normal shutdown
:24:13 InnoDB: Starting shutdown…
:24:16 InnoDB: Shutdown completed; log sequence number
:24:16 /usr/local/mysql/bin/mysqld: Shutdown complete
:24:16 mysqld ended
:24:47 mysqld started
:24:47 InnoDB: Started; log sequence number
:24:47 /usr/local/mysql/bin/mysqld: ready for connections.
Version: ‘5.0.26-standard-log’ socket: ‘/var/lib/mysql/mysql.sock’ port: 3306 MySQL Community Edition – Standard (GPL)
:33:49 /usr/local/mysql/bin/mysqld: Normal shutdown
三.查詢(xún)?nèi)罩?/p>
查詢(xún)?nèi)罩居涗浟薱linet的所有的語(yǔ)句。
Note:由于log日志記錄了數(shù)據(jù)庫(kù)所有操作,對(duì)于訪問(wèn)頻繁的系統(tǒng),此種日志會(huì)造成性能影響,建議關(guān)閉。
1.配置信息
–log=用來(lái)指定錯(cuò)誤日志存放的位置。
如果沒(méi)有指定,默認(rèn)為主機(jī)名(hostname)做為文件名,默認(rèn)存放在DATADIR目錄中。
也可以將log配置到my.cnf文件中,這樣就省去了每次在啟動(dòng)mysqld時(shí)都手工指定–log.例如:
# The MySQL server
……
#query-log
log = /var/lib/mysql/query_log.log
……
2.讀取查詢(xún)?nèi)罩?/p>
查詢(xún)?nèi)罩臼羌兾谋靖窨桑梢允褂肙S文本讀取工具直接打開(kāi)查看。例如:
$ tail -n 15 query_log.log
:58:28 17 Query show tables
:07:45 17 Quit
:01:48 18 Connect root@localhost on
:02:38 18 Query SELECT DATABASE()
18 Init DB test
:02:42 18 Query show tables
:03:07 18 Query select * from pet
:06:26 18 Query insert into pet values(‘hunter’,’yxyup’,’cat’,’f’,”,null)
:06:39 18 Query select * from pet
:07:13 18 Query update pet set sex=’m’ where name=’hunter’
:07:38 18 Query delete from pet where name=’hunter’
:13:48 18 Query desc test8
:14:13 18 Query create table t1(id int,name char(10))
:14:41 18 Query alter table t1 add sex char(2)
$
四.慢查詢(xún)?nèi)罩?/p>
慢查詢(xún)?nèi)罩臼怯涗浟藞?zhí)行時(shí)間超過(guò)參數(shù)long_query_time(單位是秒)所設(shè)定值的SQL語(yǔ)句日志。
Note:慢查詢(xún)?nèi)罩緦?duì)于我們發(fā)現(xiàn)性能有問(wèn)題的SQL有很幫助,建議使用并經(jīng)常分析
1.配置信息
–log-slow-queries=用來(lái)指定錯(cuò)誤日志存放的位置。
如果沒(méi)有指定,默認(rèn)為hostname-slow.log做為文件名,默認(rèn)存放在DATADIR目錄中。
也可以將log-slow-queries配置到my.cnf文件中,這樣就省去了每次在啟動(dòng)mysqld時(shí)都手工指定–log-slow-queries.例如:
# The MySQL server
……
#slow-query-log
log-slow-queries = /var/lib/mysql/slow_query_log.log
……
2.讀取慢查詢(xún)?nèi)罩?/p>
$ cat slow_query_log.log
/usr/local/mysql/bin/mysqld, Version: 5.0.26-standard-log. started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time::41:46
# User@Host: root @ localhost
# Query_time: 108 Lock_time: 0 Rows_sent: 0 Rows_examined: 8738
use test;
select count(1) from t1 a, t1 b,t1 c where a.id=b.id and b.name=c.name;
# Time::52:04
# User@Host: root @ localhost
# Query_time: 583 Lock_time: 0 Rows_sent: 0 Rows_examined:
select count(1) from t1 a, t1 b where a.id=b.id;
/usr/local/mysql/bin/mysqld, Version: 5.0.26-standard-log. started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time::39:59
# User@Host: root @ localhost
# Query_time: 11 Lock_time: 0 Rows_sent:Rows_examined:
use test;
select id from tail;
如果慢查詢(xún)?nèi)罩居涗浐芏嗫梢允褂胢ysqldumpslow進(jìn)行分類(lèi)匯總
$ mysqldumpslow slow_query_log.log
Reading mysql slow query log from slow_query_log.log
Count: 1 Time=583.00s (583s) Lock=0.00s (0s) Rows=0.0 (0), root@localhost
select count(N) from t1 a, t1 b where a.id=b.id
Count: 1 Time=108.00s (108s) Lock=0.00s (0s) Rows=0.0 (0), root@localhost
select count(N) from t1 a, t1 b,t1 c where a.id=b.id and b.name=c.name
Count: 1 Time=11.00s (11s) Lock=0.00s (0s) Rows=.0 (), root@localhost
select id from tail;
mysql有以下幾種日志:
錯(cuò)誤日志: -log-err
查詢(xún)?nèi)罩荆?-log
慢查詢(xún)?nèi)罩? -log-slow-queries
更新日志: -log-update
二進(jìn)制日志: -log-bin
在mysql的安裝目錄下,打開(kāi)my.ini,在后面加上上面的參數(shù),保存后重啟mysql服務(wù)就行了。
例如:
#Enter a name for the binary log. Otherwise a default name will be used.
#log-bin=
#Enter a name for the query log file. Otherwise a default name will be used.
#log=
#Enter a name for the error log file. Otherwise a default name will be used.
log-error=
#Enter a name for the update log file. Otherwise a default name will be used.
#log-update=
查看日至:
1. 首先確認(rèn)你日志是否啟用了
mysql>show variables like ‘log_bin’;
如果啟用了,即ON
那日志文件就在mysql的安裝目錄的data目錄下
cat/tail 日志文件名
2. 怎樣知道當(dāng)前的日志
mysql> show master status;
3. 查看從某一段時(shí)間到某一段時(shí)間的日志
mysqlbinlog –start-datetime=’:00:00′
–stop-datetime=’:00:00′ /var/log/mysql/mysql-bin.
> mysqllog1.log
是否啟用了日志
mysql>show variables like ‘log_bin’;
怎樣知道當(dāng)前的日志
mysql> show master status;
看二進(jìn)制日志文件用mysqlbinlog
shell>mysqlbinlog mail-bin.000001(要寫(xiě)絕對(duì)問(wèn)題路徑
或者
shell>mysqlbinlog mail-bin.| tail
Windows 下用類(lèi)似的命令。
mysql有以下幾種日志:
錯(cuò)誤日志: -log-err
查詢(xún)?nèi)罩荆?nbsp; -log
慢查詢(xún)?nèi)罩? -log-slow-queries
更新日志: -log-update
二進(jìn)制日志:-log-bin
在mysql的安裝目錄下,打開(kāi)my.ini,在后面加上上面的參數(shù),保存后重啟mysql服務(wù)就行了。
例如:
#Enter a name for the error log file. Otherwise a default name will be used.
log-error=err.log
#Enter a name for the query log file. Otherwise a default name will be used.
#log=
#Enter a name for the slow query log file. Otherwise a default name will be used.
#log-slow-queries=
#Enter a name for the update log file. Otherwise a default name will be used.
#log-update=
#Enter a name for the binary log. Otherwise a default name will be used.
#log-bin=
上面只開(kāi)啟了錯(cuò)誤日志,要開(kāi)其他的日志就把前面的“#”去掉。
long_query_time =1 –是指執(zhí)行超過(guò)多久的sql會(huì)被log下來(lái),這里是1秒
log-slow-queries=slowqueris.log –將查詢(xún)返回較慢的語(yǔ)句進(jìn)行記錄
log-queries-not-using-indexes = nouseindex.log –就是字面意思,log下來(lái)沒(méi)有使用索引的query
log=mylog.log –對(duì)所有執(zhí)行語(yǔ)句進(jìn)行記錄
log-error=log-error.log
log=log-query.log
log-queries-not-using-indexes
log-warnings=2
log-slow-queries=log-slow-query.log
log-update=log-update.log
如何查看mysql數(shù)據(jù)庫(kù)操作記錄日志?
1、首先確認(rèn)你日志是否啟用了mysql>show variables like ‘log_bin’。
2、如果啟用了,即ON,那日志文件就在mysql的安裝目錄的data目錄下。
3、怎樣知道當(dāng)前的日志mysql> show master status。
4、看二進(jìn)制日志文件用mysqlbinlog,shell>mysqlbinlog mail-bin.000001或者shell>mysqlbinlog mail-bin.| tail,Windows 下用類(lèi)似的。
MySQL的日志操作:
1、首先,登陸mysql后,執(zhí)行sql語(yǔ)句:show variables like ‘log_bin’。
2、#錯(cuò)誤日志log-errol開(kāi)啟方式:在my.ini的選項(xiàng)下:添加代碼:log-error=E:\log-error.txt。
記錄內(nèi)容:主要是記錄啟動(dòng)、運(yùn)行或停止mysqld時(shí)出現(xiàn)的致命性問(wèn)題,都是系統(tǒng)級(jí)的錯(cuò)誤記錄。
3、#查詢(xún)?nèi)罩荆簂og,開(kāi)啟方式:在my.ini的選項(xiàng)下:添加代碼:log=E:/mysql_log.txt。
4、#二進(jìn)制日志:log-bin,開(kāi)啟方式:在my.ini的選項(xiàng)下:添加代碼:log-bin=E:/mysql_log_bin,記錄內(nèi)容:主要是記錄所有的更改數(shù)據(jù)的語(yǔ)句,可使用mysqlbinlog命令恢復(fù)數(shù)據(jù)。
有時(shí)候我們會(huì)不小心對(duì)一個(gè)大表進(jìn)行了 update,比如說(shuō)寫(xiě)錯(cuò)了 where 條件……
此時(shí),如果 kill 掉 update
線程
,那回滾 undo log 需要不少時(shí)間。如果放置不管,也不知道 update 會(huì)持續(xù)多久。
那我們能知道 update 的進(jìn)度么?
實(shí)驗(yàn)
我們先創(chuàng)建一個(gè)測(cè)試數(shù)據(jù)庫(kù):
快速創(chuàng)建一些數(shù)據(jù):
連續(xù)執(zhí)行同樣的 SQL 數(shù)次,就可以快速構(gòu)造千萬(wàn)級(jí)別的數(shù)據(jù):
查看一下總的行數(shù):
我們來(lái)釋放一個(gè)大的 update:
然后另起一個(gè) session,觀察 performance_schema 中的信息:
可以看到,performance_schema 會(huì)列出當(dāng)前 SQL 從引擎獲取的行數(shù)。
等 SQL 結(jié)束后,我們看一下 update 從引擎總共獲取了多少行:
可以看到該 update 從引擎總共獲取的行數(shù)是表大小的兩倍,那我們可以估算:update 的進(jìn)度 = (rows_examined) / (2 * 表行數(shù))
?小貼士
information_schema.tables 中,提供了對(duì)表行數(shù)的估算,比起使用 select count(1) 的成本低很多,幾乎可以忽略不計(jì)。
那么是不是所有的 update,從引擎中獲取的行數(shù)都會(huì)是表大小的兩倍呢?這個(gè)還是要分情況討論的,上面的 SQL 更新了
主鍵
,如果只更新內(nèi)容而不更新主鍵呢?我們來(lái)試驗(yàn)一下:
等待 update 結(jié)束,查看 row_examined,發(fā)現(xiàn)其剛好是表大?。?/p>
那我們?cè)趺礈?zhǔn)確的這個(gè)倍數(shù)呢?
一種方法是靠經(jīng)驗(yàn):update 語(yǔ)句的 where 中會(huì)掃描多少行,是否修改主鍵,是否修改唯一鍵,以這些條件來(lái)估算系數(shù)。
另一種方法就是在同樣結(jié)構(gòu)的較小的表上試驗(yàn)一下,獲取倍數(shù)。
關(guān)于mysql數(shù)據(jù)庫(kù)日志截?cái)嗟慕榻B到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)(cdcxhl.com)提供穩(wěn)定的云服務(wù)器,香港云服務(wù)器,BGP云服務(wù)器,雙線云服務(wù)器,高防云服務(wù)器,成都云服務(wù)器,服務(wù)器托管。精選鉅惠,歡迎咨詢(xún):028-86922220。
新聞名稱(chēng):如何截?cái)郙ySQL數(shù)據(jù)庫(kù)日志?(mysql數(shù)據(jù)庫(kù)日志截?cái)?
當(dāng)前URL:http://m.fisionsoft.com.cn/article/dhgepdd.html


咨詢(xún)
建站咨詢(xún)
