本来今天高高兴兴,你为什么要说这种话......
问题发生描述:
昨天,闲来无事登录了mysql 数据库查看。发现 数据目录中有太多 mysql-bin.日志,六七百份。没多想,遂执行了一波
rm -rf mysql-bin.0000*
第三天过后, 想着修改一下 my.cnf 配置文件。修改 一下 max_binlog_size 日志大小参数以及 日志过期参数 expire_logs_days
max_binlog_size = 200M
expire_logs_days = 60
一顿操作猛如虎过后,满心欢喜的执行 systemctl restart mysqld
[root@test mysql]# systemctl restart mysqld
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
mmp...
于是乎 journalctl -f
-- Unit mysqld.service has begun starting up.
Jul 16 10:15:32 test mysqld[29298]: Initialization of mysqld failed: 0
Jul 16 10:15:32 test systemd[1]: mysqld.service: control process exited, code=exited status=1
Jul 16 10:15:34 test systemd[1]: Failed to start MySQL Server.
-- Subject: Unit mysqld.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mysqld.service has failed.
发现并没有得到什么有用的东西.... 于是赶紧去 tailf /var/log/mysqld.log 一波
发现,日志一直猛的刷啊刷,刷得我眼花缭乱。 看半天,貌似都是[Note] 和 [Warning] ,也没发现什么错误有效信息
心一凉... 赶紧 复制一些貌似是错误的信息,贴百度搜索一波。得到的都是些 感觉像但执行完还是不行的blog
唉... ctrl +c 中断一下。 你妹的,恰好让我中断在了 看到 [ERROR] 的地方
[Note] InnoDB: 5.7.26 started; log sequence number 367582962432
2019-07-16T02:32:23.252451Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2019-07-16T02:32:23.252723Z 0 [Note] Plugin 'FEDERATED' is disabled.
2019-07-16T02:32:23.252786Z 0 [Note] InnoDB: Buffer pool(s) load completed at 190716 10:32:23
mysqld: File './mysql-bin.000623' not found (Errcode: 2 - No such file or directory)
2019-07-16T02:32:23.258434Z 0 [ERROR] Failed to open log (file './mysql-bin.000623', errno 2)
2019-07-16T02:32:23.258441Z 0 [ERROR] Could not open log file
2019-07-16T02:32:23.258448Z 0 [ERROR] Can't init tc log
2019-07-16T02:32:23.258452Z 0 [ERROR] Aborting
原来 是binlog日志的问题。。。
解决:
不考虑丢数据的情况,可以使用下面的方法启动数据库:将mysql-bin.index 内容清空,
启动数据库,这是数据库会重置日志文件,从01开始。
正确的删除binlog的姿势:
第一种方法:
mysql> show binary logs; 查看mysql bin-log日志,除了这个以外的,其它都可以使用删除。
mysql> purge binary logs to 'binlog.000058'; (删除mysql bin-log日志,不包括binlog.000058)
第二种方法:
进入数据库,查看一下当前使用的binlog日志是哪个,除了这个以外的,其它都可以使用rm -rf 删除!
rm后最好执行下 purge 或者 更改 mysql-bin.index,不然mysql重启可能会报错
总结:
因为是删除了binlog日志隔了几天过后,一开始也能猜得到是删除了binglog而导致出的错。但无奈慌张中没有仔细找到[ERROR] 日志。 一句话, 报错还是要多仔细看log。日志一直刷的情况下,还是使用 vim 或 more、less 查看吧。少偷懒。