Mysql与docker:Can';t通过套接字连接到本地MySQL服务器
我无法在Docker容器中再使用MySQL:Mysql与docker:Can';t通过套接字连接到本地MySQL服务器,mysql,sockets,docker,process,Mysql,Sockets,Docker,Process,我无法在Docker容器中再使用MySQL: root@mysql-container:/# mysql -uroot -proot mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (
root@mysql-container:/# mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)
mysqld正在运行:
root@mysql-spirit-ssl:/etc/mysql/conf.d# /etc/init.d/mysql start
[info] A MySQL Server is already started.
root@mysql-container:/# ps -eax
PID TTY STAT TIME COMMAND
1 ? Ssl 0:01 mysqld
尝试停止mysqld超时:
root@mysql-container:/# /etc/init.d/mysql stop
............................................................[info] Attempt to shutdown MySQL Community Server 5.7.17 timed out.
因此,我尝试开始使用mysqladmin方式:
root@mysql-container:/# /usr/bin/mysqladmin --port=8889 -u root shutdown
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)'
所以我检查了MySQL守护程序是否正在运行:
root@mysql-spirit-ssl:/etc/mysql/conf.d# /etc/init.d/mysql start
[info] A MySQL Server is already started.
root@mysql-container:/# ps -eax
PID TTY STAT TIME COMMAND
1 ? Ssl 0:01 mysqld
这个套接字存在:
root@mysql-container:/# ls -l /var/run/mysqld/mysqld.sock
-rwxrwxrwx. 1 mysql mysql 0 Jan 4 10:12 /var/run/mysqld/mysqld.sock
我已经试过:
- 重新启动我的Docker容器
- 注释my.cnf中的绑定地址并重新启动Docker容器
- kill mysqld进程=>不工作,进程仍由
ps-eax列出
- 重新创建我的Docker容器
- 重新启动Docker
- 重新启动服务器
- 删除pid和sock文件,以及
/etc/init.d/mysql start
/var/log/mysql/error.log的结果:
2018-02-27T15:27:35.966028Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
2018-02-27T15:27:35.966061Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files.
但是,我无法使用pkill mysqld
、kill-9 1
或initctl--system stop mysql
终止该mysqld进程
这可能与Docker有关吗?备注:MySQL守护程序无法终止,因为它属于Docker用户systemd+,并且是容器的入口点。实际上,mysqld是一个PID为1的进程。这意味着只需重新启动Docker容器就可以重新启动MySQL守护进程,并且MySQL配置可以在两者之间进行修改
我在MySQL日志tail-f/var/log/MySQL/error.log
中注意到,由于在内部日志扫描期间检测到异常,在守护程序启动时触发了数据恢复:数据库未正确关闭。但是,恢复无法修复数据,因此执行了故意崩溃。因此,容器被重新启动,等等。这个无限循环阻止了mysqld启动和客户端mysql使用的套接字
1) 此/etc/mysql/conf.d/my.cnf
配置允许跳过恢复:
[mysqld]
innodb_force_recovery=4
使用mysql客户端和套接字转储重要模式和/或删除损坏的模式。
完成后,不要忘记从my.cnf中删除此行强>
2) 执行mysql升级和修复也可能是有益的:
docker exec -it mysql-container mysql_upgrade -u root -p --force
mysqlcheck -u root -p --auto-repair --check --all-databases
执行此步骤后,需要重新启动Docker容器
3) 此外,删除MySQL内部日志(已扫描并触发恢复)也是必要的:
cd /var/lib/mysql/mysql/
rm ibdata1 ib_logfile0 ib_logfile1
现在我可以在容器内外再次使用MySQL了。我的情况非常相似,删除ib*
文件也有帮助。我有一个mysql
进程在主机上以root
身份运行,不过我可能也必须杀死它。