MySQL-相关日志

官方文档

1、MySQL支持的日志

MySQL有不同类型日志文件,用来存储不同类型的日志,分别为 二进制日志、错误日志、通用查询日志、慢查询日志、中继日志、数据定义语句日志

  • 慢查询日志:记录所有执行时间超过 long_query_time的所有查询,方便优化
  • 通用查询日志:记录所有连接的起始时间和中止时间,以及连接发送给数据库服务器的所有指令,对复原操作的实际场景、发现问题、甚至对数据库操作的审计有很大帮助
  • 错误日志:记录MySQL服务的启动,运行、中止MySQL服务时出现的问题,方便了解服务器的状态,进而对服务器进行维护
  • 二进制日志:记录所有更改数据的语句,可以用于主从服务器之间的数据同步,以及服务器遇到故障时数据的无损失恢复
  • 中继日志:用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的中间文件。从服务器通过读取中继日志的内容,来同步主服务器上的操作
  • 数据定义语句日志:记录数据定义语句执行的元数据操作

缺点:

  • 日志功能会降低MySQL数据库的性能。MySQL服务器会花费很多时间记录日志
  • 日志功能会占用大量的磁盘空间。对于用户量非常大,操作非常平凡的数据库,日志文件需要存储空间设置比数据库文件需要的存储空间还要大。

2、慢查询日志(slow query log)

见MySQL-性能分析

3、通用查询日志(general query log)

通用查询日志用来 记录用户的所有操作,包括启动和关闭MySQL服务、所有用户的连接开始时间和结束时间,发送给MySQL服务器的所有SQL指令等。当数据库发生异常时,查看通用查询日志,还原操作时的具体场景,可以帮助准确定位问题

3.1、查看当前状态

  • 通过SQL语法 show variables like 'general%'; 如下所示
mysql> show variables like 'general%';
+------------------+------------------------------+
| Variable_name    | Value                        |
+------------------+------------------------------+
| general_log      | OFF                          |  # 通用查询日志是处于关闭状态
| general_log_file | /var/lib/mysql/localhost.log |  # 通用查询日志文件名称为:localhost.log
+------------------+------------------------------+
2 rows in set (1.14 sec)
  • general_log 参数说明:默认关闭状态,一旦开启记录通用查询日志,MySQL会记录所有连接起止操作和相关SQL操作,消耗系统资源并占用磁盘空间。
  • 通用查询日志文件为 localhost.log,存储路径为 /var/lib/mysql/ ,默认也是数据路径。

3.2、启动日志的方式

  • 方式一:永久性,通过修改 my.cnf 配置文件来设置。在[mysqld] 组下加入log 选项,并重启MySQL服务,如下所示:
[root@localhost ~]# vim /etc/my.cnf
general_log=on
general_log_file=/var/lib/mysql/general-test.log
[root@localhost ~]# systemctl restart mysqld.service
  • 方式二:临时性方式,如下所示:
    • set global general_log=on;
    • set global general_log_file=‘filePath/fileName’;

3.3、查看日志信息

[root@localhost mysql]# vim general-test.log/usr/sbin/mysqld, Version: 8.0.25 (MySQL Community Server - GPL). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
2024-06-05T13:45:48.097757Z         8 Connect   root@localhost on  using Socket
2024-06-05T13:45:48.098777Z         8 Query     show variables like 'general%'
2024-06-05T13:45:57.610846Z         8 Quit
2024-06-05T13:46:06.682806Z         9 Connect   root@localhost on  using Socket
2024-06-05T13:46:06.682857Z         9 Connect   Access denied for user 'root'@'localhost' (using password: YES)
2024-06-05T13:46:17.784997Z        10 Connect   root@localhost on  using Socket
2024-06-05T13:46:17.785202Z        10 Query     select @@version_comment limit 1
2024-06-05T13:46:20.808524Z        10 Query     show variables like 'general%'
~                       

3.4、删除\刷新日志

  • 手动删除日志: 执行 show variables like ‘general_log%’; 手动删除返回日志信息
  • 刷新日志mysqladmin -uroot -p flush-logs;
[root@localhost mysql]# mysqladmin -uroot -p flush-logs

4、错误日志

错误日志记录了MySQL服务器启动、停止运行的时间,以及系统启动、运行、停止过程中的诊断信息,包括 错误、警告、提示等
通过错误日志可以查看系统的运行状态,便于及时发现故障,修复故障。如果MySQL服务 出现异常,错误日志是发现问题、解决故障的首选

4.1、启动日志

  • MySQL中错误日志功能是默认开启的,无法被禁止。默认情况下错误日志存储在MySQL数据库的数据文件下,默认名称为:mysqld.log。如需指定文件名,则需要在my.cnf中配置以下信息,并重启MySQL服务器
log-error=[path(日志文件所在目录路径)/fileName(日志文件名称)]

4.2、查看日志

mysql> show variables like 'log_error%';
+----------------------------+----------------------------------------+
| Variable_name              | Value                                  |
+----------------------------+----------------------------------------+
| log_error                  | /var/log/mysqld.log                    |
| log_error_services         | log_filter_internal; log_sink_internal |
| log_error_suppression_list |                                        |
| log_error_verbosity        | 2                                      |
+----------------------------+----------------------------------------+
4 rows in set (0.00 sec)

4.3、删除\刷新日志

  • 删除操作
[root@localhost mysql]# rm -f /var/log/mysqld.log
  • 重名文件
[root@localhost mysql]# mv /var/log/mysqld.log /var/log/mysqld.log.bak
  • 重建日志
[root@localhost mysql]# install -omysql -gmysql -m0644 /dev/null /var/log/mysqld.log
[root@localhost mysql]# mysqladmin -uroot -p flush-logs

5、二进制日志 ( bin log )

binlog 即 binary log ,二进制日志文件,也称为变更日志(update log)。记录数据库中所有执行的DDL 和 DML 等数据库更新事件的语句,但不包含没有修改任何数据的语句。
他以事件形式记录并保存在二进制文件中。通过这些信息可以再现数据更新操作的全过程

5.1、应用场景

  • 数据恢复:如果MySQL意外停止,可以通过二进制日志文件来查看用户执行了哪些操作,对数据库服务器文件做了那些修改,然后根据二进制日志文件中的记录来恢复数据库服务器
  • 数据复制:由于日志的延续性和时效性,master把它的二进制日志传递给slaves来达到master-slave数据的一致目的

MySQL数据备份、主备、主从、主主都离不开 bin log,需要依靠binlog来同步数据,保证数据的一致性

5.2、查看默认情况

  • 通过执行 show variables like '%log_bin%'; 获取信息,如下所示:
mysql> show variables like '%log_bin%';
+---------------------------------+-----------------------------+
| Variable_name                   | Value                       |
+---------------------------------+-----------------------------+
| log_bin                         | ON                          |
| log_bin_basename                | /var/lib/mysql/binlog       |
| log_bin_index                   | /var/lib/mysql/binlog.index |
| log_bin_trust_function_creators | OFF                         |
| log_bin_use_v1_row_events       | OFF                         |
| sql_log_bin                     | ON                          |
+---------------------------------+-----------------------------+
6 rows in set (0.94 sec)
  • log_bin_basename:是binlog日志的基本文件名,后面会追加标识来表示每一个文件。
  • log_bin_index:是binlog文件的索引文件,这个文件管理了所有的binlog文件的目录。
  • log_bin_trust_function_creators:限制存储过程,用于主从复制,而存储函数有可能导致主从的数据不一致。当开启二进制日志后,需要限制存储函数的创建、修改、调用
  • log_bin_use_v1_row_events:只读系统变量
[root@localhost ~]# cd /var/lib/mysql
[root@localhost mysql]# ll
总用量 188940
-rw-r-----. 1 mysql mysql      156 5月   7 06:56 binlog.000010
-rw-r-----. 1 mysql mysql      156 5月   8 07:09 binlog.000011
-rw-r-----. 1 mysql mysql      156 5月   9 06:56 binlog.000012
-rw-r-----. 1 mysql mysql      156 5月  13 07:19 binlog.000013
-rw-r-----. 1 mysql mysql      609 5月  15 05:36 binlog.000014
-rw-r-----. 1 mysql mysql     2461 5月  22 06:15 binlog.000015
-rw-r-----. 1 mysql mysql      156 5月  23 06:34 binlog.000016
-rw-r-----. 1 mysql mysql      453 5月  27 06:03 binlog.000017
-rw-r-----. 1 mysql mysql     1190 5月  28 06:09 binlog.000018
-rw-r-----. 1 mysql mysql      156 5月  29 05:48 binlog.000019
-rw-r-----. 1 mysql mysql      156 5月  30 08:23 binlog.000020
-rw-r-----. 1 mysql mysql      381 6月   1 05:37 binlog.000021
-rw-r-----. 1 mysql mysql      156 6月   4 08:01 binlog.000022
-rw-r-----. 1 mysql mysql      156 6月   5 06:00 binlog.000023
-rw-r-----. 1 mysql mysql      179 6月   5 06:39 binlog.000024
-rw-r-----. 1 mysql mysql      179 6月   5 06:45 binlog.000025
-rw-r-----. 1 mysql mysql      200 6月   5 06:54 binlog.000026
-rw-r-----. 1 mysql mysql      156 6月   6 06:45 binlog.000027
-rw-r-----. 1 mysql mysql      156 6月   6 06:45 binlog.000028
-rw-r-----. 1 mysql mysql      304 6月   6 06:45 binlog.index

5.3、日志参数设置

  • 方式一:修改my.cnf配置文件
[root@localhost mysql]# vim /etc/my.cnf[mysqld]
#
log-bin=rqtanc-bin
binlog_expire_logs_seconds=3600
max_binlog_size=10M

如果想改变日志文件的目录和名称,新建的文件夹需要使用mysql用户,使用以下命令

chown -R -v mysql:mysql binlog
  • 方式二:修改会话级变量
mysql> set sql_log_bin=0;

5.4、查看日志

MySQL重启一次,rqtanc-bin.000001 日志文件后缀文件默认加1,即日志文件的数量与服务重启的次数相同;如果日志长度超过了max_binlog_size的设定值就会创建一个新的日志文件。

  • 查看当前的二进制文件大小,通过执行 show binary logs;命令,如下所示:
mysql> show binary logs;
+-------------------+-----------+-----------+
| Log_name          | File_size | Encrypted |
+-------------------+-----------+-----------+
| rqtanc-bin.000001 |       156 | No        |
+-------------------+-----------+-----------+
1 row in set (0.11 sec)
  • 通过 mysqlbinlog命令工具,查看binlog日志:
[root@localhost mysql]# mysqlbinlog -v /rqtanc-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
mysqlbinlog: File '/rqtanc-bin.000001' not found (OS errno 2 - No such file or directory)
ERROR: Could not open log file
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
  • mysql> show binlg events [ in 'log_name' ] [ from pos ] [ limit [ offset , ] row_rount ]
    • in ‘log_name’:指定查询的binlog文件名
    • from pos:指定从哪个pos起始点开始查起
    • limit [ offset , ]:偏移量
    • row_count:查询条数
mysql> show binlog events;
+-------------------+-----+----------------+-----------+-------------+-----------------------------------+
| Log_name          | Pos | Event_type     | Server_id | End_log_pos | Info                              |
+-------------------+-----+----------------+-----------+-------------+-----------------------------------+
| rqtanc-bin.000001 |   4 | Format_desc    |         1 |         125 | Server ver: 8.0.25, Binlog ver: 4 |
| rqtanc-bin.000001 | 125 | Previous_gtids |         1 |         156 |                                   |
+-------------------+-----+----------------+-----------+-------------+-----------------------------------+
2 rows in set (0.19 sec)

5.5、使用binlog恢复数据

如果MySQL启用了二进制日志,在数据库出现意外丢失数据时,可以使用MySQL binnlog工具从指定的时间点开始直到现在或另外一个事件点的日志中恢复数据

  • 语法:mysqlbinlog [ option ] filename | mysql -uuserName -pPassword;
    • filename:日志文件名
    • option:可选项,比较重要的两对参数是 --start-datetime、--stop-datetime--start-position、--stop-position
      • –start-date 和 --end-date:可以指定恢复恢复数据库的起始时间点和结束时间点
      • –start-position 和 --stop-position :可以指定恢复数据库的起始位置和结束位置
  • 数据模拟及实现数据恢复如下所示:
#查询日志文件
mysql> show binary logs;
+-------------------+-----------+-----------+
| Log_name          | File_size | Encrypted |
+-------------------+-----------+-----------+
| rqtanc-bin.000001 |       156 | No        |
| rqtanc-bin.000002 |       204 | No        |
| rqtanc-bin.000003 |       204 | No        |
| rqtanc-bin.000004 |       156 | No        |
+-------------------+-----------+-----------+
4 rows in set (0.00 sec)
#查询相关表
mysql> select * from rqtanc;
Empty set (0.00 sec)
#插入数据
mysql> insert into rqtanc values('1','rqtanc'),('2','rqtanc1'),('3','rqtanc3');
Query OK, 3 rows affected (0.37 sec)
Records: 3  Duplicates: 0  Warnings: 0
#查询数据
mysql> select * from rqtanc;
+----+---------+
| id | name    |
+----+---------+
|  1 | rqtanc  |
|  2 | rqtanc1 |
|  3 | rqtanc3 |
+----+---------+
3 rows in set (0.00 sec)
#模拟误删除操作
mysql> delete from rqtanc where id = '3';
Query OK, 1 row affected (0.11 sec)
#查询数据
mysql> select * from rqtanc;
+----+---------+
| id | name    |
+----+---------+
|  1 | rqtanc  |
|  2 | rqtanc1 |
+----+---------+
2 rows in set (0.00 sec)
#查询binlog日志
mysql> show binary logs;
+-------------------+-----------+-----------+
| Log_name          | File_size | Encrypted |
+-------------------+-----------+-----------+
| rqtanc-bin.000001 |       156 | No        |
| rqtanc-bin.000002 |       204 | No        |
| rqtanc-bin.000003 |       204 | No        |
| rqtanc-bin.000004 |       767 | No        |
+-------------------+-----------+-----------+
4 rows in set (0.00 sec)
#刷新日志
mysql> flush logs;
Query OK, 0 rows affected (0.04 sec)
#再次查询binlog日志,有新日志文件生成
mysql> show binary logs;
+-------------------+-----------+-----------+
| Log_name          | File_size | Encrypted |
+-------------------+-----------+-----------+
| rqtanc-bin.000001 |       156 | No        |
| rqtanc-bin.000002 |       204 | No        |
| rqtanc-bin.000003 |       204 | No        |
| rqtanc-bin.000004 |       815 | No        |
| rqtanc-bin.000005 |       156 | No        |
+-------------------+-----------+-----------+
5 rows in set (0.00 sec)
  • 方式一:根据起始位置恢复数据
#查看binlog日志详情
mysql> show binlog events in 'rqtanc-bin.000004';
+-------------------+-----+----------------+-----------+-------------+--------------------------------------+
| Log_name          | Pos | Event_type     | Server_id | End_log_pos | Info                                 |
+-------------------+-----+----------------+-----------+-------------+--------------------------------------+
| rqtanc-bin.000004 |   4 | Format_desc    |         1 |         125 | Server ver: 8.0.25, Binlog ver: 4    |
| rqtanc-bin.000004 | 125 | Previous_gtids |         1 |         156 |                                      |
| rqtanc-bin.000004 | 156 | Anonymous_Gtid |         1 |         235 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| rqtanc-bin.000004 | 235 | Query          |         1 |         310 | BEGIN                                |
| rqtanc-bin.000004 | 310 | Table_map      |         1 |         370 | table_id: 90 (test.rqtanc)           |
| rqtanc-bin.000004 | 370 | Write_rows     |         1 |         443 | table_id: 90 flags: STMT_END_F       |
| rqtanc-bin.000004 | 443 | Xid            |         1 |         474 | COMMIT /* xid=18 */                  |
| rqtanc-bin.000004 | 474 | Anonymous_Gtid |         1 |         553 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| rqtanc-bin.000004 | 553 | Query          |         1 |         628 | BEGIN                                |
| rqtanc-bin.000004 | 628 | Table_map      |         1 |         688 | table_id: 90 (test.rqtanc)           |
| rqtanc-bin.000004 | 688 | Delete_rows    |         1 |         736 | table_id: 90 flags: STMT_END_F       |
| rqtanc-bin.000004 | 736 | Xid            |         1 |         767 | COMMIT /* xid=20 */                  |
| rqtanc-bin.000004 | 767 | Rotate         |         1 |         815 | rqtanc-bin.000005;pos=4              |
+-------------------+-----+----------------+-----------+-------------+--------------------------------------+
13 rows in set (0.05 sec)# 根据起始位置恢复数据
[root@localhost ~]# /usr/bin/mysqlbinlog --start-position=235 --stop-position=553 --database=test /var/lib/mysql/rqtanc-bin.000004 | /usr/bin/mysql -uroot -p123456 -v test
mysql: [Warning] Using a password on the command line interface can be insecure.
--------------
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/
----------------------------
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/
----------------------------
BINLOG '
6hhkZg8BAAAAeQAAAH0AAAAAAAQAOC4wLjI1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEwANAAgAAAAABAAEAAAAYQAEGggAAAAICAgCAAAACgoKKioAEjQA
CigBU7Qrqg==
'
----------------------------
SET TIMESTAMP=1717836114
----------------------------
SET @@session.pseudo_thread_id=8
----------------------------
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1
----------------------------
SET @@session.sql_mode=1168113696
----------------------------
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1
----------------------------
/*!*/
----------------------------
SET @@session.character_set_client=255,@@session.collation_connection=255,@@session.collation_server=255
----------------------------
SET @@session.lc_time_names=0
----------------------------
SET @@session.collation_database=DEFAULT
----------------------------
/*!80011 SET @@session.default_collation_for_utf8mb4=255*/
----------------------------
BEGIN
----------------------------
BINLOG '
UhlkZhMBAAAAPAAAAHIBAAAAAFoAAAAAAAEABHRlc3QABnJxdGFuYwACAw8CyAACAQEAAgP8/wA7
OiP7
UhlkZh4BAAAASQAAALsBAAAAAFoAAAAAAAEAAgAC/wABAAAABnJxdGFuYwACAAAAB3JxdGFuYzEA
AwAAAAdycXRhbmMzWeEi3Q==
'
----------------------------
COMMIT
----------------------------
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*/
----------------------------
/*!80001 SET @@session.original_commit_timestamp=1717836158602573*/
----------------------------
/*!80014 SET @@session.original_server_version=80025*/
----------------------------
/*!80014 SET @@session.immediate_server_version=80025*/
----------------------------
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
----------------------------
BEGIN
----------------------------
ROLLBACK
----------------------------
SET @@SESSION.GTID_NEXT= 'AUTOMATIC'
----------------------------
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/
----------------------------
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/
--------------mysql> select * from rqtanc;
+----+---------+
| id | name    |
+----+---------+
|  1 | rqtanc  |
|  2 | rqtanc1 |
|  3 | rqtanc3 |
+----+---------+
3 rows in set (0.01 sec)
  • 方式二:根据起始时间恢复数据
#查询日志详情信息
[root@localhost ~]# mysqlbinlog  -v '/var/lib/rqtanc-bin.000004'
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
mysqlbinlog: File '/var/lib/rqtanc-bin.000004' not found (OS errno 2 - No such file or directory)
ERROR: Could not open log file
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
[root@localhost ~]# mysqlbinlog -v '/var/lib/mysql/rqtanc-bin.000004'
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#240608  1:40:10 server id 1  end_log_pos 125 CRC32 0xaa2bb453  Start: binlog v 4, server v 8.0.25 created 240608  1:40:10
BINLOG '
6hhkZg8BAAAAeQAAAH0AAAAAAAQAOC4wLjI1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEwANAAgAAAAABAAEAAAAYQAEGggAAAAICAgCAAAACgoKKioAEjQA
CigBU7Qrqg==
'/*!*/;
# at 125
#240608  1:40:10 server id 1  end_log_pos 156 CRC32 0x70ab425d  Previous-GTIDs
# [empty]
# at 156
#240608  1:41:54 server id 1  end_log_pos 235 CRC32 0x977456ff  Anonymous_GTID  last_committed=0        sequence_number=1       rbr_only=yes    original_committed_timestamp=1717836114823630      immediate_commit_timestamp=1717836114823630     transaction_length=318
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# original_commit_timestamp=1717836114823630 (2024-06-08 01:41:54.823630 PDT)
# immediate_commit_timestamp=1717836114823630 (2024-06-08 01:41:54.823630 PDT)
/*!80001 SET @@session.original_commit_timestamp=1717836114823630*//*!*/;
/*!80014 SET @@session.original_server_version=80025*//*!*/;
/*!80014 SET @@session.immediate_server_version=80025*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 235
#240608  1:41:54 server id 1  end_log_pos 310 CRC32 0x4aa4c758  Query   thread_id=8     exec_time=0     error_code=0
SET TIMESTAMP=1717836114/*!*/;
SET @@session.pseudo_thread_id=8/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1168113696/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=255,@@session.collation_connection=255,@@session.collation_server=255/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
/*!80011 SET @@session.default_collation_for_utf8mb4=255*//*!*/;
BEGIN
/*!*/;
# at 310
#240608  1:41:54 server id 1  end_log_pos 370 CRC32 0xfb233a3b  Table_map: `test`.`rqtanc` mapped to number 90
# at 370
#240608  1:41:54 server id 1  end_log_pos 443 CRC32 0xdd22e159  Write_rows: table id 90 flags: STMT_END_FBINLOG '
UhlkZhMBAAAAPAAAAHIBAAAAAFoAAAAAAAEABHRlc3QABnJxdGFuYwACAw8CyAACAQEAAgP8/wA7
OiP7
UhlkZh4BAAAASQAAALsBAAAAAFoAAAAAAAEAAgAC/wABAAAABnJxdGFuYwACAAAAB3JxdGFuYzEA
AwAAAAdycXRhbmMzWeEi3Q==
'/*!*/;
### INSERT INTO `test`.`rqtanc`
### SET
###   @1=1
###   @2='rqtanc'
### INSERT INTO `test`.`rqtanc`
### SET
###   @1=2
###   @2='rqtanc1'
### INSERT INTO `test`.`rqtanc`
### SET
###   @1=3
###   @2='rqtanc3'
# at 443
#240608  1:41:54 server id 1  end_log_pos 474 CRC32 0xe09b76a8  Xid = 18
COMMIT/*!*/;
# at 474
#240608  1:42:38 server id 1  end_log_pos 553 CRC32 0x1abc857d  Anonymous_GTID  last_committed=1        sequence_number=2       rbr_only=yes    original_committed_timestamp=1717836158602573      immediate_commit_timestamp=1717836158602573     transaction_length=293
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# original_commit_timestamp=1717836158602573 (2024-06-08 01:42:38.602573 PDT)
# immediate_commit_timestamp=1717836158602573 (2024-06-08 01:42:38.602573 PDT)
/*!80001 SET @@session.original_commit_timestamp=1717836158602573*//*!*/;
/*!80014 SET @@session.original_server_version=80025*//*!*/;
/*!80014 SET @@session.immediate_server_version=80025*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 553
#240608  1:42:38 server id 1  end_log_pos 628 CRC32 0x0f1f2339  Query   thread_id=8     exec_time=0     error_code=0
SET TIMESTAMP=1717836158/*!*/;
BEGIN
/*!*/;
# at 628
#240608  1:42:38 server id 1  end_log_pos 688 CRC32 0x46e9db54  Table_map: `test`.`rqtanc` mapped to number 90
# at 688
#240608  1:42:38 server id 1  end_log_pos 736 CRC32 0x25fe86d4  Delete_rows: table id 90 flags: STMT_END_FBINLOG '
fhlkZhMBAAAAPAAAALACAAAAAFoAAAAAAAEABHRlc3QABnJxdGFuYwACAw8CyAACAQEAAgP8/wBU
2+lG
fhlkZiABAAAAMAAAAOACAAAAAFoAAAAAAAEAAgAC/wADAAAAB3JxdGFuYzPUhv4l
'/*!*/;
### DELETE FROM `test`.`rqtanc`
### WHERE
###   @1=3
###   @2='rqtanc3'
# at 736
#240608  1:42:38 server id 1  end_log_pos 767 CRC32 0xcdd3ee31  Xid = 20
COMMIT/*!*/;
# at 767
#240608  1:45:55 server id 1  end_log_pos 815 CRC32 0x09dfc5a8  Rotate to rqtanc-bin.000005  pos: 4
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;#根据起始时间恢复数据
[root@localhost ~]# /usr/bin/mysqlbinlog --start-datetime='2024-06-08 01:41:54' --stop-datetime='2024-06-08 01:42:37' --database=test /var/lib/mysql/rqtanc-bin.000004 | /usr/bin/mysql -uroot -p123456 -v test
mysql: [Warning] Using a password on the command line interface can be insecure.
--------------
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/
----------------------------
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/
----------------------------
BINLOG '
6hhkZg8BAAAAeQAAAH0AAAAAAAQAOC4wLjI1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEwANAAgAAAAABAAEAAAAYQAEGggAAAAICAgCAAAACgoKKioAEjQA
CigBU7Qrqg==
'
----------------------------
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*/
----------------------------
/*!80001 SET @@session.original_commit_timestamp=1717836114823630*/
----------------------------
/*!80014 SET @@session.original_server_version=80025*/
----------------------------
/*!80014 SET @@session.immediate_server_version=80025*/
----------------------------
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
----------------------------
SET TIMESTAMP=1717836114
----------------------------
SET @@session.pseudo_thread_id=8
----------------------------
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1
----------------------------
SET @@session.sql_mode=1168113696
----------------------------
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1
----------------------------
/*!*/
----------------------------
SET @@session.character_set_client=255,@@session.collation_connection=255,@@session.collation_server=255
----------------------------
SET @@session.lc_time_names=0
----------------------------
SET @@session.collation_database=DEFAULT
----------------------------
/*!80011 SET @@session.default_collation_for_utf8mb4=255*/
----------------------------
BEGIN
----------------------------
BINLOG '
UhlkZhMBAAAAPAAAAHIBAAAAAFoAAAAAAAEABHRlc3QABnJxdGFuYwACAw8CyAACAQEAAgP8/wA7
OiP7
UhlkZh4BAAAASQAAALsBAAAAAFoAAAAAAAEAAgAC/wABAAAABnJxdGFuYwACAAAAB3JxdGFuYzEA
AwAAAAdycXRhbmMzWeEi3Q==
'
----------------------------
COMMIT
----------------------------
SET @@SESSION.GTID_NEXT= 'AUTOMATIC'
----------------------------
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/
----------------------------
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/
--------------

5.6、删除二进制日志文件

MySQL二进制文件可以配置自动删除,同时MySQL也提供了安全的手动删除二进制的方法。如:PURGE MASTER LOGS 只删除指定部分的二进制日志文件,RESET MASTER 删除所有的二进制日志文件

  • PURGE MASTER LOGS:删除指定日志文件。语法如下所示
    • PURGE { MASTER | BINARY } LOGS TO ‘指定日志文件名’;
    • PURGE { MASTER | BINARY } LOGS BEFORE ‘指定日期’
  • RESET MASTER:删除所有二进制文件。
    • 删除后MySQL会重新创建二进制日志文件,新的文件拓展名重新从000001开始编号。(不推荐)

5.7、BinLog写入机制

事务执行过程中,先把日志写入到 binlog cache,事务提交时,再把binlog cache 写入到binlog文件中。而一个事务的binlog并不能被拆开,无论这个事务多大也要确保一次性写入,所以系统会给每个线程分配一个块内存作为binlog cache。

  • 通过设置 binlog_cache_size 参数控制单个线程 binlog cache大小,如果存储内容超过了这个参数则需暂存到磁盘(Swap)中。
mysql> show variables like  '%binlog_cache_size%';
+-----------------------+----------------------+
| Variable_name         | Value                |
+-----------------------+----------------------+
| binlog_cache_size     | 32768                |
| max_binlog_cache_size | 18446744073709547520 |
+-----------------------+----------------------+
2 rows in set (1.88 sec)
  • binlog日志刷盘流程如下:
    在这里插入图片描述
  • write 和 fsync的时机,可以通过设置 sync_binlog 的参数控制,默认 0。如下所示:
mysql> show variables like  '%sync_binlog%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sync_binlog   | 1     |
+---------------+-------+
1 row in set (2.38 sec)
  • sync_binlog的参数值为 0 时,表示每次提交事务都只write,由系统自行判断什么时候执行fsync。性能得到提升,但是宕机后,page cache 中的binlog信息会丢失,如下所示:
    在这里插入图片描述

  • sync_binlog的参数值设置为 1,表示每次提交事务都会执行 fsync,就和 redo log 刷盘流程一样。或将参数值设置为N(N>1),表示每次提交事务都write,但累积N个事务后再fsync。如图所示:

在这里插入图片描述

6、中继日志(relay log)

中继日志只在主从服务器架构的从服务器上存在。从服务器为了和主服务器保持一致,要从主服务器读取二进制日志的内容,并将读取的内容写入到 本地日志文件中(即 中继日志)
从服务器读取中继日志,并根据中继日志的内容对从服务器的数据进行更新,完成主从服务器的数据同步
主从服务搭建完成后,中继日志默认保存在从服务器的数据目录下,文件格式为: 从服务器名 -relay-bin.序号。索引文件为:-relay-bin.index,用来定位当前正在使用的中继日志。

6.1、查看中继日志

  • 中继日志与二进制日志格式相同,使用 mysqlbinlog 工具进行查看
mysql> show variables like 'relay_log%';
+---------------------------+------------------------------------------+
| Variable_name             | Value                                    |
+---------------------------+------------------------------------------+
| relay_log                 | localhost-relay-bin                      |
| relay_log_basename        | /var/lib/mysql/localhost-relay-bin       |
| relay_log_index           | /var/lib/mysql/localhost-relay-bin.index |
| relay_log_info_file       | relay-log.info                           |
| relay_log_info_repository | TABLE                                    |
| relay_log_purge           | ON                                       |
| relay_log_recovery        | OFF                                      |
| relay_log_space_limit     | 0                                        |
+---------------------------+------------------------------------------+
8 rows in set (0.18 sec)

6.2、恢复典型错误

如果服务器宕机,有时为了系统恢复需要重新安装操作系统,可能会导致 服务器名称 与之前 并不一致。而中继日志是包含从服务器名称的。
在上述情况下,可能导致恢复从服务器的时候,无法从宕机前的中继日志里读取数据。
解决方案: 将从服务器名称 修改为 以前的名称

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

攻防世界---misc---Excaliflag

1、题目描述,下载附件是一张图片 2、用winhex分析,没有发现奇怪的地方 3、在kali中使用binwalk -e 命令,虽然分离出来了一些东西,但是不是有用的 4、最后用stegsolve分析,切换图片,发现有字符串&#xff0c…

Apache IoTDB 分布式架构三部曲(三)副本与共识算法

IoTDB 首创并应用的共识协议统一框架,为用户提供了灵活选择不同共识算法的可能性。 对于一个分布式集群而言,为了使得海量数据场景下集群能够横向扩展,集群需要按照一定的规则将全部数据分成多个子集存储在不同的节点上,从而能够更…

CNN简介与实现

CNN简介与实现 导语整体结构卷积层卷积填充步幅三维卷积立体化批处理 实现 池化层特点实现 CNN实现可视化总结参考文献 导语 CNN全称卷积神经网络,可谓声名远扬,被用于生活中的各个领域,也是最好理解的神经网络结构之一。 整体结构 相较于…

GUI编程-01

组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 Java提供了丰富的图形用户界面(Graphics User Interface,GUI)的类库,基于这些类库可以编写窗口程序。 Java关于图形界面的类库主要放在…

171.二叉树:二叉树的所有路径(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr, right(nullptr) {}* Tree…

LabVIEW伺服电机测控系统

LabVIEW伺服电机测控系统 开发了一个基于LabVIEW的伺服电机测控系统。系统主要用于精确控制电机的运动,以达到高效率和高精度的要求。通过使用LabVIEW软件和配套的硬件,开发者能够实现对伺服电机的实时监控和控制,进而提高整个系统的性能和可…

【Linux系统编程】进程地址空间

目录 前言 进程虚拟地址空间的引入 进程地址空间的概念 进一步理解进程地址空间 为什么需要进程地址空间? 系统层面理解malloc/new内存申请 前言 首先,在我们学习C语言的时候一定会见过如下这张图。(没见过也没关系,接下来…

【JavaScript对象详解】 Day05

JavaScript对象详解 JavaScript 基础 - 第5天对象语法对象属性对象使用属性-查属性-改属性-增属性-删 (了解) 方法和调用遍历对象遍历数组对象null 内置对象Math属性方法生成任意范围随机数 综合案例随机点名案例猜数字游戏猜数字游戏设定次数生成随机颜…

运维 之 DNS域名解析

前言 我们每天打开的网站,他是如何来解析,并且我们怎么能得到网站的内容反馈的界面呢?那什么是DNS呢(DNS(DomainNameservice,域名服务,主要用于因特网上作为域名和IP地址相互映射)那…

React的表单学习

react的表单的双向绑定 // userState实现计数实例 import {useState} from react// 1.声明一个react的状态 -useState// 2.核心绑定流程//1.通过value属性绑定react状态//2.绑定onChange事件,通过事件参数e拿到输入框最新的值,反向修改到react状态 func…

机器学习与数据挖掘知识点总结(二)之常用的分类算法

目录 1、什么是数据挖掘 2、为什么要有数据挖掘 3、数据挖掘用在分类任务中的算法 朴素贝叶斯算法 svm支持向量机算法 PCA主成分分析算法 k-means算法 决策树 1、什么是数据挖掘 数据挖掘是从大量数据中发现隐藏在其中的模式、关系和规律的过程。它利用统计学、机器学…

Kafka监控系统efak的安装

下载地址Kafka Eaglehttp://download.kafka-eagle.org/下载地址连接不稳定,可以多次尝试直到成功连接下载 1.解压安装包并重命名 tar -zxvf kafka-eagle-bin-3.0.1.tar.gz 查看到解压后包含一个安装包,再解压 tar -zxvf efak-web-3.0.1-bin.tar.gz 移…

【Nacos 2.3.3支持Postgre SQL数据源配置】

Nacos 2.3.3支持Postgre SQL数据源配置 1、Nacos下载2、 插件下载:3、SQL脚本获取、nacos数据库创建、插件编译4、Nacos 集群搭建方式: 1、Nacos下载 下载地址: https://download.nacos.io/nacos-server/nacos-server-2.3.2.zip 或者自行在官…

1.Vue2使用ElementUI-初识及环境搭建

目录 1.下载nodejs v16.x 2.设置淘宝镜像源 3.安装脚手架 4.创建一个项目 5.项目修改 代码地址:source-code: 源码笔记 1.下载nodejs v16.x 下载地址:Node.js — Download Node.js 2.设置淘宝镜像源 npm config set registry https://registry.…

SpringCloud-OpenFeign拓展-连接池、最佳使用方法、日志输出

目录 1 OpenFeign连接池 1.1 常见连接类型 1.2 连接池使用方法 1.2.1 引入依赖 1.2.2 开启连接池功能 1.2.3 配置完成,重启实例即可,底层将更改设置。 2 OpenFeign最佳使用方法 2.1 每个微服务都是单独的project,内部有三个独立模块 …

Docker:认识镜像仓库及其命令

文章目录 Docker Registry什么是Docker Registry 镜像仓库工作机制使用流程实际使用方法仓库的拉取机制 常用的镜像仓库---DockerHub什么是DockerHub私有仓库 镜像仓库命令docker logindocker pulldocker pushdocker searchdocker logout Docker Registry 什么是Docker Regist…

编译遇到找不到pcap.so 问题

1.locate 定义pcap.so locate pcap.so 如果存在则打印所有路径 使用软连接将pcap.so 的实际位置连接到编译的lib 目录下 ln -s /usr/lib/x86_64-linux-gnu/libpcap.so /usr/lib/libpcap.so 编译 提示 说明程序中编译的目标程序需要的库与现有的不兼容,一般都是3…

Mysql使用中的性能优化——单次插入和批量插入的性能差异

一般Mysql的客户端和服务端不在一台机器上,所以它们之间的通信需要通过网络进行。我们本次实验,希望抛开网络的影响,测试不同SQL方案在Mysql服务器上的执行效率的对比。于是我们使用“存储过程”来辅助测试。 结论 先上结论: 批…

Servlet基础(续集)

Servlet原理 Servlet是由Web服务器调用&#xff0c;Web服务器在收到浏览器请求之后&#xff0c;会&#xff1a; Mapping问题 一个Servlet可以指定一个映射路径 <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pa…

vue3 实现自定义指令封装 --- 通俗易懂

1、局部自定义指令 1.1 在<script setup>定义组件内的指令&#xff0c;任何以v开头的驼峰式命名的变量都可以被用作一个自定义指令 <template><div><h3>使用自定义指令</h3><div>########################## start 局部自定义指令</d…