_NNN_
@_NNN_ (hehe hehe)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2) と出てmysqlに接続できない

内容

docker-compose exec db mysql -u root -p コマンドでmysqlに接続ができない

実行環境

・windows10
・docker
・mysql Ver 15.1 Distrib 10.5.12-MariaDB
・debian11
・Python 3.8.2

エラー内容

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)

各種ディレクトリ構成、内容

.
├── Dockerfile
├── docker-compose.yml
├── mysql
│   ├── Dockerfile
│   ├── my.cnf
│   └── sqls
│   │   └── initialize.sql
│   └──mysql-data
├── src
│   ├── __init__.py
│   ├── sample.py
│   └── Dockerfile
├── docker-compose.yml
├── README.md
└── requirements.txt
docker-compose.yml
version: '3'
services:
#database container
  db:
    image: mysql:5.7
    ports:
      - 3306:3306
    expose:
      - '3306'
    restart: always
    container_name: python-db
    build: ./mysql/
    volumes:
      - ./mysql/mysql_data:/var/lib/mysql
      - ./mysql/sqls:/docker-entrypoint-initdb.d
      - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    environment:
      #userパスワード
      - MYSQL_DATABASE=test_database
      - MYSQL_USER=user
      - MYSQL_PASSWORD=docker
      - TZ=Asia/Tokyo
      #rootパスワード
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
      - MYSQL_RANDOM_ROOT_PASSWORD=no
    stdin_open: true

  #application container
  python3:
    ports:
      - "8000:80"
    container_name: python3
    build:
      context: ./src/
    links:
      - db
    stdin_open: true
##データベース
FROM mysql:5.7
# EXPOSE 3306
RUN touch /var/log/mysql/mysqld.log
RUN touch /run/mysqld/mysql.sock

ADD  ./mysql/my.cnf /etc/mysql/conf.d/my.cnf
RUN chmod 644 /etc/mysql/my.cnf
CMD ["mysqld"]

##アプリケーション本体
FROM python:3.6

ARG project_dir= /src

WORKDIR $project_dir

RUN apt-get update
RUN apt-get -y install locales && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

RUN apt-get install -y vim less
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

RUN python -m pip install jupyterlab
my.conf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[mysql]
default-character-set=utf8

[client]
default-character-set=utf8mb4
user = docker
password = docker

試したこと

docker exec -it python-db shでコンテナに入りmysql_config --socketmysqld.sockがあることは確認済み

ps ax | grep mysqlでプロセスを確認してみた所 19608 pts/1 S+ 0:00 grep mysqlとありおそらくmysqlがうまく起動?できてないみたいです。

root@コンテナid:/# ls -l /run/
合計 8
drwxrwxrwt 2 root root 4096 12月 20 09:00 lock
drwxrwxrwx 2 root root 4096  2月 16 18:32 mysqld
-rw-rw-r-- 1 root utmp    0 12月 20 09:00 utmp
root@コンテナid:/# ls -l /run/mysqld/
合計 0
-rwxrwxrwx 1 root root 0  2月 16 18:32 mysqld.sock
root@コンテナid:/# ls -l /run/mysqld/mysqld.sock
-rwxrwxrwx 1 root root 0  2月 16 18:32 /run/mysqld/mysqld.sock
0

1Answer

はじめまして。

下記コマンドにて作成されているのは「mysql.sock」であるように見受けられます。


##データベース
RUN touch /run/mysqld/mysql.sock

logファイルは「mysqld.log」ですが、sockファイルはこちらで正しいのでしょうか。
一度mysqld.sockでお試しいただくのはいかがでしょうか。

また、こちらでうまくいかない場合は、エラー内容としては「/run/mysqld/mysqld.sockを通してMySQLに接続できない」という旨ですので、/run/mysqld/mysqld.sock の権限周りをご確認いただくとよいかもしれません。

0Like

Comments

  1. @_NNN_

    Questioner

    mysqld.sockに変更後し「docker-compose down」してもう一度buildした後に、試しても同じエラーでした。

    「ls -l /run/musqld/mysqld.sock」でファイルがあるか確認してみた所、「ls: cannot access '/run/mysqld/mysqld.sock': No such file or directory」という風にでてきてファイルが作成されてないらしかったので、touchで作成してみようと思ったところうえきとおなじエラーで作成できませんでした。

    次にディレクトリにファイル権限?などでアクセスできないと思い変更しようと思いましたがこちらもうまくいかなかったです。
  2. 「touch /run/mysqld/mysqld.sock」でファイルを作成できなかったということでしょうか。
    それならば、「/run/mysqld/」のディレクトリがそもそも存在するのか確認してください。
    また、存在している場合は、その権限をご確認ください。
  3. @_NNN_

    Questioner

    「docker-compose build」した後には「/run/mysqld/mysqld.sock」が確認できず下記の手順で自分で作成しました。

    まず「touch /run/mysqld/mysqld.sock」でファイルを作成できませんでしたので、試しに「mkdir run/mysqld」でディレクトリを作成後に「touch run/mysqld/mysqld.sock」で作成することができ、「ls -l /run/mysqld/mysqld.sock」で確認してみた所、「-rwxrwxrwx 1 root root 0 2月 16 18:32 /run/mysqld/mysqld.sock」と表示され、その後にコンテナに入り「mysql -u root」で接続してみようと思ったところ、「ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (111)」と表示されました。

  4. 下記2点をお試しいただくのはいかがでしょうか。

    ・MySQL自体の再起動(例:service mysql restart)
    ・/run/や/run/mysqld/のディレクトリ自体の権限確認

    権限を確認する際はファイルはもちろんですが、ディレクトリ自体を確認し適切に設定する必要がある場合があります。
  5. @_NNN_

    Questioner

    一度「docker-compose down」でコンテナごと削除し、もう一度buildしてみましたが変化はありませんでした。

    次に「/run/」「/run/mysqld/」「/run/mysqld/mysqld.sock」全部の権限を確認してみましたがこちらも特に問題なしで変化はありませんでした・・・

    本記事にて各種権限確認時の表示を追記します
  6. そもそもで、MySQLの起動はしておりますでしょうか。
    mysql -u [user] -p のコマンドはMySQLへの接続(ログイン)であって、接続の前にMySQLの起動をしていなくてはなりません。

    下記URLを参考に起動/確認をしてみてください。
    https://qiita.com/pugiemonn/items/b17288494e4b627f4475
  7. @_NNN_

    Questioner

    すでにdocker-compose.ymlにてmysql5.7のイメージを指定して「docker ps」でコンテナが立ち上がってるのも確認済みです。

    おそらく何かしらの設定が間違ってると思うのですが・・・
  8. @_NNN_

    Questioner

    「/run/mysqld/mysqld.sock」と「/tmp/musql.sock」を削除後にもう一度実行してみてもダメでした。

    次にmysql自体が入っているか確かめるために次のコマンドを実行「mysql --version」で確認できましたのでmysql本体が入ってなくエラーが出ているわけでなさそうです。

Your answer might help someone💌