人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

mysql日志文件General_log和Binlog開(kāi)啟及詳解

發(fā)布日期:2022-07-15 19:55 | 文章來(lái)源:CSDN

背景:

周末歸納下mysql的日志文件,其中g(shù)eneral_log在mysql入侵中已經(jīng)用到過(guò),binlog即將會(huì)用到。注:mysql版本為5.7.20

General_log 詳解

1.介紹

開(kāi)啟 general log 將所有到達(dá)MySQL Server的SQL語(yǔ)句記錄下來(lái)。

一般不會(huì)開(kāi)啟開(kāi)功能,因?yàn)閘og的量會(huì)非常龐大。但個(gè)別情況下可能會(huì)臨時(shí)的開(kāi)一會(huì)兒general log以供排障使用。
相關(guān)參數(shù)一共有3:general_log、log_output、general_log_file

show variables like 'general_log';  -- 查看日志是否開(kāi)啟
set global general_log=on; -- 開(kāi)啟日志功能
show variables like 'general_log_file';  -- 看看日志文件保存位置
set global general_log_file='tmp/general.lg'; -- 設(shè)置日志文件保存位置
show variables like 'log_output';  -- 看看日志輸出類(lèi)型  table或file
set global log_output='table'; -- 設(shè)置輸出類(lèi)型為 table
set global log_output='file';   -- 設(shè)置輸出類(lèi)型為file

log_output='FILE’ 表示將日志存入文件,默認(rèn)值是FILE 

***log_output=‘TABLE’***表示將日志存入數(shù)據(jù)庫(kù),這樣日志信息就會(huì)被寫(xiě)入到***mysql.slow_log***表中.

mysql數(shù)據(jù)庫(kù)支持同時(shí)兩種日志存儲(chǔ)方式,配置的時(shí)候以逗號(hào)隔開(kāi)即可,如:log_output=‘FILE,TABLE‘.日志記錄到系統(tǒng)專(zhuān)用日志表中,要比記錄到文件耗費(fèi)更多的系統(tǒng)資源,因此對(duì)于需要啟用慢查日志,又需要比夠獲得更高的系統(tǒng)性能,那么建議優(yōu)先記錄到文件.

2.開(kāi)啟數(shù)據(jù)庫(kù)general_log步驟

先執(zhí)行sql指令:show variables like ‘%log%’;

可以看到默認(rèn)general_log是OFF的,我們直接開(kāi)啟:***set global general_log = ON;***(永久修改需要在my.cnf的【mysqld】中添加:general_log = 1

OK,現(xiàn)在mysql就會(huì)在***general_log_file***顯示的路徑文件里記錄general日志了!(從現(xiàn)在開(kāi)始記錄)我默認(rèn)的路徑是 /usr/local/mysql/data/VM_0_17_redhat.log

Binlog 詳解

1.介紹

MySQL的二進(jìn)制日志可以說(shuō)是MySQL最重要的日志了,它記錄了所有的DDL和DML(除了數(shù)據(jù)查詢語(yǔ)句)語(yǔ)句(記錄mysql內(nèi)部增刪改等對(duì)mysql數(shù)據(jù)庫(kù)有更新的內(nèi)容的記錄(對(duì)數(shù)據(jù)庫(kù)的改動(dòng)),對(duì)數(shù)據(jù)庫(kù)的查詢select或show等不會(huì)被binlog日志記錄),以事件形式記錄,還包含語(yǔ)句所執(zhí)行的消耗的時(shí)間,MySQL的二進(jìn)制日志是事務(wù)安全型的。

一般來(lái)說(shuō)開(kāi)啟二進(jìn)制日志大概會(huì)有1%的性能損耗

兩個(gè)最重要的使用場(chǎng)景:

其一:MySQL Replication在Master端開(kāi)啟binlog,Mster把它的二進(jìn)制日志傳遞給slaves來(lái)達(dá)到master-slave數(shù)據(jù)一致的目的。

其二:自然就是數(shù)據(jù)恢復(fù)了,通過(guò)使用mysqlbinlog工具來(lái)使恢復(fù)數(shù)據(jù)。

二進(jìn)制日志包括兩類(lèi)文件:

二進(jìn)制日志索引文件(文件名后綴為.index)用于記錄所有的二進(jìn)制文件;

二進(jìn)制日志文件(文件名后綴為.00000*)記錄數(shù)據(jù)庫(kù)所有的DDL和DML(除了數(shù)據(jù)查詢語(yǔ)句)語(yǔ)句事件。

2.開(kāi)啟binlog日志

查看binlog開(kāi)啟狀態(tài):

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | OFF   |
+---------------+-------+
1 row in set (0.01 sec)

vim編輯打開(kāi)mysql配置文件my.cnf:

vim /etc/my.cnf
在【mysqld】中添加:
log-bin=/home/data/mysql-log/mysql-bin
server-id=12345

網(wǎng)上很多教程都只是添加log-bin一行就行了,此處我們?yōu)槭裁匆?server-id?

因?yàn)槲覀冇玫氖?.7及以上版本的話,不加server-id重啟mysql服務(wù)會(huì)報(bào)錯(cuò),5.7以下版本就不用加了。

所以必須添加server-id這個(gè)參數(shù)!隨機(jī)指定一個(gè)不能和其他集群中機(jī)器重名的字符串,如果只有一臺(tái)機(jī)器,那就可以隨便指定了。

注意!修改配置文件后重啟報(bào)錯(cuò)最好定位到mysql的errlog,查看具體錯(cuò)誤,我出現(xiàn)過(guò)一個(gè)錯(cuò)誤就是***用root自定義創(chuàng)建bin-log所在的目錄,沒(méi)給mysql用戶權(quán)限***。

還有一種配置方式(指定三個(gè)參數(shù)):

log_bin=ON  
log_bin_basename=/var/lib/mysql/mysql-bin  
log_bin_index=/var/lib/mysql/mysql-bin.index  

第一個(gè)參數(shù)是打開(kāi)binlog日志

第二個(gè)參數(shù)是binlog日志的基本文件名,后面會(huì)追加標(biāo)識(shí)來(lái)表示每一個(gè)文件

第三個(gè)參數(shù)指定的是binlog文件的索引文件,這個(gè)文件管理了所有的binlog文件的目錄

重啟后查看:

3.常用binlog日志操作命令

1.查看所有binlog日志列表

mysql> show master logs;

2.查看master狀態(tài),即最后(最新)一個(gè)binlog日志的編號(hào)名稱(chēng),及其最后一個(gè)操作事件pos結(jié)束點(diǎn)(Position)值

mysql> show master status;

3.刷新log日志,自此刻開(kāi)始產(chǎn)生一個(gè)新編號(hào)的binlog日志文件

mysql> flush logs;

注:每當(dāng)mysqld服務(wù)重啟時(shí),會(huì)自動(dòng)執(zhí)行此命令,刷新binlog日志;在mysqldump備份數(shù)據(jù)時(shí)加 -F 選項(xiàng)也會(huì)刷新binlog日志;

4.重置(清空)所有binlog日志

mysql> reset master;

5.查看binlog日志內(nèi)容(以表格形式)

mysql>  show binlog events in 'mysql-bin.000002';

4.mysqlbinlog命令使用

mysqlbinlog功能是將mysql的binlog日志轉(zhuǎn)換成Mysql語(yǔ)句,默認(rèn)情況下binlog日志是二進(jìn)制文件,無(wú)法直接查看。我們直接在mysql目錄的bin目錄下啟動(dòng)該命令。(在MySQL5.5以下版本使用mysqlbinlog命令時(shí)如果報(bào)錯(cuò),就加上 “–no-defaults”選項(xiàng))

mysqlbinlog命令部分參數(shù):

-d	//指定庫(kù)的binlog
-r	//相當(dāng)于重定向到指定文件
--start-position--stop-position	//按照指定位置精確解析binlog日志(精確),如不接--stop-positiion則一直到binlog日志結(jié)尾
--start-datetime--stop-datetime	//按照指定時(shí)間解析binlog日志(模糊,不準(zhǔn)確),如不接--stop-datetime則一直到binlog日志結(jié)尾

備注:myslqlbinlog分庫(kù)導(dǎo)出binlog,如使用-d參數(shù),更新數(shù)據(jù)時(shí)必須使用use database。

例:解析yj-test數(shù)據(jù)庫(kù)的binlog日志并寫(xiě)入my.sql文件

./mysqlbinlog -d yj-test /home/data/mysql-log/mysql-bin.000003 -r my.sql
//使用位置精確解析binlog日志
./mysqlbinlog mysql-bin.000003 --start-position=100  --stop-position=200 -r my.sql

可以直接查看所有binlog信息:

mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       177 |
| mysql-bin.000002 |       154 |
+------------------+-----------+
2 rows in set (0.00 sec)

注意:

查看binlog內(nèi)容可能存在兩個(gè)問(wèn)題:

一是報(bào)錯(cuò),比如不支持’default-character-set=utf8’,這種是binlog工具和mysql配置出現(xiàn)沖突,可以在binlog命令后添加--no--defaults解決;

二是解析出來(lái)的binlog內(nèi)容中sql語(yǔ)句出現(xiàn)亂碼,如:

BINLOG '
Q738XBMBAAAAOwAAAFATAAAAAFsAAAAAAAEABHRlc3QAAnQxAAQPDw8KBigAKAAoAA8CA/z/AACU
U3Q=
Q738XB4BAAAALgAAAH4TAAAAAFsAAAAAAAEAAgAE/wABMgIxMQFSycYPZKuVcw==
'

這種可以添加 --base64-output=DECODE-ROWS -v 參數(shù)解決!

5.binlog的三種工作模式

查看binlog日志格式:

show variables like "binlog_format";

注:我的默認(rèn)為 ROW 模式,和網(wǎng)上說(shuō)的默認(rèn)不一樣(Statement)

(1)Row level

ROW是基于行級(jí)別的,他會(huì)記錄每一行記錄的變化,就是將每一行的修改都記錄到binlog里面,記錄的非常詳細(xì),但sql語(yǔ)句并沒(méi)有在binlog里。

日志中會(huì)記錄每一行數(shù)據(jù)被修改的情況,然后在slave端對(duì)相同的數(shù)據(jù)進(jìn)行修改。在replication里面也不會(huì)因?yàn)榇鎯?chǔ)過(guò)程觸發(fā)器等造成Master-Slave數(shù)據(jù)不一致的問(wèn)題,但是有個(gè)致命的缺點(diǎn)日志量比較大.由于要記錄每一行的數(shù)據(jù)變化,當(dāng)執(zhí)行update語(yǔ)句后面不加where條件的時(shí)候或alter table的時(shí)候,產(chǎn)生的日志量是相當(dāng)?shù)拇蟆?/p>

(2)Statement level(默認(rèn))

每一條被修改數(shù)據(jù)的sql都會(huì)記錄到master的bin-log中,slave在復(fù)制的時(shí)候sql進(jìn)程會(huì)解析成和原來(lái)master端執(zhí)行過(guò)的相同的sql再次執(zhí)行

優(yōu)點(diǎn):解決了 Row level下的缺點(diǎn),不需要記錄每一行的數(shù)據(jù)變化,減少bin-log日志量,節(jié)約磁盤(pán)IO,提高新能

缺點(diǎn):statement level下對(duì)一些特殊功能的復(fù)制效果不是很好,比如:函數(shù)、存儲(chǔ)過(guò)程的復(fù)制。由于row level是基于每一行的變化來(lái)記錄的,所以不會(huì)出現(xiàn)類(lèi)似問(wèn)題

(3)Mixed(混合模式)

結(jié)合了Row level和Statement level的優(yōu)點(diǎn)。

在默認(rèn)情況下是statement,但是在某些情況下會(huì)切換到row狀態(tài),如當(dāng)一個(gè)DML更新一個(gè)ndb引擎表,或者是與時(shí)間用戶相關(guān)的函數(shù)等。在主從的情況下,在主機(jī)上如果是STATEMENT模式,那么binlog就是直接寫(xiě)now(),然而如果這樣的話,那么從機(jī)進(jìn)行操作的時(shí)間,也執(zhí)行now(),但明顯這兩個(gè)時(shí)間不會(huì)是一樣的,所以對(duì)于這種情況就必須把STATEMENT模式更改為ROW模式,因?yàn)镽OW模式會(huì)直接寫(xiě)值而不是寫(xiě)語(yǔ)句(該案例是錯(cuò)誤的,即使是STATEMENT模式也可以使用now()函數(shù),具體原因以后再分析)。同樣ROW模式還可以減少?gòu)臋C(jī)的相關(guān)計(jì)算,如在主機(jī)中存在統(tǒng)計(jì)寫(xiě)入等操作時(shí),從機(jī)就可以免掉該計(jì)算把值直接寫(xiě)入從機(jī)。

一般企業(yè)binlog模式的選擇:

互聯(lián)網(wǎng)公司使用MySQL的功能較少(不用存儲(chǔ)過(guò)程、觸發(fā)器、函數(shù)),選擇默認(rèn)的Statement level;

用到MySQL的特殊功能(存儲(chǔ)過(guò)程、觸發(fā)器、函數(shù))則選擇Mixed模式;

用到MySQL的特殊功能(存儲(chǔ)過(guò)程、觸發(fā)器、函數(shù)),又希望數(shù)據(jù)最大化一直則選擇Row模式;

先記錄這么多吧,后面使用時(shí)再進(jìn)一步記錄。

總結(jié)

到此這篇關(guān)于mysql日志文件General_log和Binlog開(kāi)啟及詳解的文章就介紹到這了,更多相關(guān)mysql日志文件開(kāi)啟內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

國(guó)外服務(wù)器租用

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專(zhuān)屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部