私はcentosでmysqlデータベースの増分バックアップソリューションを扱っています。増分バックアップを取るためにperlスクリプトを書く必要があります。次に、crontabを使用してこのスクリプトを実行します。私は少し混乱しています。解決策はありますが、実際には役に立ちません。私はたくさんの研究をしました。ファイルの完全バックアップと増分バックアップを作成する方法はたくさんあります。それらは簡単に理解できますが、mysqlデータベースの増分バックアップを取る必要があります。どうやったらよいかわかりません。誰かが私にソースまたはコードの一部をアドバイスするのを手伝ってもらえますか?
2 に答える
あなたが見てきた増分バックアップ方法は、MySQL によってここに文書化されています。
http://dev.mysql.com/doc/refman/5.0/en/binary-log.html
基本的にやりたいことは、データベースへの変更をこのバイナリログに書き込むように mysql インスタンスを設定することです。つまり、更新、削除、挿入などはバイナリ ログに記録されますが、select ステートメントは記録されません (db を変更しないため、バイナリ ログには記録されません)。
バイナリ ログを有効にして mysql インスタンスを実行したら、完全なバックアップを取り、マスターの位置をメモします。その後、増分バックアップを取得するために、マスターの位置から mysqlbinlog を実行すると、その出力は、完全バックアップを取得してからデータベースに加えられたすべての変更になります。この時点で再びマスターの位置をメモしておくと、次の増分バックアップを取得するポイントがわかります。
明らかに、複数の増分バックアップを何度も作成する場合、それらすべての増分バックアップを保持する必要があります。かなり頻繁に完全バックアップを取ることをお勧めします。
実際、可能であれば、常に完全バックアップを行うことをお勧めします。インクリメンタル バックアップを作成するのは苦痛を伴うだけですが、それが必要な場合、それは確かに 1 つの方法です。
mysqldumpはチケットです。
例:
mysqldump -u [user_name] -p[password] --database [database_name] >/tmp/databasename.sql
-u=mysqlデータベースのユーザー名
-p=mysqlデータベースのパスワード
注:-pオプションの後にスペースはありません。そして、これをperlで行う必要がある場合は、システム関数を使用して次のように呼び出すことができます。
system("mysqldump -u [user_name] -p[password] --database [database_name] >/tmp/databasename.sql") or die "system call failed: $?";
ただし、これを行うことに伴うセキュリティリスクに注意してください。これが実行されているときに誰かがシステムで実行されている現在のプロセスのリストを作成した場合、データベースアクセスに使用されていた資格情報を確認できます。