MySQL データベースのバックアップ
表のエクスポート
MySQL で表を丸ごとファイルにエクスポートする場合は、SELECT * FROM table を応用した INTO OUTFILE file による指定が基本となる:
SELECT * INTO OUTFILE '/mnt/data/tmp/sampletable.tsv' FROM Sample_Table;
- ファイル形式は TSV(TAB 区切りでエスケープ方式が TAB 区切り特有のルールとなっている。CSV よりも遥かにスマートなフォーマット)
- ファイルは上書き不可なので、既存の同名ファイルが存在してはならない。
- 参考:MySQL 8.0 リファレンス
- (出力先ファイル名や、表名などは一例)
エクスポートした表のインポート
反対にエクスポートした表をデータベースにインポートして書き戻す場合は次の命令が対応する:
LOAD DATA LOCAL INFILE '/mnt/data/tmp/sampletable.tsv' INTO TABLE Sample_Table;
- エクスポートしたファイルを編集してデータエントリーを付け加えてインポートし直すと、元から存在したエントリーについては warning となり skip されるだけなので、気にせずにエントリーの追加用途に利用できる。
また、一部エントリーを元のデータに追加するのではなく、元のデータを修正して上書き更新したい場合であれば、TRUNCATE 命令を使って一旦消去してから全体丸ごと LOAD し直せばよい:
TRUNCATE TABLE Sample_Table;
LOAD DATA LOCAL INFILE '/mnt/data/tmp/sampletable.tsv' INTO TABLE Sample_Table;
参考:SHOW WARNINGS
LOAD の結果、追加したデータに何らかの不備があって WARNING が発生した場合は、直後に SHOW WARNINGS すれば WARNING 内容を確認することができる。
SHOW WARNINGS;
データベースのバックアップ
表の定義を含めたデータベースのバックアップは mysqldump コマンドを使う。こちらは SELECT 文のような SQL 上の操作ではなく、MySQL の対話モードの中で実行するものではなく、単独のシェルコマンドとしてインストールされるツールである:
mysqldump --databases Sample_Database > sampledatabase.sql
- .sql ファイルは、データベースを復旧するための表定義の SQL 文などが含まれている。
- SQL の命令文の中に、復旧すべき表のデータ内容が埋め込まれた形となっている。
- 元々存在した表が削除・再作成されてデータがゼロから入力され直される形となる。
- 参考:MySQL 8.0 リファレンス
- (出力先ディレクトリ名や、データベース名などは一例)
ダンプしたデータベースのリストア
mysql Sample_Database < sampledatabase.sql
コメント
コメントを投稿