MySQL-相关日志

news2024/11/27 14:30:24

官方文档

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_F

BINLOG '
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_F

BINLOG '
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.coloradmin.cn/o/1802923.html

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

相关文章

单元测试覆盖率

什么是单元测试覆盖率 关于其定义,先来看一下维基百科上的一段描述: 代码覆盖(Code coverage)是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。 简单来理解&#xff…

【微信小程序】事件绑定和事件对象

文章目录 1.什么是事件绑定2.button组件3.事件绑定4.input组件 1.什么是事件绑定 小程序中绑定事件与在网页开发中绑定事件几乎一致,只不过在小程序不能通过on的方式绑定事件,也没有click等事件,小程序中 绑定事件使用bind方法,c…

反转链表 (oj题)

一、题目链接 https://leetcode.cn/problems/reverse-linked-list/submissions/538124207 二、题目思路 1.定义三个指针,p1先指向NULL p2指向头结点 p3指向第二个结点 2.p2的next指向p1。然后移动指针,p1来到p2的位置,p2来到p3的位置&…

双列集合基础知识

package exercise;import java.util.HashMap; import java.util.Map;public class Demo1 {public static void main(String[] args) {Map<String, String> map new HashMap<>();//在添加数据的时候&#xff0c;如果键不存在&#xff0c;那么直接把键值对对象添加到…

小主机折腾记25

10.买了惠普光驱&#xff0c;想给880g5twr安装上&#xff0c;结果发现卡扣不对 880g5twr的卡扣更长一些&#xff0c;比光驱本身长一些&#xff0c;各位如果想买的注意擦亮眼睛&#xff0c;看看卡扣跟你的主机一致与否 后续在闲鱼上买了个卡扣&#xff0c;加邮费12块钱…… 1…

手搓文件格式转换

最初目标&#xff1a; 自己搞一个免费的pdf文件转换 根据现有的开源jar 项目实现思路&#xff1a; 1. 项目原因a. 我想转换文件b. wps 文件转换 2. 最初的状态a. jar运行的b. main,输入文件路径c. 一定的编程能力的人才能得 3. 开始构思项目a. 网页版本b. 想着大家一起用 4. …

Go 编程风格指南 - 最佳实践

Go 编程风格指南 - 最佳实践 原文&#xff1a;https://google.github.io/styleguide/go 概述 | 风格指南 | 风格决策 | 最佳实践 注意&#xff1a; 本文是 Google Go 风格 系列文档的一部分。本文档是 规范性(normative) 但不是强制规范(canonical)&#xff0c;并且从属于Goo…

2003NOIP普及组真题 3. 数字游戏

线上OJ 地址&#xff1a; 【03NOIP普及组】数字游戏 此题考察的是 区间DP 前缀和 核心思想&#xff1a; 1、这道题主要考查了动态规划的思想。通过分析题目&#xff0c;可以发现需要 枚举环上所有划分为m组 的不同方案&#xff0c;来求得最大或最小值。属于 环上动态规划 问…

IEDA 默认集成依赖概述

IEDA 默认集成依赖概述 目录概述需求&#xff1a; 设计思路实现思路分析 1.Developer Tools:GraalVM Native supportGraphQL DGs Code GenerationSpring Boot DevToolsLombokSpring Configuration ProcessorDocker Compose supportSpring Modulith 2.WebWebSpring WebSpring Re…

安卓约束性布局学习

据说这个布局是为了解决各种布局过度前套导致代码复杂的问题的。 我想按照自己想实现的各种效果来逐步学习&#xff0c;那么直接拿微信主页来练手&#xff0c;用约束性布局实现微信首页吧。 先上图 先实现顶部搜索框加号按钮 先实现 在布局中添加一个组件&#xff0c;然后摆放…

java web:springboot mysql开发的一套家政预约上门服务系统源码:家政上门服务系统的运行流程

java web&#xff1a;springboot mysql开发的一套家政预约上门服务系统源码&#xff1a;家政上门服务系统的运行流程 家政上门服务系统的优势 服务质量更稳定&#xff1a;由专业的家政人员提供服务&#xff0c;经过严格的培训和筛选。 价格更透明&#xff1a;采用套餐式收费&…

java的核心机制:JVM

JVM&#xff08;java virtual machine&#xff0c;java虚拟机&#xff09;&#xff1a;是一个虚拟的计算机&#xff0c;是java程序的运行环境。JVM具有指令集并使用不同的存储区域&#xff0c;负责执行指令&#xff0c;管理数据、内存、寄存器。 JVM功能1&#xff1a;实现java程…

以sqlilabs靶场为例,讲解SQL注入攻击原理【54-65关】

【Less-54】 与前面的题目不同是&#xff0c;这里只能提交10次&#xff0c;一旦提交超过十次&#xff0c;数据会重新刷新&#xff0c;所有的步骤需要重来一次。 解题步骤&#xff1a; 根据测试&#xff0c;使用的是单引号闭合。 # 判断字段的数量 ?id1 order by 3 -- aaa# …

力扣 有效的括号 栈

Problem: 20. 有效的括号 文章目录 思路复杂度&#x1f49d; Code 思路 &#x1f468;‍&#x1f3eb; 参考地址 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) &#x1f49d; Code class Solution {static Map<Character, Character> m…

香橙派 Orange AIpro 测评记录视频硬件解码

香橙派 Orange AIpro 测评记录视频硬件解码 香橙派官网&#xff1a;http://www.orangepi.cn/ 收到了一块Orange Pi AIpro开发板&#xff0c;记录一下我的测评~测评简介如下&#xff1a;1.连接网络2.安装流媒体进行硬件解码测试3.安装IO测试 简介 Orange Pi AI Pro 是香橙派联合…

i.MX8MP平台开发分享(RDC软件配置篇)

Uboot中已经将RDC的配置写入到了OCRAM中&#xff0c;NXP在ATF中预设了SIP服务&#xff0c;SIP服务下有厂商自定义的smc命令ID。例如下面的DDR、GPC、SRC和HAB的smc回调函数。 在SRC中断处理函数中&#xff0c;对于SRC_M4_START指令&#xff0c;先读取OCRAM中的配置&#xff0c;…

web-上传项目文件夹到Git远程仓库

Git初识 概念&#xff1a;一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 检验成功 打开bash终端&#xff08;git专用&#xff09;命令…

中缀表达式和前缀后缀

在中缀表达式中&#xff0c;操作数可能与两个操作符相结合 但是&#xff0c;想要不带括号无歧义&#xff0c;且不需要考虑运算符优先级和结合性 所以考虑 前缀表达式&#xff0c;波兰表达式 后缀表达式 逆波兰表达式 对于人来说&#xff0c;中缀表达式是最容易读懂的。但是对于…

数据库存储过程和锁机制

存储过程 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的&#xff0c;存储过程思想上很简单,就是数据库SQL语言层面的代码封装与有重用 …

Django框架中级

Django框架中级 – 潘登同学的WEB框架 文章目录 Django框架中级 -- 潘登同学的WEB框架 中间件自定义中间件常用中间件process_view() 使用中间件进行URL过滤 Django生命周期生命周期分析 Django日志日志配置filter过滤器自定义filter 日志格式化formatter Django信号内置信号定…