CentOSのMySQLを5.1から5.7に更新する手順

やりたいこと

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

兵庫県西宮市生まれのフリーランスRailsエンジニア。案件によってWordPressの作業も請け負ったりしてます。2014年から2016年にかけてオーストラリアで生活。 現在は東京を拠点に活動。/ 前職・資格:公認会計士 / プログラミング言語:Ruby, JavaScript, HTML, CSS / 日本語・英語
コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です