概要
Aurora Serverlessから別のAurora Serverlessへのデータ移行を行う業務を担当した際ポイントに感じたことまとめ
mysqldumpを使う
バックアップ及びデータの復元に使う。mysqlをインストールした時点で使える。以下のコマンドを実行することでDBのテーブル定義と既存のデータを取得してファイルに出力してくれる。
mysqldump -u #{ユーザー名} -p #{コピーしたいDB名} > ファイル名.sql
Auroraで行う場合は -skip-column-statisticsオプションを追加する。
mysqldump8以降でそれ以前 (5.7とか) のMySQLサーバに対してダンプを実行したらこの問題が起こるらしい。Auroraは現在Mysql5.7(2020年12月)。
mysqldump -u #{ユーザー名} -h#{AuroraのEndpoint} -p #{DB名} > ファイル名.sql --skip-column-statistics
ちなみにAuroraは通常プライベートサブネットに配置されているため、外からこのコマンドを投げることはできない。Auroraが存在するVPCにVPN接続するか、踏み台サーバーを使う。セキュリティグループのインバウンド設定を忘れずに
出力されたファイルの中身
vimコマンドなどで開いてみる。テーブルを一回破棄してその後改めて新規作成し、その新規テーブルにinsertさせることで復元するというロジックみたい。
データ復元
mysqlコマンドにmysqldumpで出力したsqlファイルを渡して実行させればOK。
mysql #{移行先のAuroraのユーザー名} -h#{移行先のAuroraのEndpoint} -p #{DB名} < mysqldumpで出力したsqlファイルを指定
Access denied; you need (at least one of) the SUPER privilege(s) for this operationについて
下記のようなSuper権限でしか実行できないSQL文がmysqldumpの出力したファイルには入ってしまっている。エラー箇所はat lineに記載されているので消去していけば実行できる。
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;