mysqlhotcopy は、MySQL のインストールに付属する perl スクリプトです。これにより、テーブルがロックされ、テーブルがフラッシュされてから、データベースのコピーが実行されます。また、mysqlhotcopy を使用して、scp を使用してバックアップを別のサーバーに直接自動的にコピーすることもできます
.
1. mysqlhotcopy コマンド:
[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold
上記の例では、/home/backup/database ディレクトリに MySQL データベースの sugarcrm のバックアップを実行します。
- –allowold:このオプションは、新しいバックアップを作成する前に、古いバックアップの名前を {datbase-name}_old に変更します。この例では、sugarcrm バックアップが /home/backup/database に既に存在する場合、古いバックアップを /home/backup/database/sugarcrm_old に移動してから、/home/backup/database/sugarcrm を作成します。
- –keepold:このオプションは、バックアップが完了した後、mysqlhotcopy に古いバックアップ (つまり、名前を変更した _old) を保持するように指示します。
以下に示すように、perldoc を使用して mysqlhotcopy ドキュメントを表示します。
[local-host]# perldoc mysqlhotcopy
以下は、mysqlhotcopy コマンドに渡すことができる利用可能なオプションです。
オプション | 説明 |
–addtodest | ターゲット ディレクトリの名前を変更しません (存在する場合)。ファイルを追加するだけ |
–allowold | ターゲットが存在する場合は中止しないでください。 _old サフィックスを追加して名前を変更 |
–checkpoint=db_name.tbl_name | チェックポイント エントリの挿入 |
–chroot=パス | mysqld が動作する chroot jail のベース ディレクトリ |
–デバッグ | デバッグログを書く |
–ドライラン | アクションを実行せずにレポート |
–フラッシュログ | すべてのテーブルがロックされた後にログをフラッシュ |
–ヘルプ | ヘルプ メッセージを表示して終了 |
–host=ホスト名 | 指定されたホストの MySQL サーバーに接続します |
–keepold | 完了時に以前の (名前が変更された) ターゲットを削除しない |
–インデックスなし | 完全なインデックス ファイルをバックアップに含めないでください |
–パスワード[=パスワード] | サーバーへの接続時に使用するパスワード |
–port=port_num | 接続に使用する TCP/IP ポート番号 |
–静かに | エラー以外は沈黙 |
–正規表現 | 指定された正規表現に一致する名前を持つすべてのデータベースをコピー |
–リセットマスター | すべてのテーブルをロックした後、バイナリ ログをリセットします |
–リセットスレーブ | すべてのテーブルをロックした後、master.info ファイルをリセットします |
–ソケット=パス | localhost への接続用 |
–tmpdir=パス | 一時ディレクトリ |
–user=user_name, | サーバーへの接続時に使用する MySQL ユーザー名 |
–バージョン | バージョン情報を表示して終了 |
2. mysqlhotcopy コマンド出力:
上記の mysqlhotcopy コマンドは、次のような出力を表示します。
[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold Locked 98 tables in 0 seconds. Flushed tables (`sugarcrm`.`accounts`, `sugarcrm`.`accounts_audit`, `sugarcrm`.`accounts_bugs`) in 0 seconds. Copying 295 files... Copying indices for 0 files... Unlocked tables. mysqlhotcopy copied 98 tables (295 files) in 0 seconds (0 seconds overall).
デフォルトでは、MySQL データベースは /var/lib/mysql/{db-name} の下にあります。 mysqlhotcopy は、この既定のデータベースの場所からバックアップ ディレクトリにテーブル ファイルのバックアップを作成します。バックアップ ディレクトリ /home/backup/database/sugarrcrm には、実際の MySQL データベース /var/lib/mysql/sugarrcrm ディレクトリからのすべてのファイルの正確なコピーが含まれます。
[local-host]# ls -1 /var/lib/mysql/sugarcrm | wc -l 295 [local-host]# ls -1 /home/backup/database/sugarcrm | wc -l 295
すべてのテーブルには、拡張子が *.frm、*.MYD、および *.MYI の 3 つの対応するファイルがあることに注意してください。データベース ディレクトリには、データベース関連のパラメーターを含む db.opt ファイルも含まれています。
上記の例では、mysqlhotcopy が 98 の sugarcrm データベース テーブルのバックアップを作成していることがわかります。したがって、バックアップ ディレクトリ内のファイルの総数 =98 テーブル * 3 + 1 データベース構成ファイル =296 ファイル。
3. mysqlhotcopy から復元
mysqlhotcopy バックアップからバックアップを復元するには、ファイルをバックアップ ディレクトリから /var/lib/mysql/{db-name} ディレクトリにコピーするだけです。安全のために、ファイルを復元 (コピー) する前に必ず mysql を停止してください。ファイルを /var/lib/mysql/{db-name} にコピーしたら、mysql を再起動してください。
4. mysqlhotcopy のトラブルシューティング
DBD/mysql.pm が見つからない問題を解決するには? mysqlhotcopy は perl スクリプトであり、perl-DBD モジュールが必要です。 perl-DBD モジュールがインストールされていない場合、mysqlhotcopy の実行中に次のエラーを受け取る場合があります。
[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at (eval 7) line 3. Perhaps the DBD::mysql perl module hasn't been fully installed, or perhaps the capitalisation of 'mysql' isn't right. Available drivers: DBM, ExampleP, File, Proxy, Sponge. at /usr/bin/mysqlhotcopy line 177
以下に示すように、perl-DBD パッケージを必ずインストールしてください。
[local-host]# rpm -ivh perl-DBD-MySQL-3.0007-1.fc6.i386.rpm Preparing... ########################################### [100%] 1:perl-DBD-MySQL ########################################### [100%]
perl-DBD のインストールに関する問題を解決するにはどうすればよいですか? perl-DBD のインストール中に、次のエラー メッセージが表示される場合があります。
[local-host]# rpm -ivh perl-DBD-MySQL-3.0007-1.fc6.i386.rpm rpmdb: Program version 4.3 doesn't match environment version error: db4 error(-30974) from dbenv->open: DB_VERSION_MISMATCH: Database environment version mismatch error: cannot open Packages index using db3 - (-30974) warning: cannot open Solve database in /usr/lib/rpmdb/i386-redhat-linux/redhat rpmdb: Program version 4.3 doesn't match environment version error: db4 error(-30974) from dbenv->open: DB_VERSION_MISMATCH: Database environment version mismatch warning: cannot open Solve database in /usr/lib/rpmdb/i386-redhat-linux/redhat error: Failed dependencies: libmysqlclient.so.15 is needed by perl-DBD-MySQL-3.0007-1.fc6.i386 libmysqlclient.so.15(libmysqlclient_15) is needed by perl-DBD-MySQL-3.0007-1.fc6.i386
mysql.com から MySQL-shared-compat をダウンロードしてインストールすると、perl-DBD パッケージのインストール中に上記のエラーが解決されます。
[local-host]# rpm -ivh MySQL-shared-compat-5.1.25-0.rhel5.i386.rpm Preparing... ########################################### [100%] 1:MySQL-shared-compat ########################################### [100%]
MySQL データベースのバックアップまたは復元に他の方法を使用していますか?コメントを残してください。