7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

EC2インスタンス上のMySQL5.5からAuroraへの移行

Last updated at Posted at 2016-03-09

今回はレガシーインフラの改善として、EC2インスタンス上のMySQL5.5から
AWSサービスのAuroraへの移行を行いました。

全体作業の流れ

作業としては、以下の流れで作業を行いました。

  1. 旧MySQLからAuroraへレプリケーションを行う
  2. アプリ側を切り替える
    以上。

という、とても簡単な手順で移行出来ました。
それでは、作業の詳細です。

1、旧MySQLからAuroraへレプリケーションを行う

1-1、EC2インスタンス上のMySQL5.5からデータをdumpする

$ mysqldump --master-data=2 --single-transaction --order-by-primary --databases hoge fuga > some.dump.txt
  • --master-data=2 マスタのポジションがコメントで出力されます
  • --single-transaction は運用中のサービスの場合、ロックしないようdumpします
  • ユーザデータも移行してください手順は割愛
  • 旧MySQL側のマスタ設定は割愛します

1-2、Auroraの設定

基本的なところは、
http://dev.classmethod.jp/cloud/aws/try-aurora-replica-failover/
こちらなどを参考にしました。

Auroraは、time_zoneの設定が出来ないので、下記の記事を参考に init_connect を設定しました。

参考
http://qiita.com/j3tm0t0/items/089ef96ba131df079ca4

init_connect       SET SESSION time_zone = CASE WHEN POSITION('rds' IN CURRENT_USER()) = 1 THEN 'UTC' ELSE 'Asia/Tokyo' END;

と、思っていたらこんな記事も最近見つけました。
http://dev.classmethod.jp/cloud/aws/amazon-aurora-local-timezone/

他に、 character_set の設定も行いました。
(Auroraは、パラメータグループがCluster用と2種類あるので注意!)

1-3、Auroraに、データを流し込む

$ mysql -h auroraクラスターエンドポイント.ap-northeast-1.rds.amazonaws.com -uユーザ -p < some.dump.txt

1-4、Auroraのレプリケーション設定(スレーブ)

$ mysql -h auroraクラスターエンドポイント.ap-northeast-1.rds.amazonaws.com -uユーザ -p
mysql> CALL mysql.rds_set_external_master(
    'xxx.xxx.xxx.xxx', (マスターのIPアドレス)
    3306, (ポート番号)
    'replication_user', (接続するユーザー名)
    '*********', (パスワード)
    'mysql-bin.09999', (バイナリログのファイル名)
    '123', (マスタのポジション)
    0 (SSL接続を行わない)
);

1-5、Auroraのレプリケーション開始

mysql> CALL mysql.rds_start_replication;

それから

mysql> show slave status\G

とやってみて、

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

になっていれば、レプリケーション成功です。
さらに、 Seconds_Behind_Master: 0 になっていれば切り替え準備完了です。

2、アプリ側を切り替える

任意のタイミングで、アプリ側の接続先をAuroraに切り替えてください。

mysql> call mysql.rds_stop_replication;

これでレプリケーションは停止できます。
無事移行が完了したら、

mysql> call mysql.rds_reset_external_master;

レプリケーションの設定をリセットしておきましょう。(重要)
これをやっておかないと、Auroraを再起動などした時にレプリケーションが開始されてしまいます。

データの互換性について

今回は、小さめのデータベースだったので、確認も比較的簡単に出来ました。
カラムのデータ型としては以下のようなものがありましたでしたが、特に問題はありませんでした。

+------------------+------+-----+---------+----------------+
| Type             | Null | Key | Default | Extra          |
+------------------+------+-----+---------+----------------+
| int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| int(10) unsigned | YES  | MUL | 100     |                |
| int(11)          | YES  | MUL | NULL    |                |
| int(11)          | NO   |     | NULL    |                |
| text             | NO   | UNI | NULL    |                |
| text             | YES  | UNI | NULL    |                |
| text             | YES  |     | NULL    |                |
| datetime         | YES  |     | NULL    |                |
| varchar(255)     | YES  |     | NULL    |                |
| tinyint(3)       | NO   | MUL | NULL    |                |
+------------------+------+-----+---------+----------------+

しかし、こういった報告もあります。
http://oranie.hatenablog.com/entry/20130402/1364906656
http://qiita.com/yng13/items/ddf755780315e029cc6e

でも、レプリケーションさえ出来てしまえば、検証もやりやすいですね。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?