https://tech.drecom.co.jp/how-to-migrate-to-aws/
https://aws.amazon.com/jp/premiumsupport/knowledge-center/migrate-mysql-aurora-innobackup/
外部MySQL→EC2(Amazon Linux 2)に作成したMySQL 5.7
バックアップファイルの暗号化→なし
データレプリケーション時のSSL→使用しない
※ユーザやストアドプログラムは別途移行が必要
-- 1.MySQLインストール
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
sudo yum-config-manager --disable mysql80-community
sudo yum-config-manager --enable mysql57-community
sudo yum info mysql-community-server
sudo yum -y install mysql-community-server
sudo mysqld --version
sudo systemctl enable mysqld.service
sudo systemctl restart mysqld.service
sudo systemctl status mysqld.service
sudo cat /var/log/mysqld.log | grep password
sudo mysql_secure_installation
-- 初期設定
sudo vim /etc/my.cnf
log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
character_set_server=utf8mb4
-- 2.テストデータ作成
テーブル、ファンクション、プロシージャ、ユーザ
mysql -u root -p
drop database test;
create database test;
use test;
drop table tab1;
create table tab1(col1 int);
insert into tab1 values(1);
select * from tab1;
show create table tab1;
drop function func1;
delimiter //
create function func1()
returns int
deterministic
begin
return 0;
end//
delimiter ;
show create function func1\G
drop procedure proc1;
delimiter //
create procedure proc1()
begin
select 1;
end//
delimiter ;
show create procedure proc1\G
drop user user1@localhost;
create user user1@localhost identified by 'password';
select user,host from mysql.user;
-- 3.Percona XtraBackup のインストール
sudo yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
sudo yum -y install perl-DBD-MySQL
sudo yum -y install percona-xtrabackup-24
xtrabackup --version
-- 4.S3バケット作成
aws s3 mb s3://bucket123
aws s3 ls
-- 5.IAM サービスロールの作成
-- ポリシーの作成
※マニュアルの記載と異なり、"s3:GetBucketLocation"が必要
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::bucket123"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::bucket123/*"
]
}
]
}
aws iam create-policy \
--policy-name policy01 \
--policy-document file://policy01.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
aws iam create-role \
--role-name role01 \
--assume-role-policy-document file://role01.json
-- ポリシーをロールにアタッチ
aws iam attach-role-policy --policy-arn arn:aws:iam::999999999999:policy/policy01 --role-name role01
※マニュアルの記載と異なり、クラスターパラメータグループでのaws_default_s3_roleの設定は不要
-- 6.Amazon Aurora MySQL DB クラスターとして復元するファイルのバックアップ
sudo mkdir -p /backup
sudo chown mysql:mysql /backup
sudo chmod 777 /backup
sudo -E xtrabackup --backup --user=root --host=localhost --password='password' --target-dir=/backup
-- 7.バックアップディレクトリおよびファイルを Amazon S3 バケットにコピー
sudo -E aws s3 cp /backup s3://bucket123 --recursive
aws s3 ls s3://bucket123
-- 8.Amazon S3 バケットからの Amazon Aurora MySQL DB クラスターの復元
aws rds restore-db-cluster-from-s3 \
--db-cluster-identifier cluster01 \
--engine aurora-mysql \
--master-username root \
--master-user-password 'password' \
--source-engine mysql \
--source-engine-version 5.7.35 \
--s3-bucket-name bucket123 \
--s3-ingestion-role-arn arn:aws:iam::999999999999:role/role01
aws rds create-db-instance \
--db-instance-identifier cluster01-instance01 \
--db-cluster-identifier cluster01 \
--db-instance-class db.t3.small \
--engine aurora-mysql
-- 9.Amazon Aurora MySQL DB クラスターと外部の MySQL データベースを同期する
aws rds describe-events
-- 外部DBで実行
host cluster01-instance01.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
※インスタンスエンドポイントのIPを使用する
CREATE USER 'replication'@'172.31.333.333' IDENTIFIED BY 'password';
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'replication'@'172.31.333.333';
select user,host from mysql.user;
外部 MySQL データベースをホストするサーバーとAurora MySQL DB クラスター
それぞれのセキュリティグループの設定で双方向の全通信を許可する
-- Auroraで実行
CALL mysql.rds_set_external_master ( '172.31.444.444' , 3306 , 'replication' , 'password' , 'mysql-bin.000001' , 1234 , 0 );
CALL mysql.rds_start_replication;
SHOW SLAVE STATUS\G
CALL mysql.rds_stop_replication;
-- 10.クリーンアップ
-- ロールの一覧
aws iam list-roles | grep role01
-- ロールの削除
aws iam detach-role-policy \
--role-name role01 \
--policy-arn arn:aws:iam::999999999999:policy/policy01
aws iam delete-role --role-name role01
-- ポリシーの一覧
aws iam list-policies | grep policy01
-- ポリシーの削除
aws iam delete-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01
-- バケット削除
aws s3 rb s3://bucket123 --force