どうも、ウェブ系ウシジマくんです。
開発環境のDockerにMySQLを使用しているのですが、ログをみると大量の
[Warning] InnoDB: Table mysql/innodb_index_stats has length mismatch in the column name table_name. Please run mysql_upgrade
が発生していました。
今回はその対処法を書いていきます。
MySQLのContainerに侵入する
以下のコマンドでMySQLのcontainerに侵入します。
$ docker run --rm <container名> /bin/bash
mysql_upgradeを実行する
ログを確認すると、Please run mysql_upgrade
とでていましたよね。
素直に実行してみましょう。
root@563v9s224777# mysql_upgrade
ありゃ、エラーがでてしまいましたね。接続先のpathである/var/run/mysqld/
に、どうやらsocketがないようです。
mysql_upgrade: Got error: 2002: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) while connecting to the MySQL server
Upgrade process encountered error and will not continue.
mysqld.sockというsocketを作成する
socketがあるか、いったん確認してみましょう。
root@563v9s224777# ls -la var/lib/mysql/
total 231876
drwxr-xr-x 6 mysql mysql 4096 Mar 1 01:31 .
drwxr-xr-x 1 root root 4096 Feb 6 07:06 ..
-rw-rw---- 1 mysql mysql 56 Feb 25 03:12 auto.cnf
-rw-r----- 1 mysql mysql 4636 Mar 1 01:31 ib_buffer_pool
-rw-r----- 1 mysql mysql 50331648 Mar 1 01:31 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Mar 1 01:14 ib_logfile1
-rw-rw---- 1 mysql mysql 79691776 Mar 1 01:31 ibdata1
drwx------ 2 mysql mysql 4096 Feb 25 03:12 mysql
drwx------ 2 mysql mysql 4096 Feb 25 03:12 performance_schema
drwxr-x--- 2 mysql mysql 4096 Mar 1 01:30 penguin-app_development
drwxr-x--- 2 mysql mysql 4096 Mar 1 01:30 penguin-app_test
確かにないですね。ということで、socketを作成しましょう。
root@563v9s224777# touch /var/run/mysqld/mysqld.sock
作成したので、再度mysql_upgradeを実行してみます。
root@563v9s224777# mysql_upgrade
ありゃ、またエラーが出ましたね。
mysql_upgrade: Got error: 2002: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) while connecting to the MySQL server
Upgrade process encountered error and will not continue.
mysqld.sock' (111)
なので、再起動が必要そうです。ということで、MySQLを再起動しましょう。
root@563v9s224777# /etc/init.d/mysql restart
[info] Stopping MySQL Community Server 5.7.25.
[info] MySQL Community Server 5.7.25 is already stopped.
[info] Re-starting MySQL Community Server 5.7.25.
No directory, logging in with HOME=/
..
[info] MySQL Community Server 5.7.25 is started.
無事に再起動できました!
改めてmysql_upgradeを実行する
これで準備は整いました。もう一度、mysql_upgrade
を実行しましょう。
root@563v9s224777# mysql_upgrade
mysql_upgrade: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) while connecting to the MySQL server
Upgrade process encountered error and will not continue.
なるほど、権限がないみたいですね。パスワードを入力して、もう一度Try。
なお、パスワードはローカルではなく、MySQLのcontainer用なのでご注意。ご自身で設定したdocker-compose.ymlなどを確認してみましょう。
mysql_upgrade -p
Enter password:
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Upgrading the sys schema.
Checking databases.
.....
Upgrade process completed successfully.
Checking if update is needed.
無事にmysql_upgradeが完了しました。ログをみると、Warningが出ていないと思います。お疲れ様でした!