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で取ったバックアップのリストア方法は?
source backup.sql
コマンドを使ってMySQLのシェルから実行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