Gman
Gman

Reputation: 2453

Docker Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) Ubuntu

I was playing with docker and mounted my local mysql to a docker container and connected MySql-Workbench so I could view the DB (experimenting) here is the command I ran.

docker run -d --name alldb-mysql -v /var/lib/mysql:/var/lib/mysql -e MYSQL_USER=root -e MYSQL_PASSWORD=password -p 3306:3306 mysql:latest

after I stopped my container and removed it, I can't start/restart mysql (local install). when I run sudo /etc/init.d/mysql start it returns

[....] Starting mysql (via systemctl): mysql.serviceJob for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
 failed!

so I checked systemctl status mysql.service

     mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: activating (start-post) (Result: exit-code) since Mon 2017-04-03 22:26:15 IST; 26s ago
  Process: 5470 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)
  Process: 5465 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 5470 (code=exited, status=1/FAILURE);         : 5471 (mysql-systemd-s)
    Tasks: 2
   Memory: 1.6M
      CPU: 222ms
   CGroup: /system.slice/mysql.service
           └─control
             ├─5471 /bin/bash /usr/share/mysql/mysql-systemd-start post
             └─6579 sleep 1

Apr 03 22:26:15 n mysqld[5470]: 2017-04-03T21:26:15.980564Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explici
Apr 03 22:26:15 n mysqld[5470]: 2017-04-03T21:26:15.980614Z 0 [Warning] Can't create test file /var/lib/mysql/n.lower-test
Apr 03 22:26:15 n mysqld[5470]: 2017-04-03T21:26:15.980638Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.17-0ubuntu0.16.04.1) starting as process 5470 .
Apr 03 22:26:15 n mysqld[5470]: 2017-04-03T21:26:15.981928Z 0 [Warning] Can't create test file /var/lib/mysql/n.lower-test
Apr 03 22:26:15 n mysqld[5470]: 2017-04-03T21:26:15.981936Z 0 [Warning] Can't create test file /var/lib/mysql/n.lower-test
Apr 03 22:26:15 n mysqld[5470]: 2017-04-03T21:26:15.982122Z 0 [ERROR] failed to set datadir to /var/lib/mysql/
Apr 03 22:26:15 n mysqld[5470]: 2017-04-03T21:26:15.982142Z 0 [ERROR] Aborting
Apr 03 22:26:15 n mysqld[5470]: 2017-04-03T21:26:15.982162Z 0 [Note] Binlog end
Apr 03 22:26:15 n mysqld[5470]: 2017-04-03T21:26:15.982213Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
Apr 03 22:26:15 n systemd[1]: 

I also tried to login mysql with my detail: mysql -uroot -ppassword1 which returned

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' (2)

when I run the following command ls -la /var/lib/ | grep mysql on the var lib directory it returns.

drwx------ 12 root          docker        4096 Apr  3 21:17 mysql
drwx------  2 mysql         mysql         4096 Feb 23 22:35 mysql-files
drwx------  2 mysql         mysql         4096 Feb 23 22:35 mysql-keyring
drwxr-xr-x  2 root          root          4096 Jan 18 21:45 mysql-upgrade

By the looks of things I (well docker did) messed up my ownership on my mysql directory.

If I run ls -la /var/lib/mysql it returns

ls: cannot open directory '/var/lib/mysql': Permission denied

and running same command with sudo sudo ls -la /var/lib/mysql it returns

total 188480
drwx------ 12 root         docker     4096 Apr  3 21:17 .
drwxr-xr-x 80 root         root       4096 Mar 29 19:28 ..
-rw-r-----  1 guest-okauxv docker       56 Feb 23 22:35 auto.cnf
drwxr-x---  2 guest-okauxv docker     4096 Mar 24 23:51 concretepage
-rw-r--r--  1 guest-okauxv docker        0 Feb 23 22:35 debian-5.7.flag
drwxr-x---  2 guest-okauxv docker     4096 Mar 25 00:10 myfidser
drwxr-x---  2 guest-okauxv docker     4096 Mar  4 00:54 myotherFliDB
drwxr-x---  2 guest-okauxv docker     4096 Mar  1 12:33 testFFAPI
-rw-r-----  1 guest-okauxv docker      679 Apr  3 21:16 ib_buffer_pool
-rw-r-----  1 guest-okauxv docker 79691776 Apr  3 21:17 ibdata1
-rw-r-----  1 guest-okauxv docker 50331648 Apr  3 21:17 ib_logfile0
-rw-r-----  1 guest-okauxv docker 50331648 Feb 23 22:35 ib_logfile1
-rw-r-----  1 guest-okauxv docker 12582912 Apr  3 21:17 ibtmp1
drwxr-x---  2 guest-okauxv docker     4096 Feb 23 22:35 mysql
drwxr-x---  2 guest-okauxv docker     4096 Mar 25 16:58 NodeRestDB
drwxr-x---  2 guest-okauxv docker     4096 Feb 23 22:35 performance_schema
drwxr-x---  2 guest-okauxv docker    12288 Feb 23 22:35 sys
drwxr-x---  2 guest-okauxv docker     4096 Mar 29 10:34 testDB
drwxr-x---  2 guest-okauxv docker     4096 Mar  1 11:52 demoDB

By the looks of this, I (well docker did) managed to changed the owner and group of all the directories in mysql directory.

Do I need to do a complete reinstall of MySQL Server?

What is the simplest, easiest way to fix this?

your help will be much appreciated.

Updated with FIX

Just what Andy Shinn said in point one, I just ran sudo chown -R mysql:mysql /var/lib/mysql to change the owner back and started mysql by running sudo /etc/init.d/mysql start and mysql returned

[ ok ]Starting mysql (via systemctl): mysql.service.

G

Upvotes: 1

Views: 19465

Answers (1)

Andy Shinn
Andy Shinn

Reputation: 28483

Some more information will be needed. But two things come to mind.

  1. It is likely the permission issue. Based on your output, why don't you first just try changing the owner and group back to mysql? This should be a simple sudo chown -R mysql:mysql /var/lib/mysql.
  2. It is possible that running mysql:latest image is a different version of MySQL that you were running locally and it could have upgraded the MySQL data to newer formats which may be incompatible with older versions. Check that the version of MySQL you were running locally is the same that the mysql:latest image tag points to (at least the same minor version eg. 5.6 and 5.6).

What version is mysql:latest and what version were you running locally? Do you have any log output from the MySQL container that you started?

Upvotes: 9

Related Questions