mysql5.7开启binlog,及binlog基本介绍

2022-10-07 10:45:45

二进制日志binlog,用于记录对mysql数据库真正执行更改的所有操作。

一, 说说binlog的主要作用:

*主从复制,master把所有修改数据的操作记录到binlog中,通过网络发送到slave,实现主从同步复制。
*mysqlbinlog命令实现时间点或位置的恢复操作
*审计

二, 如何开启binlog?
my.cnf文件添加如下参数
server_id=2 #mysql5.7版本开启binlog强制需要添加该参数
log_bin = mysql-bin #表示开启binlog并指定binglog文件名
binlog_format = ROW #默认
expire_logs_days = 7 #binlog保留天数

重启mysql
service mysqld restart

mysql> show global variables like ‘%log_bin%’;
±--------------------------------±--------------------------------------+
| Variable_name | Value |
±--------------------------------±--------------------------------------+
| log_bin | ON |
| log_bin_basename | /usr/local/mysql/data/mysql-bin |
| log_bin_index | /usr/local/mysql/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
±--------------------------------±--------------------------------------+
5 rows in set (0.01 sec)

证明mysql已经开启binglog。

同时/usr/local/mysql/data目录下可以看到生成的binlog:

-rw-r-----. 1 mysql mysql 177 2月 9 09:45 mysql-bin.000001
-rw-r-----. 1 mysql mysql 76 2月 9 10:22 mysql-bin.index

三, 关于binlog的基本操作

1,查看配置binlog的大小:
show variables like ‘max_binlog_size’;
±----------------±-----------+
| Variable_name | Value |
±----------------±-----------+
| max_binlog_size | 1073741824 |
±----------------±-----------+
1 row in set (0.00 sec)
默认binlog大小1G,大的binlog容易造成延迟。生成目前配置100M。
一个binlog写满会切到下一个binlog,尾号加一,如果重启也会切到下一个binlog,

2,查看当前有哪些binlog:
(1)mysql> show binary logs;
±-----------------±----------+
| Log_name | File_size |
±-----------------±----------+
| mysql-bin.000001 | 177 |
| mysql-bin.000002 | 177 |
| mysql-bin.000003 | 177 |
| mysql-bin.000004 | 154 |
±-----------------±----------+
4 rows in set (0.00 sec)

(2)mysql> show master logs;
±-----------------±----------+
| Log_name | File_size |
±-----------------±----------+
| mysql-bin.000001 | 177 |
| mysql-bin.000002 | 177 |
| mysql-bin.000003 | 177 |
| mysql-bin.000004 | 154 |
±-----------------±----------+
4 rows in set (0.00 sec)

3,查看mysql当前日志及状态:
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000004
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

4,binlog_cache_size

mysql> show global variables like ‘binlog_cache_size’;
±------------------±------+
| Variable_name | Value |
±------------------±------+
| binlog_cache_size | 32768 |#生产采用默认配置
±------------------±------+
1 row in set (0.00 sec)
未提交的事物会记录到一个缓存中,等待事物提交时,直接将缓存中的binlog写入binlog文件。
可以看到默认32k,由于该参数基于session的,每个线程分配一个cache,所以不建议配置太大,
有的文档建议配置2~4M。

判断cache大小是否合适:

show global status like ‘binlog_cache%’;
±----------------------±------+
| Variable_name | Value |
±----------------------±------+
| Binlog_cache_disk_use | 2378 |
| Binlog_cache_use |67238923|
±----------------------±------+
2 rows in set (0.01 sec)
看别的文档分析说如果Binlog_cache_disk_use/Binlog_cache_use 小于1/64,就说明cache够用。

  • 作者:z毛毛虫_cc
  • 原文链接:https://blog.csdn.net/weixin_40524659/article/details/104532653
    更新时间:2022-10-07 10:45:45