mysql开启二进制日志报错

数据库已经运行了相当长的时间后,当mysql开启二进制日志时,数据库启动报错如下:

2021-11-23 02:26:02 1 [Note] InnoDB: 128 rollback segment(s) are active.
2021-11-23 02:26:02 1 [Note] InnoDB: Waiting for purge to start
2021-11-23 02:26:02 1 [Note] InnoDB: 5.6.50 started; log sequence number 42718185550
mysqld: File '/var/lib/mysql/mysql-bin.000001' not found (Errcode: 2 - No such file or directory)
2021-11-23 02:26:02 1 [ERROR] Failed to open log (file '/var/lib/mysql/mysql-bin.000001', errno 2)
2021-11-23 02:26:02 1 [ERROR] Could not open log file
2021-11-23 02:26:02 1 [ERROR] Can't init tc log
2021-11-23 02:26:02 1 [ERROR] Aborting

mysql开启二进制的配置如下:

expire_logs_days=30
log-bin=/var/lib/mysql/mysql-bin
max_binlog_size=1G
binlog_format=row
binlog_row_image=full

核对的目录权限,发现没什么问题,最终查看mysql-bin.index

# cat  mysql-bin.index 
./mysql-bin.000001

注:
log-bin=mysql-bin这样配置一样会报上述错误

结论:因为这个文件导致的mysql开启二进制日志时mysql的启动报错。

 

处理办法:将mysql-bin.index清空,重启mysql即可,启动后查看

# cat mysql-bin.index 
/var/lib/mysql/mysql-bin.000001

 

 

讨论:mysql-bin.index具体是什么?有什么作用呢?

mysql-bin.index文件记录了binlog文件的具体路径,在mysql启动时,会找到mysql-bin.index文件,然后读取它里面的条目,从而读取binlog文件。

1.binlog文件的路径可以是相对路径,也可以是绝对路径

2.当mysql启动时找不到*.index文件记录的文件时,mysql启动就会报错上述错误。

3.binlog文件的路径的配置路径

log-bin=/var/lib/mysql/mysql-bin

 

其中参数log-bin的作用:

1.表示mysql数据库开启binlog功能

2.设置binlog.index文件名

3.设置binlog的文件名

> show variables like '%log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |
| log_bin_basename                |       |
| log_bin_index                   |       |
| log_bin_trust_function_creators | OFF   |
| log_bin_use_v1_row_events       | OFF   |
| sql_log_bin                     | ON    |
+---------------------------------+-------+

 

binlog文件的读取:

MySQL在启动时会读取data目录下的所有以.index后缀的文件(默认值),然后在读取每个index文件中的条目。

 

posted @ 2021-11-23 10:36  kuzane  阅读(71)  评论(0)    收藏  举报