ソースビルドMySQLをバージョンアップする
長年使用しているMySQL 5.5を5.6にアップグレードする作業を行ったので、一応自分の備忘録的な意味合いで手順を残しておきます。
環境によって差はあると思うのでこの方法で全てできるかどうかは保証できないですが、今の所この方法で問題は出ていないです。
余談ですが、MySQL5.6はあくまで通過点で、とりあえずの目標は5.7へ上げる形なのでまた5.6から5.7の時は変わるかも知れないですね。
検証環境
- CentOS 7.9
- MySQL 5.5.61(置き換え前)
- MySQL 5.6.51(置き換え後)
MySQL5.6のソースを用意する
何がともあれ、まずはアップグレードする先の5.6のソースを用意します。
ソースファイルはMySQL公式のアーカイブページから取得します、プルダウンが3つあるので以下の条件で検索をかけます。
- Product Version → 5.6.51
- Operating System → Source Code
- OS Version → All Operating Systems
検索結果は1件しか出ないと思うので、一番右の「Download」ボタンのリンク先URLをコピーしておきます。
サーバー側に上記のソースファイルを落とします、場所はどこでもいいですがよく使うのは/usr/local/src/ですね。
cd /usr/local/src/
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.51.tar.gz
ビルドを行い上書きインストールする
ここからが大事なんですが、ビルドを行う前にcmakeコマンドで事前準備をしますがこの際に指定するオプションはなるべく今のMySQLを構築した際のオプションと同じにします。
意図的にオプションを変える場合はいいんですが、それはない場合に変えてしまうと今の環境とはズレたファイルが生成されるので、何らかの事故が起きる可能性が高いです。
なので、もし分かるのであれば以前のMySQLのcmakeのオプションを元に作ると良いと思います。
tar zxvf mysql-5.6.51.tar.gz
cd mysql-5.6.51
cmake . -DCMAKE_INSTALL_PREFIX=/var/lib/mysql -DDEFAULT_CHARSET=utf8mb4 -DWITH_EXTRA_CHARSETS=all -DMYSQL_TCP_PORT=3306 -DMYSQL_DATADIR=/home/mysql -DSYSCONFDIR=/var/lib/mysql -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_PIC=1 -DWITH_ZLIB=bundled -DENABLED_LOCAL_INFILE=1 -DWITH_SSL=yes
make
cmakeで指定するオプションは一例なので、個々の環境によって変えます。
後はmakeコマンドでビルドが終わるのを待ちましょう、ここまではまだ既存の動いているMySQLに対しては何ら影響はありません。
で、この先から上書きインストールを行っていくので、必要であればバックアップを取るなりしておきます。
心の準備ができたら、稼働しているMySQLを止めておきます。
ここからの作業時間は慣れれば5分程度で終わるので、その間のDB接続に関しては何らかの手を打っておきましょう。
ではいよいよインストールします。
make install
chown -R mysql:mysql /var/lib/mysql
chown -R mysql:mysql /home/mysql
cp -p ./support-files/mysql.server /etc/init.d/mysql
chmod 755 /etc/init.d/mysql
今回はベースディレクトリに/var/lib/mysql、データディレクトリに/home/mysqlを指定しているので、この2つに対して一応所有者の変更をかけておきます。
起動スクリプトに関しても権限を付与しておきます。
起動とデータのアップグレード
/etc/init.d/mysql start
MySQL5.6での初起動になります、ここでは通常通り起動するのが理想ですが場合によっては設定ファイルを書き換えないとエラーが出る場合もあるので、事前にmy.cnfを見直しておくと良いかも知れません。
で、一番最初の起動はエラーログを出していれば色々とエラーが出ると思いますが、無視で大丈夫です。
というのも、今はデータが5.5でサーバーの実行環境は5.6という状態になっているので、このバージョンのズレによるデータの不整合が発生しているためです。
このままだと良くないので、データ側もちゃんと5.6仕様にアップグレードをかけてあげます。
/var/lib/mysql/bin/mysql_upgrade -uroot -p
/var/lib/mysql/bin/mysql -uroot -p
> SELECT VERSION();
データのアップグレードにはmysql_upgradeコマンドを用います、多分数秒以内に終わります。
ここまでの手順でMySQLのアップグレード作業は完了です。
後は試しにMySQLを再起動してみてエラーログが出ないかとか、クライアントから接続して問題が無いかとか、チェックをしておきましょう。
意外と手順としては少ないので、もしMySQLを数分程度止められる環境が整うのであればすぐにできますね。