首頁 > 資料庫 > mysql教程 > mysql對資料的更新操作記錄在哪個日誌中?

mysql對資料的更新操作記錄在哪個日誌中?

青灯夜游
發布: 2020-11-02 13:56:16
原創
2363 人瀏覽過

mysql對資料的更新操作記錄在通用查詢日誌和二進位日誌中。通用查詢日誌用來記錄使用者的所有操作,包括啟動和關閉 MySQL 服務、更新語句和查詢語句等;二進位日誌會以二進位的形式記錄資料庫的各種操作,但不記錄查詢語句。

mysql對資料的更新操作記錄在哪個日誌中?

(推薦教學:mysql影片教學

日誌是資料庫的重要組成部分,主要用來記錄資料庫的運作情況、日常操作和錯誤訊息。

MySQL通用查詢日誌(General Query Log)

#通用查詢日誌(General Query Log)用來記錄使用者的所有操作,包括啟動和關閉MySQL 服務、更新語句和查詢語句等。

預設情況下,通用查詢日誌功能是關閉的。可以透過下列指令查看通用查詢日誌是否開啟,指令如下:

mysql> SHOW VARIABLES LIKE '%general%';
+------------------+----------------------------------------------------------------+
| Variable_name    | Value                                                          |
+------------------+----------------------------------------------------------------+
| general_log      | OFF                                                            |
| general_log_file | C:\ProgramData\MySQL\MySQL Server 5.7\Data\LAPTOP-UHQ6V8KP.log |
+------------------+----------------------------------------------------------------+
2 rows in set, 1 warning (0.01 sec)
登入後複製

從結果可以看出,通用查詢日誌是關閉的,general_log_file 變數指定了通用查詢日誌檔案所在的位置。

啟動並設定通用查詢日誌

在MySQL 中,可以透過在MySQL 設定檔新增log 選項來開啟通用查詢日誌,格式如下:

[mysqld]
log=dir/filename
登入後複製

其中,dir 參數指定通用查詢日誌的儲存路徑;filename 參數指定日誌的檔案名稱。如果不指定儲存路徑,通用查詢日誌將預設儲存到 MySQL 資料庫的資料資料夾下。如果不指定檔案名,預設檔案名為 hostname.log,其中 hostname 表示主機名稱。

查看通用查詢日誌

如果您希望了解使用者最近的操作,可以查看通用查詢日誌。通用查詢日誌以文字檔案的形式儲存,可以使用普通文字檔案查看該類型日誌內容。

範例1

首先我們查看通用查詢日誌功能是否為開啟狀態,然後查詢tb_student 資料表的記錄,SQL 指令和執行過程如下:

mysql> SHOW VARIABLES LIKE '%general%';
+------------------+----------------------------------------------------------------+
| Variable_name    | Value                                                          |
+------------------+----------------------------------------------------------------+
| general_log      | ON                                                             |
| general_log_file | C:\ProgramData\MySQL\MySQL Server 5.7\Data\LAPTOP-UHQ6V8KP.log |
+------------------+----------------------------------------------------------------+
2 rows in set, 1 warning (0.02 sec)

mysql> use test;
Database changed
mysql> SELECT * FROM tb_student;
+----+--------+
| id | name   |
+----+--------+
|  1 | Java   |
|  2 | MySQL  |
|  3 | Python |
+----+--------+
登入後複製

3 rows in set (0.06 sec)

執行成功後,開啟通用查詢日誌,這裡日誌名稱為LAPTOP-UHQ6V8KP.log,以下是通用查詢日誌中的部分內容。

C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe, Version: 5.7.29-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: MySQL
Time                 Id Command    Argument
2020-05-29T06:43:44.382878Z     7 Quit
2020-05-29T06:44:10.001382Z     8 Connect root@localhost on  using SSL/TLS
2020-05-29T06:44:10.007532Z     8 Query select @@version_comment limit 1
2020-05-29T06:44:11.748179Z     8 Query SHOW VARIABLES LIKE '%general%'
2020-05-29T06:44:25.487472Z     8 Query SELECT DATABASE()
2020-05-29T06:44:25.487748Z     8 Init DB test
2020-05-29T06:44:35.390523Z     8 Query SELECT * FROM tb_student
登入後複製

可以看出,該日誌非常清楚地記錄了客戶端的所有行為。

MySQL二進位日誌(Binary Log)

二進位日誌(Binary Log)也可稱為變更日誌(Update Log),是MySQL中非常重要的日誌。主要用於記錄資料庫的變更情況,即 SQL 語句的 DDL 和 DML 語句,不包含資料記錄查詢操作。

如果 MySQL 資料庫意外停止,可以透過二進位日誌檔案來查看使用者執行了哪些操作,對資料庫伺服器檔案做了哪些修改,然後根據二進位記錄檔中的記錄來還原資料庫伺服器。

預設情況下,二進位日誌功能是關閉的。可以透過以下命令查看二進位日誌是否開啟,命令如下:

mysql> SHOW VARIABLES LIKE 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | OFF   |
+---------------+-------+
1 row in set, 1 warning (0.02 sec)
登入後複製

從結果可以看出,二進位日誌是關閉的。

啟動和設定二進位日誌

在MySQL 中,可以透過在設定檔中新增log-bin 選項來開啟二進位日誌,格式如下:

[mysqld]
log-bin=dir/[filename]
登入後複製

其中,dir 參數指定二進位檔案的儲存路徑;filename 參數指定二進位檔案的檔案名,其形式為filename.number,number 的形式為000001、000002 等。

每次重新啟動 MySQL 服務後,都會產生一個新的二進位日誌文件,這些日誌檔案的檔案名稱中 filename 部分不會改變,number 會不斷遞增。

如果沒有 dir 和 filename 參數,二進位日誌將預設儲存在資料庫的資料目錄下,預設的檔案名稱為 hostname-bin.number,其中 hostname 表示主機名稱。

下面在my.ini 檔案的[mysqld] 群組中加入以下語句:

log-bin
登入後複製

重啟MySQL 伺服器後,可以在MySQL 資料庫的資料目錄下看到LAPTOP-UHQ6V8KP-bin. 000001 這個文件,同時也產生了LAPTOP-UHQ6V8KP-bin.index 文件。此處,MySQL 伺服器的主機名為 LAPTOP-UHQ6V8KP。

也可以在 my.ini 檔案的 [mysqld] 群組中進行以下修改。語句如下:

log-bin=C:log\mylog
登入後複製

重啟 MySQL 服務後,可以在 C:log 資料夾下看到 mylog.000001 檔案和 mylog.index 檔案。

查看二進位日誌

1. 查看二進位日誌檔案清單

可以使用下列指令查看MySQL 中有哪些二進位日誌檔案:

mysql> SHOW binary logs;
+----------------------------+-----------+
| Log_name                   | File_size |
+----------------------------+-----------+
| LAPTOP-UHQ6V8KP-bin.000001 |       177 |
| LAPTOP-UHQ6V8KP-bin.000002 |       154 |
+----------------------------+-----------+
2 rows in set (0.00 sec)
登入後複製

2. 查看目前正在寫入的二進位記錄檔

可以使用下列指令查看目前MySQL 中正在寫入的二進位記錄檔。

mysql> SHOW master status;
+----------------------------+----------+--------------+------------------+-------------------+
| File                       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------------+----------+--------------+------------------+-------------------+
| LAPTOP-UHQ6V8KP-bin.000002 |      154 |              |                  |                   |
+----------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
登入後複製

3. 查看二進位日誌檔案內容

二進位日誌使用二進位格式存儲,不能直接開啟檢視。如果需要查看二進位日誌,則必須使用 mysqlbinlog 指令。

mysqlbinlog 命令的语法形式如下:

mysqlbinlog filename.number
登入後複製

mysqlbinlog 命令只在当前文件夹下查找指定的二进制日志,因此需要在二进制日志所在的目录下运行该命令,否则将会找不到指定的二进制日志文件。

例 1

下面使用 mysqlbinlog 命令,来查看 C:\log 目录下的 mylog.000001 文件,代码执行如下:

C:\Users\11645>cd C:\log
C:\log>mysqlbinlog mylog.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#200527  9:33:37 server id 1  end_log_pos 123 CRC32 0x69738cfd  Start: binlog v 4, server v 5.7.29-log created 200527  9:33:37 at startup
......
登入後複製

由于日志内容较长,这里只展示了 mylog 中的部分内容。

使用 mysqlbinlog 命令时,可以指定二进制文件的存储路径。这样可以确保 mysqlbinlog 命令可以找到二进制文件。上面例子中的命令可以变为如下形式:

mysqlbinlog C:\log\mylog.000001
登入後複製

这样,mysqlbinlog 命令就会到 C:\log 目录下去查找 mylog.000001 文件。如果不指定路径,mysqlbinlog 命令将在当前目录下查找 mylog.000001 文件。

除了 filename.number 文件,MySQL 还会生成一个名为 filename.index 的文件,这个文件存储着所有二进制日志文件的列表,可以用记事本打开该文件。

小技巧:实际工作中,二进制日志文件与数据库的数据文件不放在同一块硬盘上,这样即使数据文件所在的硬盘被破坏,也可以使用另一块硬盘上的二进制日志来恢复数据库文件。两块硬盘同时坏了的可能性要小得多,这样可以保证数据库中数据的安全。

更多编程相关知识,请访问:编程入门!!

以上是mysql對資料的更新操作記錄在哪個日誌中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板