欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql日志文件General_log和Binlog開啟及詳解

 更新時間:2022年07月11日 14:42:54   作者:寒色的貓丶  
MySQL中的數(shù)據(jù)變化會體現(xiàn)在上面日志中,下面這篇文章主要給大家介紹了關于mysql日志文件General_log和Binlog開啟及詳解的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

背景:

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

General_log 詳解

1.介紹

開啟 general log 將所有到達MySQL Server的SQL語句記錄下來。

一般不會開啟開功能,因為log的量會非常龐大。但個別情況下可能會臨時的開一會兒general log以供排障使用。
相關參數(shù)一共有3:general_log、log_output、general_log_file

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

log_output='FILE’ 表示將日志存入文件,默認值是FILE 

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

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

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

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

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

OK,現(xiàn)在mysql就會在***general_log_file***顯示的路徑文件里記錄general日志了?。◤默F(xiàn)在開始記錄)我默認的路徑是 /usr/local/mysql/data/VM_0_17_redhat.log

Binlog 詳解

1.介紹

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

一般來說開啟二進制日志大概會有1%的性能損耗

兩個最重要的使用場景:

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

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

二進制日志包括兩類文件:

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

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

2.開啟binlog日志

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

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

vim編輯打開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?

因為我們用的是5.7及以上版本的話,不加server-id重啟mysql服務會報錯,5.7以下版本就不用加了。

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

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

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

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

第一個參數(shù)是打開binlog日志

第二個參數(shù)是binlog日志的基本文件名,后面會追加標識來表示每一個文件

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

重啟后查看:

3.常用binlog日志操作命令

1.查看所有binlog日志列表

mysql> show master logs;

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

mysql> show master status;

3.刷新log日志,自此刻開始產(chǎn)生一個新編號的binlog日志文件

mysql> flush logs;

注:每當mysqld服務重啟時,會自動執(zhí)行此命令,刷新binlog日志;在mysqldump備份數(shù)據(jù)時加 -F 選項也會刷新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語句,默認情況下binlog日志是二進制文件,無法直接查看。我們直接在mysql目錄的bin目錄下啟動該命令。(在MySQL5.5以下版本使用mysqlbinlog命令時如果報錯,就加上 “–no-defaults”選項)

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

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

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

例:解析yj-test數(shù)據(jù)庫的binlog日志并寫入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)容可能存在兩個問題:

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

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

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

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

5.binlog的三種工作模式

查看binlog日志格式:

show variables like "binlog_format";

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

(1)Row level

  ROW是基于行級別的,他會記錄每一行記錄的變化,就是將每一行的修改都記錄到binlog里面,記錄的非常詳細,但sql語句并沒有在binlog里。

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

(2)Statement level(默認)

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

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

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

(3)Mixed(混合模式)

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

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

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

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

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

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

先記錄這么多吧,后面使用時再進一步記錄。

總結(jié)

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

相關文章

  • Centos MySQL 5.7安裝、升級教程

    Centos MySQL 5.7安裝、升級教程

    這篇文章主要為大家詳細介紹了Centos MySQL 5.7安裝、升級教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • MySQL UPDATE 語句的非標準實現(xiàn)代碼

    MySQL UPDATE 語句的非標準實現(xiàn)代碼

    這篇文章主要介紹了MySQL UPDATE 語句的非標準實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Mysql 開啟Federated引擎的方法

    Mysql 開啟Federated引擎的方法

    FEDERATED是其中一個專門針對遠程數(shù)據(jù)庫的實現(xiàn)。一般情況下在本地數(shù)據(jù)庫中建表會在數(shù)據(jù)庫目錄中生成相應的表定義文件,并同時生成相應的數(shù)據(jù)文件
    2012-12-12
  • 如何設置mysql允許外部連接訪問

    如何設置mysql允許外部連接訪問

    大家好,本篇文章主要講的是如何設置mysql允許外部連接訪問,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 解決MySQL共享鎖引發(fā)的死鎖問題

    解決MySQL共享鎖引發(fā)的死鎖問題

    這篇文章主要給大家介紹了MySQL共享鎖引發(fā)的死鎖問題的原因和解決辦法,文中通過代碼示例和圖文介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-11-11
  • mysql清除log-bin日志的方法

    mysql清除log-bin日志的方法

    這篇文章主要介紹了mysql清除log-bin日志的方法,同時介紹了log-bin日志的作用,需要的朋友可以參考下
    2014-06-06
  • mysql存儲過程之游標(DECLARE)原理與用法詳解

    mysql存儲過程之游標(DECLARE)原理與用法詳解

    這篇文章主要介紹了mysql存儲過程之游標(DECLARE)原理與用法,結(jié)合實例形式詳細分析了mysql存儲過程游標(DECLARE)的基本功能、原理、使用方法及操作注意事項,需要的朋友可以參考下
    2019-12-12
  • MySQL GRANT用戶授權的實現(xiàn)

    MySQL GRANT用戶授權的實現(xiàn)

    授權就是為某個用戶賦予某些權限。MySQL 提供了 GRANT 語句來為用戶設置權限。具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • MySQL數(shù)據(jù)庫跨版本遷移的實現(xiàn)三種方式

    MySQL數(shù)據(jù)庫跨版本遷移的實現(xiàn)三種方式

    本文主要介紹了MySQL數(shù)據(jù)庫跨版本遷移的實現(xiàn),主要包含mysqldump,物理文件遷移和原地升級三種,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • Innodb中mysql快速刪除2T的大表方法示例

    Innodb中mysql快速刪除2T的大表方法示例

    這篇文章主要給大家介紹了關于Innodb中mysql快速刪除2T的大表的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-08-08

最新評論