前提
- いわゆるインプレイスアップグレードの手法です。
- MySQL 5.6は公式レポジトリからインストールしている場合のお話です。
- 不測の事態に備え、MySQLのデータフォルダやmy.cnfはバックアップしておきましょう。
- bashとvim上で操作を完結させます。
1. 公式レポジトリの更新
yum remove -y mysql-community-release-el7-5.noarch
yum localinstall -y http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
# 上記をワンライナーで
yum swap -y -- remove mysql-community-release -- install http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
2. MySQLをシャットダウンする
mysql -u root -p -e "set global innodb_fast_shutdown=0"
mysqladmin -u root -p shutdown
※公式ドキュメントでは、パスワードをコマンドに書いています。ですが、今回は履歴に残さないよう、あえて対話式にてパスワードを入力しています。
3. Let's upgrade!
yum remove -y mysql-server
yum install -y mysql-server
※yum update mysql-serverだと旧バージョンの削除の段階でフリーズしたので、一旦removeしてからinstallしています。
4. my.cnfを書き直す
rm /etc/my.cnf
rm /etc/my.cnf.rpmnew
mv /etc/my.cnf.rpmsave /etc/my.cnf
vi /etc/my.cnf
私が書き換えたのは下記4点です。
-
innodb_file_format = Barracuda
は5.7.7からdepracatedになったので削除しました。 -
systemdをサポート開始したので、
[mysqld_safe]
を削除しました。[mysqld_safe]
の行以降にpidファイルのパスを書いていたので、pidが無いとログにて指摘されました。 - パスワードの強制変更機能がデフォルトで有効なので、それを無効にする
default_password_lifetime = 0
を書き足しました。 - 5.6デフォルトの
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
を削除しましたが、削除には慎重になったほうが良さそうです。
5. 起動して自動起動を有効にする
systemctl start mysqld && systemctl enable mysqld
6. データベース自体をアップグレードする
mysql_upgrade -u root -p
これで完了!3倍速いMySQLを使い倒しましょう!
参考URL
https://dev.mysql.com/doc/refman/5.7/en/updating-yum-repo.html
https://dev.mysql.com/doc/refman/5.7/en/upgrading.html#upgrade-procedure-inplace
http://www.slideshare.net/yoku0825/mysql-57-53449734
http://mysqlserverteam.com/mysql-5-7-native-systemd-support/
http://d.hatena.ne.jp/indigo13love/20140606/1402026594
アップグレード後のつまづきポイント(2015-11-20 13:15:00更新)
-
SQL_MODE
にてONLY_FULL_GROUP_BY
が有効になっているので、ORDER_BY
のカラムをGPOUP_BY
に入れるようエラーがでます。