MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点1:二进制日志文件(Binary log)

这篇具有很好参考价值的文章主要介绍了MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点1:二进制日志文件(Binary log)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【免责声明】文章仅供学习交流,观点代表个人,与任何公司无关。
编辑|SQL和数据库技术(ID:SQLplusDB)

MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点1:二进制日志文件(Binary log)

MySQL中有多种类型的日志文件,这些日志可用于故障排除、性能调整和审计等目的,帮助找出正在发生的活动。

常见的日志文件包括:

日志类型 写入日志的信息
错误日志(Error log) 启动、运行或停止mysqld时遇到的问题
二进制日志(Binary log) 更改数据的语句(也用于复制)
中继日志(Relay log) 从复制源服务器接收到的数据更改
通用查询日志(General query log) 已建立的客户端连接和从客户端接收到的语句
慢查询日志(Slow query log) 执行时间超过long_query_time秒的查询
DDL日志(元数据日志)(DDL log) DDL语句执行的元数据操作

MySQL二进制日志(Binary log)

MySQL的二进制日志(Binary log)是一种记录所有对MySQL数据库进行修改的操作的日志文件。

二进制日志文件主要用于如下目的:

1.用于主从复制(replication)。
主服务器(复制源)将修改操作记录到二进制日志文件中,并将该文件发送到从服务器。
从服务器使用二进制日志文件中的操作记录来更新自己的数据库(重现这些事务,进行的相同数据更改),从而与主服务器保持同步。

2.用于数据恢复操作(point-in-time)。
将所有修改操作记录到一个二进制日志文件中,当需要进行数据恢复时,可以使用二进制日志文件中的操作记录来重建数据库。
例如在备份还原后,重新执行在备份之后记录在二进制日志中的事件,可以将数据库从备份点更新到最新状态。

二进制日志文件的相关配置

通过MySQL的配置文件设置二进制日志文件的路径、日志格式、日志级别等,在配置二进制日志时,需要注意日志文件的大小和保留时间,以免日志文件过大或过旧导致系统性能下降。

二进制日志默认为启用状态(即log_bin系统变量设置为ON)。

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

可以通过如下命令查看二进制日志文件相关的配置参数。

mysql> show variables like '%log_bin%';
mysql> show variables like '%binlog%';

二进制日志文件相关的配置参数输出例:

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.01 sec)

mysql> show variables like '%binlog%';
+------------------------------------------------+----------------------+
| Variable_name                                  | Value                |
+------------------------------------------------+----------------------+
| binlog_cache_size                              | 32768                |
| binlog_checksum                                | CRC32                |
| binlog_direct_non_transactional_updates        | OFF                  |
| binlog_encryption                              | OFF                  |
| binlog_error_action                            | ABORT_SERVER         |
| binlog_expire_logs_auto_purge                  | ON                   |
| binlog_expire_logs_seconds                     | 2592000              |
| binlog_format                                  | ROW                  |
| binlog_group_commit_sync_delay                 | 0                    |
| binlog_group_commit_sync_no_delay_count        | 0                    |
| binlog_gtid_simple_recovery                    | ON                   |
| binlog_max_flush_queue_time                    | 0                    |
| binlog_order_commits                           | ON                   |
| binlog_rotate_encryption_master_key_at_startup | OFF                  |
| binlog_row_event_max_size                      | 8192                 |
| binlog_row_image                               | FULL                 |
| binlog_row_metadata                            | MINIMAL              |
| binlog_row_value_options                       |                      |
| binlog_rows_query_log_events                   | OFF                  |
| binlog_stmt_cache_size                         | 32768                |
| binlog_transaction_compression                 | OFF                  |
| binlog_transaction_compression_level_zstd      | 3                    |
| binlog_transaction_dependency_history_size     | 25000                |
| binlog_transaction_dependency_tracking         | COMMIT_ORDER         |
| innodb_api_enable_binlog                       | OFF                  |
| log_statements_unsafe_for_binlog               | ON                   |
| max_binlog_cache_size                          | 18446744073709547520 |
| max_binlog_size                                | 104857600            |
| max_binlog_stmt_cache_size                     | 18446744073709547520 |
| sync_binlog                                    | 1                    |
+------------------------------------------------+----------------------+
30 rows in set (0.00 sec)

二进制日志文件的相关参数的说明

变量名 说明
log_bin 是否启用二进制日志记录 ,如果设置为ON,则MySQL将记录所有修改数据库的语句到二进制日志中。
log_bin_basename 二进制日志文件的路径和基本名称,MySQL将在该名称后面添加一个数字作为文件名的后缀。例值为/var/lib/mysql/binlog时文件名为 binlog.000037
log_bin_index 二进制日志索引文件的的路径和名称。例 /var/lib/mysql/binlog.index
log_bin_trust_function_creators 是否信任二进制日志中的函数创建者,如果设置为OFF,则MySQL将拒绝在二进制日志中记录由未授权的函数创建者创建的函数。
log_bin_use_v1_row_events deprecated。是否使用v1格式的行事件记录,如果设置为ON,则MySQL将使用v1格式的行事件记录(5.5以前),否则将使用v2格式的行事件记录(5.6以后)。
sql_log_bin 是否记录所有修改数据库的语句到二进制日志中,包括非事务性语句。默认开启
binlog_cache_size 二进制日志缓存大小,用于控制二进制日志缓存的大小,避免过多的内存占用。
binlog_checksum 二进制日志校验方式,可以是NONE、CRC32或者SHA256,用于保证二进制日志的完整性。
binlog_direct_non_transactional_updates 默认关闭,是否直接将非事务性更新写入二进制日志,如果设置为ON,则MySQL将直接将非事务性更新写入二进制日志,否则将缓存这些更新,直到事务提交后再写入二进制日志,避免当一个事务包含对事务性表和非事务性表的更新时,复制的不一致性问题。
binlog_encryption 是否启用二进制日志加密
binlog_error_action 二进制日志出错时的处理方式,可以是IGNORE_ERROR、ABORT_SERVER或者ABORT_SLAVE
binlog_expire_logs_auto_purge 是否自动清理过期的二进制日志,如果设置为ON,则MySQL将自动清理过期的二进制日志。
binlog_expire_logs_seconds 二进制日志过期时间,单位为秒 ,用于控制二进制日志的过期时间。默认30天。
binlog_format 二进制日志格式,默认值ROW,可以是STATEMENT、ROW或者MIXED 。8.0.34开始deprecated
binlog_group_commit_sync_delay 二进制日志组提交同步延迟时间,单位为微秒
binlog_group_commit_sync_no_delay_count 二进制日志组提交同步延迟计数器
binlog_gtid_simple_recovery 是否启用简单的GTID恢复
binlog_max_flush_queue_time deprecated。二进制日志最大刷新队列时间,单位为微秒
binlog_order_commits 是否按照提交顺序记录二进制日志,如果设置为ON,则MySQL将按照提交顺序记录二进制日志。
binlog_transaction_compression 是否启用二进制日志事务压缩。默认OFF
binlog_transaction_compression_level_zstd 二进制日志事务压缩级别,可以是1~22之间的整数
binlog_transaction_dependency_history_size 二进制日志事务依赖历史记录大小,用于控制二进制日志事务依赖历史记录的大小
binlog_transaction_dependency_tracking 是否启用二进制日志事务依赖追踪,如果设置为ON,则MySQL将记录事务之间的依赖关系,以便在主从复制时保证数据的一致性。
innodb_api_enable_binlog 是否启用InnoDB API的二进制日志记录
log_statements_unsafe_for_binlog 是否记录不安全的语句到二进制日志中
max_binlog_cache_size 二进制日志缓存的最大大小,用于控制二进制日志缓存的大小,避免过多的内存占用。
max_binlog_size 二进制日志文件的最大大小,用于控制二进制日志文件的大小,避免过多的磁盘占用。
max_binlog_stmt_cache_size 二进制日志语句缓存的最大大小 ,用于控制二进制日志语句缓存的大小,避免过多的内存占用。
sync_binlog 二进制日志同步方式(binlog文件刷新机制),可以是0、1或者N。 0 表示这个同步操作由操作系统根据自身负载自行决定binlog多久写一次磁盘,1 表示每一条事务提交都会立即写磁盘,n 则表示 n 个事务提交才会写磁盘

参考:
17.1.6.4
Binary Logging Options and Variables
https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html

二进制日志的格式

MySQL使用多种日志格式来记录二进制日志中的信息:

  1. 基于SQL语句的日志格式(statement-based logging)
    基于SQL语句的日志格式是基于从主服务器到从服务器的SQL语句进行复制。每一条会修改数据的sql语句都会记录到binlog中。该格式下产生的binlog日志量会比较少,但可能导致主从数据不一致。

  2. 基于行的日志格式(row-based logging)
    在基于行的日志格式中(默认格式),主服务器会将事件写入二进制日志,但不记录每一条具体执行的SQL语句,仅记录哪条数据被修改了,以及修改前后的样子。该格式下产生的binlog日志量会比较大,但优点是会非常清楚的记录下每一行数据修改的细节,主从复制不会出错。

  3. 混合日志格式(mixed logging)
    二进制日志也可以采用混合日志格式。默认情况下,使用基于语句的日志格式,但在某些特殊情况(无法保证复制时一致性的情况)下,日志记录模式会自动切换为基于行的日志格式。
    例如,在基于语句的复制中,可能存在复制不确定性语句的问题。在决定是否将给定语句安全地用于基于语句的复制时,MySQL确定是否可以保证使用基于语句的日志格式复制该语句。如果MySQL无法做出此保证,则将该语句标记为潜在不可靠,并发出警告,语句可能不安全以语句格式记录。这时可以通过使用MySQL的基于行的复制来避免这些问题。

设置二进制日志的格式

可以通过binlog_format参数可以设置二进制日志的格式。

全局级别的设置方法:

mysql> SET GLOBAL binlog_format = 'STATEMENT';
mysql> SET GLOBAL binlog_format = 'ROW';
mysql> SET GLOBAL binlog_format = 'MIXED';

会话级别的设置方法:

mysql> SET SESSION binlog_format = 'STATEMENT';
mysql> SET SESSION binlog_format = 'ROW';
mysql> SET SESSION binlog_format = 'MIXED';

例:

mysql> show variables like 'binlog_format';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)

mysql> SET SESSION binlog_format = 'ROW';
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

mysql>

参考:
5.4.4.1 Binary Logging Formats
https://dev.mysql.com/doc/refman/8.0/en/binary-log-formats.html

二进制日志的操作

二进制日志的操作包括如下命令:

--显示所有可用的二进制日志文件列表,包括文件名、文件大小和是否加密等信息。
show binary logs;
--显示指定二进制日志文件中的事件列表,包括日志文件名、事件类型、位置、执行线程ID等信息。
show binlog events in '<binlog名>';
--显示主服务器的二进制日志状态,包括当前正在使用的二进制日志文件名、当前日志文件的位置等信息。
show master status;
--刷新二进制日志,将当前的二进制日志文件关闭并创建一个新的二进制日志文件。这个命令可以用于手动控制二进制日志文件的大小和数量,以及在备份二进制日志文件时使用。
flush logs;

查看二进制日志例:

mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> delete from city;
Query OK, 4079 rows affected (0.13 sec)

mysql> show binary logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000037 |       201 | No        |
| binlog.000038 |       201 | No        |
| binlog.000039 |       201 | No        |
| binlog.000040 |       201 | No        |
| binlog.000041 |    134688 | No        |
+---------------+-----------+-----------+
5 rows in set (0.00 sec)

mysql> show binlog events in 'binlog.000041';
+---------------+--------+----------------+-----------+-------------+----------------------------------------------------+
| Log_name      | Pos    | Event_type     | Server_id | End_log_pos | Info                                               |
+---------------+--------+----------------+-----------+-------------+----------------------------------------------------+
| binlog.000041 |      4 | Format_desc    |         1 |         126 | Server ver: 8.0.33-0ubuntu0.22.04.2, Binlog ver: 4 |
| binlog.000041 |    126 | Previous_gtids |         1 |         157 |                                                    |
| binlog.000041 |    157 | Anonymous_Gtid |         1 |         237 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'               |
| binlog.000041 |    237 | Query          |         1 |         313 | BEGIN                                              |
| binlog.000041 |    313 | Table_map      |         1 |         379 | table_id: 92 (world.city)                          |
| binlog.000041 |    379 | Delete_rows    |         1 |        8580 | table_id: 92                                       |
| binlog.000041 |   8580 | Delete_rows    |         1 |       16762 | table_id: 92                                       |
| binlog.000041 |  16762 | Delete_rows    |         1 |       24977 | table_id: 92                                       |
| binlog.000041 |  24977 | Delete_rows    |         1 |       33192 | table_id: 92                                       |
| binlog.000041 |  33192 | Delete_rows    |         1 |       41377 | table_id: 92                                       |
| binlog.000041 |  41377 | Delete_rows    |         1 |       49584 | table_id: 92                                       |
| binlog.000041 |  49584 | Delete_rows    |         1 |       57796 | table_id: 92                                       |
| binlog.000041 |  57796 | Delete_rows    |         1 |       66005 | table_id: 92                                       |
| binlog.000041 |  66005 | Delete_rows    |         1 |       74215 | table_id: 92                                       |
| binlog.000041 |  74215 | Delete_rows    |         1 |       82422 | table_id: 92                                       |
| binlog.000041 |  82422 | Delete_rows    |         1 |       90629 | table_id: 92                                       |
| binlog.000041 |  90629 | Delete_rows    |         1 |       98819 | table_id: 92                                       |
| binlog.000041 |  98819 | Delete_rows    |         1 |      107031 | table_id: 92                                       |
| binlog.000041 | 107031 | Delete_rows    |         1 |      115242 | table_id: 92                                       |
| binlog.000041 | 115242 | Delete_rows    |         1 |      123443 | table_id: 92                                       |
| binlog.000041 | 123443 | Delete_rows    |         1 |      131632 | table_id: 92                                       |
| binlog.000041 | 131632 | Delete_rows    |         1 |      134657 | table_id: 92 flags: STMT_END_F                     |
| binlog.000041 | 134657 | Xid            |         1 |      134688 | COMMIT /* xid=94 */                                |
+---------------+--------+----------------+-----------+-------------+----------------------------------------------------+
23 rows in set (0.00 sec)

mysql>
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000041 |   134688 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000042 |      157 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

例题1:日志文件binary log

Choose the best answer. 
You want to log only the changes made to the database objects and data on the MySQL system. 
Which log will do this by default?

A) slow query log
B) binary log
C) error log
D) general query log
E) audit log

例题1 解析

Answser:B
MySQL的二进制日志(Binary log)是一种记录所有对MySQL数据库进行修改的操作的日志文件。

参考

5.4 MySQL Server Logs
https://dev.mysql.com/doc/refman/8.0/en/server-logs.html

17.1.6.4 Binary Logging Options and Variables
https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html文章来源地址https://www.toymoban.com/news/detail-600440.html

到了这里,关于MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点1:二进制日志文件(Binary log)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 让ChatGPT做一下MySQL 8.0 OCP(1Z0-908)的真题,我松了一口气

    MySQL OCP分成中文和英文两种,Oracle OCP只有英文考试,这里我们用MySQL 8.0 OCP(1Z0-908)的中文真题测试一下ChatGPT,看看ChatGPT能否获得MySQL OCP的认证,用这种方法判断ChatGPT会不会代替我们人类DBA的工作。 1报告在MySQL服务器上运行的所有当前连接,ChatGPT准确地列出了3个: SELECT

    2024年02月04日
    浏览(55)
  • 解析MySQL 8.0 OCP(1Z0-908)考试中一道大部分同学都会做错的题目(文末附录像)

    一个用户有下面的权限: jsmith可以执行哪两条SQL语句? A)UPDATE world.country SET Name=\\\'all; B)UPDATE world.Country SET Name=‘new’ WHERE Name=\\\'old; C)UPDATE world.country SET Name=‘one’ LIMIT1; D)UPDATE world.country SET Name=‘first’ ORDER BY Name LIMIT 1; E)UPDATE world.country SET Name=CONCAT(‘New’,Name); 我们看到这

    2024年02月08日
    浏览(44)
  • MySQL主从复制基于二进制日志的高可用架构指南

    在现代数据库架构中,MySQL主从复制技术扮演着重要角色。它不仅可以提升数据库性能和可扩展性,还赋予系统卓越的高可用性和灾难恢复能力。本文将深入剖析MySQL主从复制的内部机制,同时通过一个实际案例,展示其在实际场景中的强大作用。 MySQL主从复制基于二进制日志

    2024年02月13日
    浏览(58)
  • 银河麒麟V10 SP3 X86 二进制文件部署 mysql-5.7.29 GTID 半同步复制的双主架构

    麒麟镜像可以去下面的地方下载,需要自己注册一个账号 麒麟软件生态 Mysql 二进制文件下载地址 老生常谈的问题(这些问题都会影响部署的排查) 关掉 firewalld 关掉 selinux (银河麒麟默认会关闭 selinux) 我下载的海光 x86 版本的麒麟 mysql 的 AB 复制和 gtid 复制的优缺点 抄自

    2024年02月13日
    浏览(56)
  • 开源数据库MySQL 8.0 OCP认证精讲视频、环境和题库 之二

    修改用户的初始密码: mysqlalteruserroot@localhostidentifiedby\\\'Qaz1234; 或者: mysqlalteruseruser0identifiedby\\\'Qaz_1234\\\'; 在版本5.x中: mysqlsetpassword=password(Qaz_1234\\\'); 可执行文件: 服务器端:mysgld多线程 客户端:mysqlmysqladminmysqldumpmysqlbackup mysqlshowdatabases; mysqlselectdatabaseO; mysqlselectuser0; mysqlcrea

    2024年02月08日
    浏览(57)
  • CentOS配置Java环境报错-bash: /usr/local/jdk1.8.0_381/bin/java: 无法执行二进制文件

    CentOS配置Java环境后执行java -version时报错: 原因是所使用的jdk的版本和Linux内核架构匹配不上 使用以下命令查看Linux架构: 可以看到是x86_64架构。 而我使用的jdk是 arm64架构下的。 因此需要首先搞清楚是x86_64架构还是arm64架构还是其他的什么架构 在这里下载对应的JDK版本 更换

    2024年02月09日
    浏览(58)
  • MySQL 8.0 OCP认证精讲视频、环境和题库之五 事务、缓存 、表空间

       缓存与事务有关的redo log ,用来对mysql进行crash恢复,不可禁用;    日志缓冲区是存储要写入磁盘上日志文件的数据的内存区域。日志缓冲区大小由innodb_Log_buffer_size变量定义。    默认大小为16MB。日志缓冲区的内容会定期刷新到磁盘。大型日志缓冲区使大型事务能够运行

    2024年02月07日
    浏览(44)
  • MySQL 8.0 OCP认证精讲视频、环境和题库之四 多实例启动 缓存、事务、脏读

        1、编辑选项文件,指定以下选项:     [mysqld]         basedir=/mysql80         datadir=/mysql80/data1         socket=/mysql80/data1/mysqld.sock         pid-file=/mysql80/data1/mysqld.pid         log-error=/mysql80/data1/mysqld.log     2、初始化         /mysql80/bin/mysqld --defaults-file=/mys

    2024年02月07日
    浏览(41)
  • Oracle 19c OCP 1z0 082考场真题解析第32题

    考试科目:1Z0-083 考试题量:85 通过分数:57% 考试时间:150min 本文为云贝教育郭一军(微信:guoyJoe)原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。【云贝教育】Oracle 19c OCP 083题库解析(32) - 课程体系 - 云贝教育 32 、Which two are tru

    2024年01月23日
    浏览(44)
  • Oracle数据库19c OCP 1z0-082考场真题解析第24题

    考试科目:1Z0-082 考试题量:90 通过分数:60% 考试时间:150min 本文为云贝教育郭一军guoyJoe原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。【云贝教育】Oracle 19c OCP 082题库解析(24) - 课程体系 - 云贝教育 24.Which three statements are true reg

    2024年01月18日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包