レコード数の多いアプリケーションの場合、データベースの一部を切り出して取得したいケースがあります。
このような場合、一度バックアップ用のミニテーブルを作成する手順が手軽です。
PostgreSQLのバックアップ手順
- 件数を制限したミニテーブルを作成
- $
psql -Usome_user some_original_db
- some_original_db=#
CREATE TABLE some_table_tmp AS SELECT * FROM some_table_orig LIMIT 300;
- some_original_db=# \q
- $
- ミニテーブルをバックアップ
- $
pg_dump -t some_table_tmp -Usome_user some_original_db > some_dump_file.sql
- $
- テーブル名をオリジナルと同名に置換(必要に応じて)
- $
sed -i -e 's/some_table_tmp/some_table_orig/g' some_dump_file.sql
- $
- 不要になったミニテーブルを削除
- $
psql -Usome_user some_original_db
- some_original_db=#
DROP TABLE some_table_tmp;
- $
MySQLのバックアップ手順
- 件数を制限したミニテーブルを作成
- $
mysql -usome_user -p some_original_db
- mysql>
CREATE TABLE some_table_tmp AS SELECT * FROM some_table_orig LIMIT 300;
- mysql> quit
- $
- ミニテーブルをバックアップ
- $
mysqldump -usome_user -p some_original_db some_table_tmp > some_dump_file.sql
- $
- テーブル名をオリジナルと同名に置換(必要に応じて)
- $
sed -i -e 's/some_table_tmp/some_table_orig/g' some_dump_file.sql
- $
- 不要になったミニテーブルを削除
- $
mysql -usome_user -p some_original_db
- mysql>
DROP TABLE some_table_tmp;
- $
取得したバックアップファイルを用いて、通常のリストア手順で再構築できます。
冒頭のテーブルレプリケーションの際のSELECTは必要に応じてカスタマイズできるため、たとえば ORDER BY による新着順などのサンプリングが可能です。
また、pg_dump / mysqldumpを実行する際にテーブル名を明示的に指定することが重要です。デフォルトではDB内の全テーブルをdumpする挙動となるため、大規模なバックアップが走ってしまいます。
⁋ 2016/11/05↻ 2025/02/06

中馬崇尋
Chuma Takahiro
Chuma Takahiro