データベースの複製をする機会があったので忘れないようにメモ。
コマンドと、phpMyadminでの方法で、エクスポート=>インポートまでの一連のやり方を残します。
mysqldumpコマンドで復元
コマンドラインからダンプファイルを生成して、復元する方法です。
mysqldumpコマンドでエクスポートします。
データベースのダンプを「含めるか」 or 「含めないか」でケースを分けて記載しました。
含める場合、復元時に復元先で同名のデータベースがあると、まるまる上書かれてしまうので注意です。
※検証用に別データベース名で復元して使いたいというケースもあるかと思います。
ケースバイケースで以下、読み分けてください。
データベースのダンプを含む
データベースを含むダンプは「–databases」オプションをつけます。
テーブルのダンプは「-d」オプションをつけることで定義のみダンプできます。
つけなければすべて(データ含む)が対象となります。
■テーブル定義 + データ含む
$ mysqldump -u{username} -p{passward} --databases 複製元DB名 > /var/tmp/dbdump.dump
■テーブル定義のみ(dオプション)
$ mysqldump -u{username} -p{passward} -d --databases 複製元DB名 > /var/tmp/dbdump.dump
これでエクスポートは完了。
エクスポートしたダンプファイルは勿論、バックアップファイルとしても残せます。
あとはダンプしたファイルから複製先にインポートするだけです。
$ mysql -u{username} -p{passward} < /var/tmp/dbdump.dump
データベースのダンプを含まない
テーブルのダンプは「-d」オプションをつけることで定義のみダンプできます。
つけなければすべて(データ含む)が対象となります。
■テーブル定義 + データ含む
$ mysqldump -u{username} -p{passward} 複製元DB名 > /var/tmp/dbdump.dump
■テーブル定義のみ(dオプション)
$ mysqldump -u{username} -p{passward} -d 複製元DB名 > /var/tmp/dbdump.dump
これでエクスポートは完了。
エクスポートしたダンプファイルは勿論、バックアップファイルとしても残せます。
インポートする前に、複製する(インポート先の)データベースをCREATE句で作成しておきましょう。※※CHARACTER SET箇所は適宜変更
CREATE DATABASE IF NOT EXISTS 複製先DB名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
あとはダンプしたファイルから複製先にインポートするだけです。
$ mysql -u{username} -p{passward} 複製先DB名 < /var/tmp/dbdump.dump
phpMyadminを使用して復元
phpMyadminからも同様に複製をとることができます。
ただし、データベースの容量によってはタイムアウトして失敗することがあります。
その際はphpiniで調整してください。
手順としては対象のデータベースを選択 => 操作 => 「Copy database to:」より実行するのみです。
設定はデフォルトでもよいと思いますが、適宜変更してください。
以上となります。