移行目的
個人開発アプリの運用には RDS は高いから。業務プロジェクトで RDS から EC2 に移行するケースはないと思う。
環境
# EC2 OS
$ cat /etc/system-release
Amazon Linux release 2023.4.20240429 (Amazon Linux)
# RDS DB Engine
$ aws rds describe-db-instances \
--db-instance-identifier database-1 \
--query 'DBInstances[0].[{Engine: Engine, EngineVersion: EngineVersion}]'
[
{
"Engine": "mysql",
"EngineVersion": "8.0.35"
}
]
手順
EC2 インスタンスを作り、MySQL サーバ/クライアントをインストール。その後 dump をエクスポート/インポートする。最後に Laravel が参照する DB ホストを編集する。
1. EC2 インスタンスに MySQL をインストールする
パッケージインストール
package='https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm'
sudo dnf -y install $package
sudo dnf -y install mysql mysql-community-client
sudo dnf -y mysql-devel
sudo dnf -y mysql-server
サービス起動
sudo systemctl start mysqld
sudo systemctl status mysqld
sudo systemctl enable mysqld
初期パスワード確認
$ sudo grep 'temporary password' /var/log/mysqld.log
2024-06-01T22:51:54.694941Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: /I1dkmqoj3SB
バージョン確認
# Client
$ mysql --version
mysql Ver 8.0.37 for Linux on x86_64 (MySQL Community Server - GPL)
# Server
$ mysql -h localhost -u root -p$PW -e 'SELECT VERSION();'
+-----------+
| VERSION() |
+-----------+
| 8.0.37 |
+-----------+
2. 初期ログイン
初期パスワードを利用して接続
mysql -uroot -p/I1dkmqoj3SB
パスワード変更
ALTER USER 'root'@'localhost' IDENTIFIED BY 'aV>#fSlBF06+';
ユーザーホスト変更
RENAME USER root@localhost to 'root'@'%';
3. データベース移行
RDS から dump をエクスポートし、EC2 の MySQL にインポートする。
4. セキュリティグループ設定
Laravel 側 EC2 ※インバウンドルールなし
MySQL 側 EC2 ※アウトバウンドルールなし
5. .env を編集する
DB_HOST
を EC2 のプライベート IP アドレスに変更
.env
- DB_HOST=database-1.c3a7vynvhtxw.ap-northeast-1.rds.amazonaws.com
+ DB_HOST=172.31.32.112
参考