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

Mysql中二進制日志操作方法說明

 更新時間:2023年03月17日 10:29:15   作者:跟著飛哥學編程  
這篇文章主要介紹了Mysql中二進制日志操作方法,二進制日志中以“事件”的形式記錄了數(shù)據(jù)庫中數(shù)據(jù)的變化情況,對于MySQL數(shù)據(jù)庫的災(zāi)難恢復(fù)起著重要的作用

二進制日志

二進制日志中以“事件”的形式記錄了數(shù)據(jù)庫中數(shù)據(jù)的變化情況,對于MySQL數(shù)據(jù)庫的災(zāi)難恢復(fù)起著重要的作用。

開啟二進制日志

可以在 my.cnf 文件或者 my.ini 文件中進行如下配置來開啟二進制日志。

[mysqld]
log_bin = /data/mysql/log/bin_log/mysql-bin
binlog_format= mixed
binlog_cache_size=32m
max_binlog_cache_size=64m
max_binlog_size=512m
expire_logs_days = 10

各項配置說明如下:

log_bin:表示開啟二進制日志。如果沒有為此項賦值,則 MySQL 會在 DATADIR 選項指定的目錄(MySQL的數(shù)據(jù)存放目錄)下創(chuàng)建二進制文件。

binlog_format:二進制文件的格式。取值可以是STATEMENT、ROWMIXED。

STATEMENT

記錄SQL語句。日志文件小,節(jié)約IO,但是對一些系統(tǒng)函數(shù)不能準確復(fù)制或不能復(fù)制,如now()、uuid()等

ROW

記錄表的行更改情況,可以為數(shù)據(jù)庫的恢復(fù)、復(fù)制帶來更好的可靠性,但是二進制文件的大小相較于STATEMENT會有所增加

MIXED

STATEMENT和ROW模式的混合。默認采用STATEMENT格式進行二進制日志文件的記錄,但是在一些情況下會使用ROW格式。

業(yè)內(nèi)目前推薦使用的是 ROW 模式,準確性高,雖然說文件大,但是現(xiàn)在有SSD和萬兆光纖網(wǎng)絡(luò),這些磁盤IO和網(wǎng)絡(luò)IO都是可以接受的。

  • binlog_cache_size:二進制日志的緩存大小。
  • max_binlog_cache_size:二進制日志的最大緩存大小。
  • max_binlog_size:單個二進制日志文件的最大大小,當文件大小超過此選項配置的值時,會發(fā)生日志滾動,重新生成一個新的二進制文件。
  • expire_logs_days:二進制日志的過期時間。如果配置了此選項,則 MySQL 會自動清理過期的二進制日志。此選項的默認值為 0 ,表示 MySQL 不會清理過期日志。

配置完成后,重啟 MySQL 才能使配置生效。此時,會在 /data/mysql/log/bin_log 目錄下生成 MySQL 的二進制文件。

重啟之后,可以看到我們配置的二進制日志的相關(guān)信息。

show variables like '%log_bin%';

±--------------------------------±-----------------------------------------+

| Variable_name | Value |

±--------------------------------±-----------------------------------------+

| log_bin | ON |

| log_bin_basename | D:\mysql-8.0.28-winx64\data\binlog |

| log_bin_index | D:\mysql-8.0.28-winx64\data\binlog.index |

| log_bin_trust_function_creators | ON |

| log_bin_use_v1_row_events | OFF |

| sql_log_bin | ON |

±--------------------------------±-----------------------------------------+

6 rows in set

查看二進制日志

二進制日志文件不能以純文本文件的形式來查看,可以使用 MySQL 的 mysqlbinlog 命令進行查看。接下來簡單介紹一下查看 MySQL 二進制日志的步驟。

注:我提前創(chuàng)建的測試表

CREATE TABLE `test1` (
  `id` int NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

(1)向 test1 表中插入兩條測試數(shù)據(jù)。

INSERT INTO test1 (id,name) VALUES(5,"趙山河");
INSERT INTO test1 (id,name) VALUES(6,"跟著學編程");

(2)使用 mysqlbinlog 命令查看二進制日志

mysqlbinlog --no-defaults /data/mysql/log/bin_log/mysql-bin.000001

二進制日志中記錄了向 test1 數(shù)據(jù)表中插入數(shù)據(jù)的 SQL 語句。

注意:查看 /data/mysql/log/bin_log 目錄下生成的 MySQL 二進制文件時,發(fā)現(xiàn)有一個 mysql-bin.index 文件,這個文件不記錄二進制內(nèi)容,其中記錄的是當前目錄下存在的所有二進制文件的完整路徑。可以以純文本文件的形式來查看 mysql-bin.index 文件。

cat /data/mysql/log/bin_log/mysql-bin.index

刪除二進制日志

MySQL中除了通過配置二進制日志的過期時間,由 MySQL 自動刪除過期的二進制日志外,還提供了3種安全的手動刪除二進制日志的方法。

在正式介紹手動刪除 MySQL 二進制日志的方法之前,先對 MySQL 進行多次重啟操作,使 MySQL 能夠生成多個二進制日志文件,以便進行刪除測試。

多次重啟MySQL后,再次查看 /data/mysql/log/bin_log 目錄下的文件。

1.根據(jù)編號刪除二進制日志

根據(jù)編號刪除二進制日志,語法格式如下:

PURGE { BINARY | MASTER } LOGS TO 'log_name'

在MySQL命令行執(zhí)行此語法格式的SQL語句,會刪除比指定文件名編號小的所有二進制日志文件。例如,刪除比mysql-bin.000003文件編號小的所有二進制日志文件。

mysql> PURGE MASTER LOGS TO 'mysql-bin.000003';
Query OK, 0 rows affected (0.01 sec)

SQL語句執(zhí)行成功,查看/data/mysql/log/bin_log目錄下的文件。

[root@binghe150 ~]# ll /data/mysql/log/bin_log
total 36
-rw-r----- 1 mysql mysql 178 Jan 17 16:20 mysql-bin.000003
-rw-r----- 1 mysql mysql 178 Jan 17 16:20 mysql-bin.000004
-rw-r----- 1 mysql mysql 178 Jan 17 16:20 mysql-bin.000005
-rw-r----- 1 mysql mysql 178 Jan 17 16:20 mysql-bin.000006
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000007
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000008
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000009
-rw-r----- 1 mysql mysql 155 Jan 17 16:21 mysql-bin.000010
-rw-r----- 1 mysql mysql 328 Jan 17 16:29 mysql-bin.index

發(fā)現(xiàn)mysql-bin.000001文件和mysql-bin.000002文件被刪除了。說明根據(jù)編號刪除二進制日志時,只會刪除比當前指定的文件編號小的二進制日志文件,不會刪除當前指定的二進制日志文件。

2.根據(jù)時間刪除二進制日志

根據(jù)時間刪除二進制日志,語法格式如下:

PURGE { BINARY | MASTER } LOGS BEFORE datetime_expr

執(zhí)行此語法格式的SQL語句時,MySQL會刪除指定時間以前的二進制日志。

例如,刪除“2020-01-17 16:21:00”之前的二進制日志文件。

mysql> PURGE MASTER LOGS BEFORE '2020-01-17 16:21:00';
Query OK, 0 rows affected (0.00 sec)

SQL語句執(zhí)行成功,查看/data/mysql/log/bin_log目錄下的文件。

[root@binghe150 ~]# ll /data/mysql/log/bin_log
total 20
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000007
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000008
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000009
-rw-r----- 1 mysql mysql 155 Jan 17 16:21 mysql-bin.000010
-rw-r----- 1 mysql mysql 164 Jan 17 16:37 mysql-bin.index

“2020-01-17 16:21:00”之前的二進制日志文件已經(jīng)被刪除了,但不會刪除“2020-01-17 16:21:00”時間點的二進制日志文件。

3.刪除所有二進制日志

在MySQL命令行執(zhí)行如下命令即可刪除所有二進制日志文件。

mysql> RESET MASTER;
Query OK, 0 rows affected (0.01 sec)

SQL語句執(zhí)行成功,再次查看/data/mysql/log/bin_log目錄下的文件。

[root@binghe150 ~]# ll /data/mysql/log/bin_log
total 8
-rw-r----- 1 mysql mysql 155 Jan 17 16:41 mysql-bin.000001
-rw-r----- 1 mysql mysql  41 Jan 17 16:41 mysql-bin.index

此時/data/mysql/log/bin_log目錄下的所有二進制文件已經(jīng)被刪除,并且二進制文件重新從000001開始編號。

臨時開啟與關(guān)閉二進制

在 Mysql 命令行執(zhí)行如下命令暫時關(guān)閉二進制日志:

mysql> SET sql_log_bin = 0;
Query OK, 0 rows affected (0.00 sec)

暫時開啟二進制日志,則需要在MySQL命令行執(zhí)行如下命令:

mysql> SET sql_log_bin = 1;

Query OK, 0 rows affected (0.00 sec)

到此這篇關(guān)于Mysql中二進制日志操作方法說明的文章就介紹到這了,更多相關(guān)Mysql二進制日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 優(yōu)化mysql的limit offset的例子

    優(yōu)化mysql的limit offset的例子

    在mysql中,通常使用limit做分頁,而且經(jīng)常會跟order by 連用。在order by 上加索引有時候是很有幫助的,不然系統(tǒng)會做很多的filesort
    2013-02-02
  • Mysql查詢不需要Group?by的字段方法實例

    Mysql查詢不需要Group?by的字段方法實例

    在平時的開發(fā)任務(wù)中我們經(jīng)常會用到MYSQL的GROUP BY分組,用來獲取數(shù)據(jù)表中以分組字段為依據(jù)的統(tǒng)計數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Mysql查詢不需要Group?by字段方法的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • MySQL函數(shù)sysdate()與now()的區(qū)別測試用例對比

    MySQL函數(shù)sysdate()與now()的區(qū)別測試用例對比

    這篇文章主要為大家介紹了MySQL函數(shù)sysdate()與now()的區(qū)別測試用例對比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 解決mysql不是內(nèi)部或外部命令的問題

    解決mysql不是內(nèi)部或外部命令的問題

    這篇文章主要介紹了解決mysql不是內(nèi)部或外部命令的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • mysql 數(shù)據(jù)庫安裝經(jīng)驗問題匯總

    mysql 數(shù)據(jù)庫安裝經(jīng)驗問題匯總

    這篇文章主要介紹了mysql 數(shù)據(jù)庫安裝經(jīng)驗問題匯總,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • MYSQL的select 學習筆記

    MYSQL的select 學習筆記

    MYSQL的select 學習筆記...
    2007-02-02
  • 在MySQL中刪除表的操作教程

    在MySQL中刪除表的操作教程

    這篇文章主要介紹了在MySQL中刪除表的操作教程,是MySQ入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Mysql常用運算符與函數(shù)匯總

    Mysql常用運算符與函數(shù)匯總

    本文給大家匯總介紹了mysql中的常用的運算符以及常用函數(shù)的用法及示例,非常的全面,有需要的小伙伴可以參考下
    2017-09-09
  • C# Mysql 查詢 Rownum的解決方法

    C# Mysql 查詢 Rownum的解決方法

    C# Mysql 查詢 Rownum的解決方法,需要的朋友可以參考一下
    2013-03-03
  • Mysql GTID Mha配置方法

    Mysql GTID Mha配置方法

    下面小編就為大家?guī)硪黄狹ysql GTID Mha配置方法。小編覺的挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論