MySQL mysql-bin not found (Errcode: 2 - No such file or directory)

开发说一台MySQL连不上,需要修复下。

  1. 先查看MySQL日志
# 看下MySQL状态,找下MySQL的日志,这里有一个大坑,一定要注意:
# 看似MySQL没有启动,但这里一定不要着急启动!注意到这个service是被disabled掉的!
root@dvmysql01 data]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

Jan 17 16:18:17 dvmysql01 systemd[1]: Unit mysqld.service entered failed state.
Jan 17 16:18:17 dvmysql01 systemd[1]: mysqld.service failed.
Jan 17 16:19:31 dvmysql01 systemd[1]: Starting MySQL Server...
Jan 17 16:19:35 dvmysql01 systemd[1]: Started MySQL Server.
Jan 17 16:20:36 dvmysql01 systemd[1]: Stopping MySQL Server...
Jan 17 16:20:38 dvmysql01 systemd[1]: Stopped MySQL Server.
Jan 17 16:26:39 dvmysql01 systemd[1]: Starting MySQL Server...
Jan 17 16:26:41 dvmysql01 systemd[1]: Started MySQL Server.
Jan 17 16:27:16 dvmysql01 systemd[1]: Stopping MySQL Server...
Jan 17 16:27:20 dvmysql01 systemd[1]: Stopped MySQL Server.
# 查看后发现是很标准的本机rpm安装,查看对应的配置文件,居然没有!
[root@dvmysql01 data]# cat /etc/my.cnf
#
# The Percona Server 5.7 configuration file.
#
#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#   Please make any edits and changes to the appropriate sectional files
#   included below.
#
!includedir /etc/my.cnf.d/
!includedir /etc/percona-server.conf.d/
[root@dvmysql01 data]# cat /etc/percona-server.conf.d/mysqld.cnf
cat: /etc/percona-server.conf.d/mysqld.cnf: No such file or directory
# MySQL除了本机rpm安装外,现在也是可以被各种容器支撑,所以这里看下机器的容器
# 果然发现docker里也有一个MySQL!
[root@dvmysql01 data]# docker ps -a
CONTAINER ID   IMAGE                                              COMMAND                  CREATED        STATUS          PORTS                                       NAMES
ef022073837b   mysql_5.7:20230117   "/docker-entrypoint.…"   41 hours ago 
# 看下这个容器的配置,发现对应的配置文件
[root@dvmysql01 data]# docker inspect MySQL_3306
...
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/mysql/3306/data",
                "Destination": "/var/lib/mysql",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/home/mysql/3306/backup",
                "Destination": "/home/mysql_bak",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/home/mysql/3306/imgs",
                "Destination": "/home/imgs",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/home/mysql/3306/etc/my.cnf",
                "Destination": "/etc/my.cnf",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
...
[root@dvmysql01 data]# cat /home/mysql/3306/etc/my.cnf
...
log-error=/var/lib/mysql/mysql_log.log
...
# 这里要对路径按照docker的bind进行一下转换
# /var/lib/mysql = /home/mysql/3306/data
[root@dvmysql01 data]# vi /home/mysql/3306/data/mysql_log.log
...
2023-01-19T00:00:38.470634Z 0 [Note] InnoDB: Buffer pool(s) load completed at 230119  8:00:38
mysqld: File '/home/mysql/3306/data/mysql-bin.000002' not found (Errcode: 2 - No such file or directory)
2023-01-19T00:00:38.475864Z 0 [ERROR] Failed to open log (file '/home/mysql/3306/data/mysql-bin.000002', errno 2)
2023-01-19T00:00:38.475873Z 0 [ERROR] Could not open log file
2023-01-19T00:00:38.475882Z 0 [ERROR] Can't init tc log
2023-01-19T00:00:38.475888Z 0 [ERROR] Aborting
...
  1. 发现问题所在:MySQL启动时找不到对应的binlog,所以无法启动。
# 直接查看到这个报错binlog文件,文件存在,并且对应的权限也可以
[root@dvmysql01 data]# ls -lh /home/mysql/3306/data/mysql-bin.000002
-rwxrwxr-x 1 polkitd input 887K Jan 17 16:27 /home/mysql/3306/data/mysql-bin.000002
# 可是docker内的路径不应为外部宿主机的路径!按理说这个报错日志应该是docker内部的路径才对。所以这个路径指错了,但配置文件内没有定义log-bin路径!
# 去看一下对应的 mysql-bin.index 文件内容,果然直接指到了宿主机的路径:
[root@dvmysql01 data]# cat mysql-bin.index
/home/mysql/3306/data/mysql-bin.000001
/home/mysql/3306/data/mysql-bin.000002

  1. 解决问题
# 分析原因:
## 这台机器安装了多个MySQL:rpm安装、容器安装
## 可能是先使用宿主机安装的MySQL,用了一段时间,然后迁移至容器内运行。
## 这时因为某种原因重启了Server,某个开发不了解情况直接用systemctl start mysqld而没有用docker启动MYSQL
## 发现没起来,就修改了/etc/percona-server.conf.d/mysqld.cnf这个文件,发现改了几次也不行,就删掉这个文件毁尸灭迹~ 让运维来解决问题~
## 修改mysql-bin.index为容器内路径,使用docker启动
[root@dvmysql01 data]# cat mysql-bin.index
/var/lib/mysql/mysql-bin.000001
/var/lib/mysql/mysql-bin.000002
[root@dvmysql01 data]# docker start MySQL_3306
# 问题解决,一切归于平静
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值