MySQL5.7.44をソースインストールする / Rocky Linux9.4 on さくらのVPS
篠原 隆司
アフィリエイト広告を利用しています
このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です
Rocky Linux9.4 にMySQL8.4.0をソースインストールしていってみたいと思います。
今回のこだわりポイントは「複数バージョンの同居」です。
順番が前後するのですが、前回はMySQL8.4.0をインストールしました。
今回は、MySQL 5.7.44 です。
現時点で、MySQLの最新は 8.4.0 になっています。
8.1.0, 8.2.0, 8.3.0, 8.4.0 とリリースされています。
次は、MySQL 9 系も予定されています。
また開発案件でなく引継ぎ案件として過去のシステムの面倒を見て欲しいと依頼される場合があります。
そのときは古いバージョンのMySQLでないと困ることがあります。
ということで、複数バージョンをインストールでき、かつ、同時に稼働できる状態を作っていきたいと思います。
なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。
環境
実施日 | 2024-05-15 |
サーバ | さくらのVPS 2G
![]() |
OS | Rocky Linux9.4 |
cat /etc/redhat-release
bash
Rocky Linux release 9.4 (Blue Onyx)
MySQLをインストールする準備
事前準備がまだの場合は先に▼をご覧ください。
こちらが済んだ前提で進めていきます。
ファイルのURLを取得
最新バージョン
https://dev.mysql.com/downloads/mysql/
過去バージョン
https://downloads.mysql.com/archives/community/
「Product Version」「5.7.44」を選択。
「Operating System」は「Source Code」を選択。
「OS Version」は「All Operation Systems」を選択。

一番下「mysql-boost-5.7.44.tar.gz」の欄にある「Download」を押さずにリンク先URLを取得します。
Google Chrome なら「Download」ボタンを右クリックして「リンクのアドレスをコピー」です。
で、URLがこちら▼。URLは後で使います。
https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
boost はMySQL 5.7 から必要になりました。
同梱版である boost 付きのほうを使用します。
変数の設定
MYSQL_PORT_NO=55744 MYSQL_VERSION=5.7.44 MYSQL_CHARACTER_SET=utf8mb4 MYSQL_COLLATION=utf8mb4_general_ci MYSQL_DATA_BASE_DIR=/usr/local/lib/mysql-$MYSQL_VERSION
bash
# (開発用) MYSQL_DATA_BASE_DIR=/mnt/wd2tb/lib/mysql/mysql-$MYSQL_VERSION
bash
ディレクトリの作成
# 確認 ls -la /usr/local/src # インストールディレクトリ作成 mkdir -p /usr/local/src/mysql-$MYSQL_VERSION
bash
インストール
# 移動 cd /usr/local/src/mysql-$MYSQL_VERSION # ソースコード取得 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz # 解凍 tar xzf mysql-boost-$MYSQL_VERSION.tar.gz
bash
# 移動 (後から一気に飛んでくるためにフルパス) cd /usr/local/src/mysql-$MYSQL_VERSION/mysql-$MYSQL_VERSION
bash
cmakeは1分ほどで終わります。
cmake . \ -DCMAKE_INSTALL_PREFIX=/usr/local/lib/mysql-$MYSQL_VERSION \ -DDEFAULT_CHARSET=$MYSQL_CHARACTER_SET \ -DWITH_EXTRA_CHARSETS=all \ -DDEFAULT_COLLATION=$MYSQL_COLLATION \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_PIC=1 \ -DSYSCONFDIR=/usr/local/lib/mysql-$MYSQL_VERSION \ -DMYSQL_DATADIR=/usr/local/lib/mysql-$MYSQL_VERSION/data \ -DWITH_BOOST=./boost
bash
makeは、約 40 分ほど掛かります。
make
bash
make test は数秒で終わります。
make test
bash
make install
bash
クライアントのインストール
cd client make make test make install
bash
MySQLの設定
# オーナーを変更 chown -R mysql:mysql /usr/local/lib/mysql-$MYSQL_VERSION # ディレクトリを作成 mkdir -p $MYSQL_DATA_BASE_DIR/data mkdir -p $MYSQL_DATA_BASE_DIR/tmp mkdir -p $MYSQL_DATA_BASE_DIR/logs chown -R mysql:mysql $MYSQL_DATA_BASE_DIR # ファイルの作成 touch $MYSQL_DATA_BASE_DIR/logs/mysqld.err chown -R mysql:mysql $MYSQL_DATA_BASE_DIR/logs/mysqld.err
bash
データディレクトリの初期化
MySQL5.7.6 から変更。mysql_install_dbは廃止になった。
最後に root パスワードが表示されているので控えておく
表示されてないときはログファイルを探してみる(mysqld.errに書かれてた)
/usr/local/lib/mysql-$MYSQL_VERSION/bin/mysqld --initialize \ --user=mysql \ --basedir=/usr/local/lib/mysql-$MYSQL_VERSION \ --datadir=$MYSQL_DATA_BASE_DIR/data
bash
my.cnf
ls -la /usr/local/lib/mysql-$MYSQL_VERSION # コピー ※my.cnf が既にあればリネームしてバックアップ cp /root/template_my.cnf /usr/local/lib/mysql-$MYSQL_VERSION/my.cnf # 確認 cat /usr/local/lib/mysql-$MYSQL_VERSION/my.cnf # my.cnf : ポートの変更 sed -i -e "s/\[_PORT_NO_\]/$MYSQL_PORT_NO/g" /usr/local/lib/mysql-$MYSQL_VERSION/my.cnf # my.cnf : バージョンの変更 sed -i -e "s/\[_MYSQL_VERSION_\]/$MYSQL_VERSION/g" /usr/local/lib/mysql-$MYSQL_VERSION/my.cnf # my.cnf : データディレクトリの変更 sed -i -e "s@\[_MYSQL_DATA_BASE_DIR_\]@$MYSQL_DATA_BASE_DIR@g" /usr/local/lib/mysql-$MYSQL_VERSION/my.cnf # my.cnf : 文字コードの変更 sed -i -e "s/\[_CHARACTER_SET_\]/$MYSQL_CHARACTER_SET/g" /usr/local/lib/mysql-$MYSQL_VERSION/my.cnf
bash
# 手作業での調整 vi /usr/local/lib/mysql-$MYSQL_VERSION/my.cnf
bash
# リンク ln -s /usr/local/lib/mysql-$MYSQL_VERSION/lib /usr/local/lib/mysql-$MYSQL_VERSION/lib64
bash
とりあえず確認
/usr/local/lib/mysql-$MYSQL_VERSION/bin/mysql -V
bash
/usr/local/lib/mysql-5.7.44/bin/mysql Ver 14.14 Distrib 5.7.44, for Linux (x86_64) using EditLine wrapper
バージョンアップのとき
# 念のため元ファイルをバックアップ cp -a $MYSQL_DATA_BASE_DIR $MYSQL_DATA_BASE_DIR-backup # (開発用) cp -a /mnt/wd2tb/lib/mysql /mnt/wd2tb/lib/mysql-backup # ディレクトリのリネーム (バージョン変更) mv /usr/local/lib/mysql-5.7.[以前のバージョン] $MYSQL_DATA_BASE_DIR # (開発用) mv /mnt/wd2tb/lib/mysql/mysql-5.7.31 /mnt/wd2tb/lib/mysql/mysql-5.7.44 # 所有者の変更 chown -R mysql:mysql $MYSQL_DATA_BASE_DIR # (開発用) chown -R mysql:mysql /mnt/wd2tb/lib/mysql # /etc/rc.d/init.d に追加 cp /usr/local/lib/mysql-$MYSQL_VERSION/support-files/mysql.server /etc/rc.d/init.d/mysql-$MYSQL_VERSION # 手動起動 /etc/rc.d/init.d/mysql-$MYSQL_VERSION
bash
バージョンアップのときはここで終了
サービスの登録
mysql.serverスクリプトを使用してsystemdサービスを設定します。
vi /etc/systemd/system/mysql-$MYSQL_VERSION.service
bash
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/local/lib/mysql-MYSQL_VERSION/support-files/mysql.server start
ExecStop=/usr/local/lib/mysql-MYSQL_VERSION/support-files/mysql.server stop
ExecReload=/usr/local/lib/mysql-MYSQL_VERSION/support-files/mysql.server restart
PIDFile=/usr/local/lib/mysql-MYSQL_VERSION/logs/mysqld.pid
TimeoutSec=600
Restart=on-failure
RestartPreventExitStatus=1
Environment=MYSQLD_PARENT_ID=1
PrivateTmp=false
[Install]
WantedBy=multi-user.target
sed -i -e "s/MYSQL_VERSION/$MYSQL_VERSION/g" /etc/systemd/system/mysql-$MYSQL_VERSION.service
bash
cat /etc/systemd/system/mysql-$MYSQL_VERSION.service
bash
systemctl daemon-reload
bash
ln -s /etc/systemd/system/mysql-$MYSQL_VERSION.service /etc/systemd/system/multi-user.target.wants/mysql-$MYSQL_VERSION.service
bash
systemctl start mysql-5.7.44.service
bash
tail -n 20 /usr/local/lib/mysql-$MYSQL_VERSION/logs/mysqld.err
bash
systemctl status mysql-5.7.44.service
bash
2024-05-15 status したときコマンドが返って来ない問題は残っているのですがこのまま進めます。
自動起動設定
複数バージョンの同居前提なので、自動起動はせず必要になったときに手動起動
systemctl enable mysql-5.7.44.service
bash
手動で起動
systemctl start mysql-5.7.44.service
bash
手動で停止
systemctl start mysql-5.7.44.service
bash
MySQLの初期設定
rootで接続
/usr/local/lib/mysql-$MYSQL_VERSION/bin/mysql -u root -p
bash
rootパスワードを変更する
SET PASSWORD FOR root@localhost=PASSWORD('rootパスワード');
sql
use mysql; delete from user where user = ""; flush privileges; show variables like 'character_set%'; quit;
sql
rootユーザーをリモート接続できるようにする
※ここはMySQL5.7.44では行っていないため、参考として過去バージョンの方法を残しておきます
とはいえどこからでもじゃなく、指定したIPアドレスからだけ許可します。
/usr/local/lib/mysql-$MYSQL_VERSION/bin/mysql -u root -p
bash
use mysql; # 確認 select user,host from mysql.user; # 登録 grant all privileges on *.* to root@"192.168.xxx.xxx" identified by 'rootパスワード' with grant option; # 確認 select user,host from mysql.user; quit;
sql
次の2カ所は変えてください
- root@"192.168.xxx.xxx"
- rootパスワード
CentOS7のファイアーウォールにmysqlのリモート接続を登録します。
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="IPアドレス" port protocol="tcp" port="ポート番号" accept" systemctl restart firewalld.service
bash
次の2カ所は変えてください
- IPアドレス ・・・ 接続するPC (192.168.x.x)
- ポート番号 ・・・ MySQLのポート番号(55562)
よく使うコマンド
# 起動 systemctl start mysql-5.7.44.service # 停止 systemctl stop mysql-5.7.44.service # 設定確認 vi /usr/local/lib/mysql-5.7.44/my.cnf # エラーログ tail -n 100 /usr/local/lib/mysql-5.7.44/logs/mysqld.err # 自動起動設定 systemctl enable mysql-5.7.44.service
bash
# 終了 quit; # パスワード変更 ALTER USER 'root'@'localhost' IDENTIFIED BY 'rootパスワード'; # 文字コードの確認 show variables like 'character_set%';
sql