Mysql因“Binary logging not possible,Can‘t generate a unique log-filename binlog.”原因崩溃后无法启动的解决办法剖析

某一天上班,打开网站,直接显示“Error establishing a database connection”。网站用的是wordpress模板开发的。我进入服务器linux后台,直接重启mysql,发现报错,无法启动mysql。我一下子懵了,咋回事呢???

第一想法,去找mysql的错误日志,看看错误原因。如果不知道mysql的错误日志在哪里,可以这样尝试找出:

1.找出错误日志

先去找mysql的配置文件,在配置文件中找错误日志的路径。那么,mysql的配置文件在哪里呢?首先,登录shell,通过“sudo su”切换到root权限,然后输入命令

whereis mysql

找出mysql的所有目录,例如:

然后进去每个目录看看配置文件在哪里。如果和我的系统(ubuntu 20)一样的,应该都在“/etc/mysql”这个目录里。

通过“cd /etc/mysql”和“ls”命令,查看“/etc/mysql”目录的所有文件

在通过“cd mysql.conf.d”进去“mysql.conf.d”目录下,看到“mysqld.cnf”就是mysql的配置文件了。

 通过“vi mysqld.cnf”,打开配置文件,找到错误日志的路径“/var/log/mysql/error.log”。

 2.找出mysql崩溃的原因

通过“cd /var/log/mysql”切换到错误日志目录,通过“ls”查看此目录下的所有文件。

 

通过“vi error.log.1”打开error.log.1查看日志(error.log经过查看为空,所以打开error.log.1)

 2022-04-24T16:00:03.585496Z 190066 [ERROR] [MY-010187] [Server] Could not open file '/var/log/mysql/error.log' for error logging: Permission denied
2022-04-24T16:00:03.596064Z 190066 [ERROR] [MY-010905] [Server] Can't generate a unique log-filename binlog.(1-999).
2022-04-24T16:00:03.598603Z 190066 [ERROR] [MY-011072] [Server] Binary logging not possible. Message: Can't generate a unique log-filename binlog.(1-999), while rotating the binlog. Aborting the server.
16:00:03 UTC - mysqld got signal 6 ;
Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware.
Thread pointer: 0x7fd7f102cff0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 7fd81c6afd90 thread_stack 0x46000
/usr/sbin/mysqld(my_print_stacktrace(unsigned char const*, unsigned long)+0x41) [0x56452a1c6711]
/usr/sbin/mysqld(handle_fatal_signal+0x31b) [0x564528e9d5bb]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x153c0) [0x7fd8336c23c0]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb) [0x7fd832d2018b]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x12b) [0x7fd832cff859]
/usr/sbin/mysqld(+0xee758e) [0x564528b6458e]
/usr/sbin/mysqld(MYSQL_BIN_LOG::new_file_impl(bool, Format_description_log_event*)+0x6b0) [0x564529de7ca0]
/usr/sbin/mysqld(MYSQL_BIN_LOG::rotate(bool, bool*)+0x39) [0x564529de8c29]
/usr/sbin/mysqld(MYSQL_BIN_LOG::rotate_and_purge(THD*, bool)+0x65) [0x564529defb45]
/usr/sbin/mysqld(handle_reload_request(THD*, unsigned long, TABLE_LIST*, int*)+0x55f) [0x564528d8b4af]
/usr/sbin/mysqld(mysql_execute_command(THD*, bool)+0x19cf) [0x564528d5629f]
/usr/sbin/mysqld(dispatch_sql_command(THD*, Parser_state*)+0x44b) [0x564528d59b0b]
/usr/sbin/mysqld(dispatch_command(THD*, COM_DATA const*, enum_server_command)+0x1ebb) [0x564528d5be5b]
/usr/sbin/mysqld(do_command(THD*)+0x1a4) [0x564528d5cb94]

 可以看到有个错误信息:“Binary logging not possible. Message: Can't generate a unique log-filename binlog.(1-999), while rotating the binlog. Aborting the server.” 

之前没有遇到过,所以一下子不知道怎么解决,在百度查了一下,没找到对应的解决办法。所以到谷歌去查。

谷歌查到有人遇到同样的问题,并且已经解决了。但是解决的代码不能照搬,因为mysql的路径不一样。所以只能参考解决的思路。按照解决思路,是因为mysql对于某个文件或者文件夹的权限问题导致的。只要解决权限的问题就可以了。附上参考的文章链接:​​​​​​MYSQL could not be started! Binary logging not possible. Cant FIX IT AT ALL! - #7 by aatm - MySQL - Bitnami Community

 那么,每个人的服务器的mysql的路径都可能不一样,怎么找出有权限问题的那个文件夹呢?

在错误日志里,有一条信息:“Could not open file '/var/log/mysql/error.log' for error logging: Permission denied”。这里的意思是:拒绝访问错误日志。把权限问题和目录都说出来了。

3.解决办法 

 所以,解决办法是把这个目录改成mysql所有,mysql就拥有它的所有权限了,代码如下:

sudo chown -R mysql:mysql /var/log/mysql

接着要启动mysql:

/etc/init.d/mysql start

如果启动成功,说明解决掉了。如果还报错,那么还需要把一下的目录的权限赋予mysql。

怎么找出这些目录呢?

第一个:在错误日志中,频繁出现“/usr/sbin/mysqld”这个目录,所以这是一个。 

 第二个:查看配置文件(配置文件在哪里,请看上面的“找出错误日志”部分),在基础设置部分有一个默认的数据的路径“# datadir       = /var/lib/mysql” ,切换到“/var/lib/mysql”下查看,发现是有好多“binlog”文件,所以这是第二个。

 找出这些目录后就把权限赋予给mysql,看代码:

sudo chown -R mysql:mysql /var/lib/mysql
sudo chown -R mysql:mysql /var/log/mysql
sudo chown -R mysql:mysql /usr/sbin/mysqld

然后启动mysql:

/etc/init.d/mysql start

启动成功后就可以了。

我就是这样解决的。

总结:

因为每个网站的服务器系统可能不一样,mysql的路径也不一样,所以我只是分享我的解决办法的经验供大家参考,实际的解决的代码要根据具体而定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值