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中文網其他相關文章!