Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql与docker:Can';t通过套接字连接到本地MySQL服务器_Mysql_Sockets_Docker_Process - Fatal编程技术网

Mysql与docker:Can';t通过套接字连接到本地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' (

我无法在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' (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
cat
/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
身份运行,不过我可能也必须杀死它。