やりたいこと
CentOSのMySQLを5.1から5.7に更新する。
手順
yum update
『MySQL5.1→5.7へアップグレード』の手順に従って「sudo yum update mysql-server」までコマンドを叩く。
MySQLの起動
インストールしたMySQLのバージョン確認。
$ mysql -V
mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper
MySQLを起動させる。
$ sudo service mysqld start
MySQLを起動できない
エラーが出てMySQLを起動できない場合は、以下の通り対応する。
エラー①:’./ibdata1′ is of a different size
$ sudo tail /var/log/mysqld.log
2018-05-03T05:01:58.187434Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.11) starting as process 9319
2018-05-03T05:01:58.472181Z 1 [ERROR] [MY-012263] [InnoDB] InnoDB: The Auto-extending innodb_system data file './ibdata1' is of a different size 640 pages (rounded down to MB) than specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!
2018-05-03T05:01:58.472793Z 1 [ERROR] [MY-012930] [InnoDB] InnoDB: Plugin initialization aborted with error Generic error.
2018-05-03T05:01:59.074745Z 1 [ERROR] [MY-011013] [Server] Failed to initialize DD Storage Engine.
2018-05-03T05:01:59.076447Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2018-05-03T05:01:59.076872Z 0 [ERROR] [MY-010119] [Server] Aborting
MySQLディレクトリのibdata1ファイルサイズについて怒られているので、my.cnfに以下の設定を加える。
[mysqld]
# 略
innodb_data_file_path = ibdata1:10M:autoextend
エラー②:run mysql_upgrade
$ sudo tail /var/log/mysqld.log
2018-05-03T05:56:08.801291Z 0 [ERROR] Fatal error: mysql.user table is damaged. Please run mysql_upgrade.
2018-05-03T05:56:08.801397Z 0 [ERROR] Aborting
$ mysql_upgrade
mysql_upgrade: Got error: 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) while connecting to the MySQL server
Upgrade process encountered error and will not continue.
「mysql_upgrade」しろと言われるが、mysql_upgradeできない場合、『MySQL5.1→5.7へアップグレード』に従って、MySQLをセーフモードで起動しアップデートする。
$/usr/bin/mysqld_safe --skip-grant-tables &
$mysql_upgrade -u root -p
# 中略
Upgrade process completed successfully.
Checking if update is needed.
他my.cnf設定
上のエラー対応以外でも、文字設定とTIMESTAMP型の設定を追記。
[mysqld]
# 略
character-set-server=utf8
explicit_defaults_for_timestamp = true
再起動
MySQLを再起動し、自動起動をオンにする。
$ sudo service mysqld restart
$ sudo chkconfig mysqld on
この状態でMySQLにログインできればOK!
mysql -u root -p
Railsアプリのデプロイでエラーが出る
“gem mysql2″を再インストール
LoadError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
このエラーの場合は”gem mysql2″を再インストールする。
gem uninstall mysql2
bundle install
mysql-devel
mysql-develはインストールされているか?されてない場合はインストール。
$ sudo yum install mysql-devel
所感
エラーメッセージをよく読んで焦らず対応すれば必ずうまくいく。更新前にバックアップも忘れずに!
Sources
- MySQL5.1→5.7へアップグレード
- MySQL 5.6 Failure
- CentOS6にMySQL5.7をyumでインストール
- CentOS6.8 – MySQL5.1 から MySQL5.6へバージョンアップする