Yakstは、海外の役立つブログ記事などを人力で翻訳して公開するプロジェクトです。
10年弱前投稿 修正あり

DBAのためのmysqldumpのtips 25選

MySQL標準のダンプツールmysqldumpについて、基礎的な使い方からよく使われるオプション、特徴までを含む25個の問答集。

原文
mysqldump – 25 tips for DBAs (English)
翻訳依頼者
D98ee74ffe0fafbdc83b23907dda3665
翻訳者
D98ee74ffe0fafbdc83b23907dda3665 doublemarket
原著者への翻訳報告
未報告


1) mysqldumpはテキストバックアップツール?それともバイナリバックアップツール?

テキストバックアップツールだ。バックアップファイルを開けば、データベースとその中のオブジェクトを作り直すための全文が見られる。テーブルにデータを詰め込むためのinsert文ももちろん含まれている。

2) mysqldumpのコマンドラインオプションは?

$ mysqldump -u [uname] -p[pass] –databases [dbname] [dbname2] > [backupfile.sql]

3) 全データベースのバックアップはどうしたらいい?

$ mysqldump -u root -p –all-databases > backupfile.sql

4) 特定のデータベースだけのバックアップはどうしたらいい?

$ mysqldump -u root -p –databases school hospital > backupfile.sql

5) 特定のテーブルだけのバックアップはどうしたらいい?

$ mysqldump –user=root –password=mypassword -h localhost databasename table_name_to_dump table_name_to_dump_2 > dump_only_two_tables_file.sql

6) データは不要だがDDLだけ欲しい時はどうしたらいい?

$ mysqldump -u root -p –all-databases –no-data > backupfile.sql

7) mysqldumpでのバックアップにはどのくらいの時間がかかる?

データベースのサイズによる。100GBのデータベースなら2時間以上はかかるだろう。

8) リモートのサーバのデータベースをバックアップするにはどうしたらいい?

$ mysqldump -h 172.16.25.126 -u root -ppass dbname > dbname.sql

9) --routinesオプションってどういう意味?

--routinesオプションを付けて取ったバックアップには、ルーチンを再作成するためのCREATE PROCEDUREおよびCREATE FUNCTION文が含まれる。プロシージャや関数がある場合はこのオプションを付ける必要がある。

10) mysqldumpの全オプションを見たい時は?

$ mysqldump --help

11) よく使われるオプションは?

  • --all-databases
  • --databases
  • --routines
  • --single-transaction : テーブルをロックしないでバックアップ。InnoDBでは常に付ける
  • --master-data : レプリケーション用データをダンプ
  • --no-data : データの入っていない空のデータベースをダンプする

12) トリガもバックアップされる?

デフォルトでトリガもバックアップされる。

13) --single-transactionオプションってどういう意味?

--single-transactionを付けると、InnoDBデータベースのバックアップ時にロックを取得しない。

14) mysqldumpのよく使うコマンドのパターンと言えば?

$ nohup mysqldump –socket=mysql.sock –user=user1 –password=pass –single-transaction –flush-logs –master-data=2 –all-databases –extended-insert –quick –routines > market_dump.sql 2> market_dump.err &

15) mysqldumpのバックアップデータを圧縮するには?

$ mysqldump [options] | gzip > backup.sql.gz

ただし、バックアップが遅くなる可能性がある。

16) mysqldumpは大きなデータベースのバックアップにも向いている?

使用可能なメモリやHDDのスピードなどハードウェアによるが、mysqldumpに向いているのは5GBから20GBぐらいのデータベースだろう。200GBのデータもmysqldumpでバックアップはできるが、このツールはシングルスレッドでバックアップするので、非常に時間がかかってしまう。

17) mysqldumpで取ったバックアップのリストア方法は?

  1. source backup.sqlコマンドを使ってMySQLのシェルから実行
  2. mysql -uroot -p < backup.sql

18) リカバリ中のエラーをログに残しておきたいし、リカバリの実行時間も見たいがどうしたらよい?

$ time mysql -uroot -p < backup.sql > backup.out 2>&1

19) リストアが動いているか知りたい時はどうしたらよい?

mysql> show full processlist;

20) データベースが大きい時にしておいた方がいい事はある?

nohupでバックグラウンドジョブとして実行する。

21) Windowsからmysqldumpで取ったバックアップをLinuxでリストアできる?

可能。

22) リストア先のサーバにファイルを転送するにはどうしたらいい?

  • scp
  • sftp
  • winscp

23) 巨大なバックアップファイルをリストアするのにsourceを使ったらどうなる?

めちゃくちゃ時間がかかる。そういう時には、nohupを使ってバックグラウンドで実行させておくのがよい。

あるいは、screenやtmuxを使ってもよいだろう。

24) mysqldumpにはdrop databaseがデフォルトで含まれている?

--add-drop-databaseオプションを付ける必要がある。

25) 複数のデータベースをバックアップしたファイルからあるデータベースのバックアップのみを抽出するには?

対象のテーブルをtestとした場合、

$ sed -n '/^-- Current Database: `test`/,/^-- Current Database: `/p' fulldump.sql > test.sql

次の記事
プログラミング初心者に言ってはいけないこと
前の記事
私がデータベースを愛する理由

Feed small 記事フィード

新着記事Twitterアカウント