dullwhaleのメモ帳

何度も同じことを調べなくてよいように...

Amazon RDS for MySQLから特定の特定の表だけダンプ・リストアしたい

あるデータベースの一部の表だけダンプして、別のデータベースに入れたいことがある。

特定の表だけダンプする。

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を使う