あるデータベースの一部の表だけダンプして、別のデータベースに入れたいことがある。
特定の表だけダンプする。
mysqldump -u${USER} -p --opt --skip-lock-tables --single-transaction --quote-names -h ${DB_HOST} ${DATABASE} ${TABLES} | gzip > dump$(date "+%Y-%m-%d").sql.gz
- ${TABLES}には保存したい表を空白文字区切りで指定する。単純に半角スペースで区切っても良いし、ダンプ対象のテーブルを改行区切りでファイルに保存しておき、
$(cat tables.txt)
のように指定しても良い。 - データベースに保存される情報は大抵エントロピーが少ない。圧縮してから保存、転送するべきだ。
$(date "+%Y-%m-%d")
部分はダンプ日時を生成する。2021-12-23
のような文字列に展開される。- どこからダンプしてきたのか分かるよう名前を追加すると良い。
- MySQLバージョンによっては追加のオプション指定が必要かもしれない。
ダンプしたものをリストアする。
gz圧縮したダンプファイルを展開しながらリストアする。
zcat ${DUMP_FILE_NAME} | mysql -u${USER} -p -h ${DB_HOST} ${DATABASE}
- macOSでは
zcat
の代わりにgzcat
を使う