mysql binlog日志说明及设置

1. 什么是 binlog?

mysql-binlog是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句((除了数据查询语句)信息。
可以使用mysqlbin命令查看二进制日志的内容。

MySQL分为两大部分。上层是MySQL-Server,下层是可插拔的存储引擎

image.png

2. binlog使用说明

2.1 查看binlog位置

binlog存放的位置由datadir参数控制
执行下面的查询语句即可:

mysql> show variables like '%datadir%';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| datadir       | /usr/local/mysql/data/ |
+---------------+------------------------+
1 row in set (0.00 sec)

目录下有两种文件:binlog.0000XXbinlog.index

image.png

  • binlog.0000XX : 保存着对MySQL更改的逻辑
  • binlog.index : 就是位置索引,后续备份恢复使用
    image.png

2.2 查看binlog是否已开启

mysql> show variables like 'log_%'; 
+----------------------------------------+----------------------------------------+
| Variable_name                          | Value                                  |
+----------------------------------------+----------------------------------------+
| log_bin                                | ON                                     |
| log_bin_basename                       | /usr/local/mysql/data/binlog           |
| log_bin_index                          | /usr/local/mysql/data/binlog.index     |
| log_bin_trust_function_creators        | OFF                                    |
| log_bin_use_v1_row_events              | OFF                                    |
| log_error                              | ./error.log                            |
| log_error_services                     | log_filter_internal; log_sink_internal |
| log_error_verbosity                    | 2                                      |
| log_output                             | FILE                                   |
| log_queries_not_using_indexes          | OFF                                    |
| log_slave_updates                      | ON                                     |
| log_slow_admin_statements              | OFF                                    |
| log_slow_slave_statements              | OFF                                    |
| log_statements_unsafe_for_binlog       | ON                                     |
| log_syslog                             | ON                                     |
| log_syslog_facility                    | daemon                                 |
| log_syslog_include_pid                 | ON                                     |
| log_syslog_tag                         |                                        |
| log_throttle_queries_not_using_indexes | 0                                      |
| log_timestamps                         | UTC                                    |
+----------------------------------------+----------------------------------------+
20 rows in set (0.01 sec)

mysql> 

2.3 查看binlog日志内容

mysql> show binlog events;   #只查看第一个binlog文件的内容
mysql> show binlog events in 'binlog.000002';  #查看指定binlog文件的内容
mysql> show binary logs;  #获取binlog文件列表
mysql> show master status; #查看当前正在写入的binlog文件

binlog相关配置(仅供参考)

一般关于binlog的配置都写在MySQL的配置文件中: my.cnf , 以方便启动mysql时直接让这些配置生效

[mysqld]
# binlog相关配置
# 指定binlog日志存储的位置
datadir = /home/mysql/mysql/var
# 规范binlog的命名为 mysql-bin.0000XX
# 【开启binlog】加这行配置,binlog文件名为主机名
log-bin = mysql-bin
# 索引当前所有的binlog
log-bin-index = mysql-bin.index
# 最大的大小
max_binlog_size = 1G
# binlog的sync时机
sync-binlog = 1
# binlog的格式
binlog-format  = ROW
# 保留七天的binlog
expire_logs_days = 7

binlog 有啥用?

  • binlog中记录的是偏向逻辑层面的记录:如:对xxx表中的id=yyy的行做做了什么修改,更改后的值是什么。
  • binlog不会记录你的 select 、show这类的操作。
  • 你可以在query log中找到曾经执行过的诸如select、show这种仅查询的SQL。

常见的binlog有如下的作用

  1. delete没加where条件?不慌!binlog可以帮你恢复数据
  2. 搭建一套一主两从的MySQL集群,binlog帮你完成主从的数据同步。
  3. 审计,通过分析binlog可以排查是否存在SQL注入攻击。

常见的binlog操作指令

# 是否启用binlog日志
show variables like 'log_bin';
# 查看详细的日志配置信息
show global variables like '%log%';
# mysql数据存储目录
show variables like '%dir%';
# 查看binlog的目录
show global variables like "%log_bin%";
# 查看当前服务器使用的biglog文件及大小
show binary logs;
# 查看主服务器使用的biglog文件及大小
# 查看最新一个binlog日志文件名称和Position
show master status;
# 事件查询命令
# IN 'log_name' :指定要查询的binlog文件名(不指定就是第一个binlog文件)
# FROM pos :指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
# LIMIT [offset,] :偏移量(不指定就是0)
# row_count :查询总条数(不指定就是所有行)
show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
# 查看 binlog 内容
show binlog events;
# 查看具体一个binlog文件的内容 (in 后面为binlog的文件名)
show binlog events in 'master.000003';
# 设置binlog文件保存事件,过期删除,单位天
set global expire_log_days=3; 
# 删除当前的binlog文件
reset master; 
# 删除slave的中继日志
reset slave;
# 删除指定日期前的日志索引中binlog日志文件
purge master logs before '2019-03-09 14:00:00';
# 删除指定日志文件
purge master logs to 'master.000003';
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容