

AWS Lightsail への MySQL 導入後、まず MySQL にログインしようとしましたが、以下のエラーが出てきます。

[code]

    Enter current password for root (enter for none): 
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    Unable to connect to the server as root user, giving up.
    Cleaning up...
    
[/code]

mysql.sockが無いとのことなので、作成しました。

[code]

    $ sudo touch /var/lib/mysql/mysql.sock
    
[/code]

すると、今度はエラーの番号が変わり、パーミッションが無いとのメッセージです。

[code]

    $ mysql -u root
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)
    
[/code]

なので、パーミッションを与えます。

[code]

    $ sudo chmod 777 /var/lib/mysql/mysql.sock
    
[/code]

そうすると、今度はさらにサーバーへ接続できないというエラーが出ます。

[code]

    $ mysql -u root
    : Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
    
[/code]

同時に、はじめに作成したファイル /var/lib/mysql/mysql.sock を削除しろとのメッセージが、

[code]

    $ sudo service mysqld start
    Socket file /var/lib/mysql/mysql.sock exists.
    The file /var/lib/mysql/mysql.sock is not a socket file, which is suspicious.
    Please, remove /var/lib/mysql/mysql.sock manually to start the service.
    
[/code]

削除します。

[code]

    $ sudo rm /var/lib/mysql/mysql.sock
    
[/code]

すると、また振り出しに戻ります。

[code]

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    
[/code]

my.cnf ファイルには下記を記載しています。

[code]

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    symbolic-links=0
    character-set-server=utf8
    innodb_buffer_pool_size = 256M
    
    [client]
    socket = /var/lib/mysql/mysql.sock
    port        = 3306
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    
[/code]

logはこのようになっております。

[code]

    2020-08-23 09:25:26 4206 [Note] Plugin 'FEDERATED' is disabled.
    ^G/usr/libexec/mysql56/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
    2020-08-23 09:25:26 4206 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
    2020-08-23 09:25:26 4206 [Note] InnoDB: Using atomics to ref count buffer pool pages
    2020-08-23 09:25:26 4206 [Note] InnoDB: The InnoDB memory heap is disabled
    2020-08-23 09:25:26 4206 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
    2020-08-23 09:25:26 4206 [Note] InnoDB: Memory barrier is not used
    2020-08-23 09:25:26 4206 [Note] InnoDB: Compressed tables use zlib 1.2.8
    2020-08-23 09:25:26 4206 [Note] InnoDB: Using Linux native AIO
    2020-08-23 09:25:27 4206 [Note] InnoDB: Using CPU crc32 instructions
    2020-08-23 09:25:27 4206 [Note] InnoDB: Initializing buffer pool, size = 256.0M
    2020-08-23 09:25:27 4206 [Note] InnoDB: Completed initialization of buffer pool
    2020-08-23 09:25:27 4206 [ERROR] InnoDB: ./ibdata1 can't be opened in read-write mode
    2020-08-23 09:25:27 4206 [ERROR] InnoDB: The system tablespace must be writable!
    2020-08-23 09:25:27 4206 [ERROR] Plugin 'InnoDB' init function returned error.
    2020-08-23 09:25:27 4206 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
    2020-08-23 09:25:27 4206 [ERROR] Unknown/unsupported storage engine: InnoDB
    2020-08-23 09:25:27 4206 [ERROR] Aborting
    
[/code]


CC BY-SA 4.0
2020-08-23T09:44:31.307
69798
2020-08-24T23:00:33.183
2020-08-24T23:00:33.183
41608
41608
question
mysql
MySQL への接続でエラー - ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)


`mysql` コマンドと `mysqld` コマンドの違いは理解していますか？ 何か無駄なことをやっているようにしか見えないのですが

`mysqld` つまり MySQL デーモン本体が起動するときに `mysqld` が `/var/lib/mysql/mysql.sock` という
**ソケット** を作成する仕様です。そして `mysql` コマンドはこのソケットに接続しようとします。なのであなたが `sudo touch
/var/lib/mysql/mysql.sock` などと **通常ファイル**
を作ってしまうと当然ソケットへの接続が失敗してエラーになります。なのでファイルを削除しろと言ってくるのは当然の結果で以下ループ。

`mysql.sock` に接続できない = `mysql.sock` ソケットを `mysqld` が生成していない = `mysqld`
が起動失敗している、と推定出来て、よって今見るべきは `log-error=/var/log/mysqld.log`
で指定したエラーログファイルということになります。

* * *

別質問があったのね。ログも転載されてきたので読んでみます。致命傷となっているのは

> `2020-08-23 09:25:27 4206 [ERROR] InnoDB: ./ibdata1 can't be opened in read-
> write mode`

`InnoDB: ./ibdata1 が読み書き可能モードで開けません。`

理由を妄想してみるに

  * ユーザ `mysql` グループ `mysql` が無い / 無効化されている / 権限設定が不良でうまく機能しない
  * `MYSQL_DATADIR` が無い / 設定不良
  * `MYSQL_DATADIR` 以下に `ibdata1` ファイルが無い
  * `MYSQL_DATADIR` にユーザー/グループ `mysql` の読み書き権限が無い
  * `ibdata1` ファイルにユーザ/グループ `mysql` の読み書き権限が無い
  * `MYSQL_DATADIR` 以下の容量が足らなかったなどの理由で `ibdata1` が壊れている
  * なんか知らないファイルが勝手に増えていたので誰かが削除してしまった（人間とは限らずセキュリティソフトが検疫したとか）

妄想するだけならいくらでも広げられますが、真相がわかるのは質問者だけです。

ウチの hpux サーバちゃんには古い `mysql` が入っていて `MYSQL_DATADIR=/home/mysql/data` と指定しています。

[code]

    # cd /home/mysql/data
    # ls -l ibdata1
    -rw-rw----    1 mysql    mysql     45651584 Aug  5  16:38 ibdata1
    #
    
[/code]

のようにユーザ `mysql` グループ `mysql` で `ibdata1` が読み書き可能となっていて、正しく `mysqld` が起動しています。


CC BY-SA 4.0
2020-08-24T03:30:31.307
69818
2020-08-24T07:11:58.367
2020-08-24T07:11:58.367
8589
8589
69798
answer