私はmysqlを使用しています
どのくらいの頻度でデータベースをバックアップしますか?
通常、データベースをどのようにバックアップしますか?
すべてのデータをsqlまたはcvs形式にエクスポートし、フォルダーに保存しますか?
ダウンタイムなしでMySQLバックアップを適切に実行する場合は、データベースをスペアサーバーに複製する必要があります。非常に強力である必要はありません。マスターデータベースの書き込み負荷に対処する必要があります。このサーバーを本番環境で使用しないでください。レプリケーションが追いつかない場合は、より強力なサーバーが必要です。の出力からログファイルと位置を比較することで確認できます
> SHOW MASTER STATUS\G
マスターと
> SHOW SLAVE STATUS\G
奴隷に。 MySQL5はSHOW SLAVE STATUS
からの遅れを示すと思います。
スレーブが追いついてきていることに満足したら、次のようにしてバックアップを行うことができます
SLAVE STOP;
を使用してレプリケーションを停止しますmysqldump --opt
を実行します。SLAVE START;
を使用してレプリケーションを再開しますこれを行うと、データベースの一貫したバックアップが得られます。この方法は、異なるデータベース、さらに悪いことに、同じデータベース内の異なるテーブルが同期しなくなるのを防ぎ、バックアップの実行中に書き込み用にテーブルをロックすることでダウンタイムを防ぎます。
この設定の優れた利点は、データベースのコピーを使用して、ライブサービスに影響を与えない、長くて高価なクエリを実行できることです。
ランダムなヒントのカップル:
mysqldump --opt
を使用します。これは通常、結果のSQLをインポートする最も速い方法です。mysqldump
を使用して、データベースごとにデータ/スキーマをファイルに抽出するスクリプトを使用します。データは、通常のネットバックアップバックアップによってテープにバックアップされます。あなたは明らかにさらにベルとホイッスルを追加することができますが、これは単純な基本的なダンプを行います。
#!/bin/sh
# Find out what databases are in mysql and back them up
# Delete old backups
STARTTIME=` date +%Y%m%d-%H%M `
#BACKUP_DIR="/usr/local/db_backups"
BACKUP_DIR="/var/local/db_backups"
LOGFILE="/var/log/db_backups.log"
USER="root"
PASSWD="<password>"
KEEP="7"
(
echo
echo " ---MySQL backups start ${STARTTIME} ---"
#delete any backup written more than ${KEEP} days ago
echo "Removing files over ${KEEP} days old from ${BACKUP_DIR}:"
/usr/bin/find ${BACKUP_DIR} -mindepth 1 -mtime +${KEEP} -print -delete
echo
echo "Performing today's dumps"
#find each database running in this instance of mysl
for DB in ` echo "show databases;"|mysql -u${USER} -p${PASSWD} mysql |awk " NR>1 {print $1} " `
do
#generate a backup file name based on the data base name
BACKUP_FILE="${BACKUP_DIR}/${DB}-${STARTTIME}.sql"
echo "Processing database ${DB} into file ${BACKUP_FILE}"
# dump the database data/schema into the backup file
mysqldump -u${USER} -p${PASSWD} --add-drop-table ${DB} > ${BACKUP_FILE}
gzip ${BACKUP_FILE}
done
ENDTIME=` date +%Y%m%d-%H%M `
echo
echo " ---MySQL backups complete ${ENDTIME} ---"
echo
) >> ${LOGFILE} 2>&1
バックアップの全体的な目的は、復元できるようにすることです。
私はバックアップソリューションとしてCSVダンプを推奨しません。それがあなたに与えるのは生データだけです。特にデータベースの場合は、それ以外にもたくさんあります。テーブルの説明、ビュー、ストアドプロシージャ、名前を付けます。これらも持っていない場合、正常に戻すことはできません。考慮すべきRDBMSアプリケーションと構成もあります。多数のパッチが適用されている可能性がありますが、同じレベルにするには、リカバリ環境にも適用する必要があります。アプリケーションの要件によって指定された特別な構成を実行している可能性があります。データベースを最適に実行するために必要な特定のOS設定のセットがある場合もあります。これらもすべて元に戻す必要があります。それらを実行できるバックアップソリューションがない限り、復旧時間がさらに遅れることは言うまでもなく、元の状態に戻る保証はありません。
データベースのバックアップ(および一般的なバックアップ)の場合、私は常にこれらすべてを処理できる「実際の」バックアップソフトウェアを使用することを好みます。
通常、データベースを停止する必要がある場合は、データベースを1日1回バックアップし、バックアップをストレージ領域に転送して統合してから、テープに転送します。
データベースのバックアップは、ほとんどの場合、データベースエンジンに付属のネイティブツールを使用して実行されます。
ハードウェア障害が発生した場合に備えて、データとともにバックアップをサーバーに保持してはなりません。
可能であれば、データベースサーバーの最新のレプリカを用意することをお勧めします。本番データベースには、フェイルオーバーマカニズムを使用することをお勧めします。
標準のセットアップは、読み取り専用の2つのデータベースをもう一方に複製するHAクラスターです。
1日に1回完全バックアップを実行してから、古いバックアップを削除するという顧客ごとのポリシーがあります。通常、1か月の最後の日曜日に4回、最後の日曜日に4回、最後の1日4回のバックアップを保持します。その後、1年に1つか2つのダンプがアーカイブに送られ、永久に保管されます。
また、ディスクスペースを節約できる限り、レプリケーションログを保持します。また、誰がいつ何を変更したかを正確に記録するため、デバッグツールとしても非常に便利です。
理論的には、1つの完全バックアップとすべてのレプリケーションログで特定の時点の復元を実行できますが、完全バックアップを頻繁に行うと復元が高速化されます。
バックアップの巧妙なトリックの1つは、mysqlダンプにinnodbテーブルと--single-transactionパラメーターを使用することです。これにより、バックアップの実行中にデータベースがブロックされなくなります。
私はPerconaの Xtrabackup を使用しています。 InnoDBのブロック不可能なバックアップソリューションです/ XtraDB
最近、私はEC2でMySQLサーバーを管理しました。 15分のcronジョブでEBSスナップショットを設定し、3〜5個のスナップショットを保持しました。
「従来の」MySQLサーバーを実行したときは、MySQl-ZRMを介して毎日バックアップしました。バックアップは基本的にmysqldumpsであり、顧客のニーズに応じて、テープやSANなどに送信されます。
どちらの方法も、データベースを停止せずに実行できます。
MySQLの場合、バックアップソフトウェア(Backup Exec)がLinuxシステムのスナップショットをサポートしていないため、automysqlbackup( http://sourceforge.net/projects/automysqlbackup/ )を使用します。
それは問題なく動作しますが、私は提案のためにこのスレッドを監視するつもりです:)
1日2回のバックアップを実行し、10〜15分ごとにログバックアップも実行します。
この方法の利点は、1日2回のバックアップのいずれかから復元し、遅くとも最後の15分までログファイルを適用できることです。このようにして、失う可能性のあるデータの量を最小限に抑えます。
ただし、データをバックアップする頻度はあなた次第です。どのくらいのデータを失うことに満足していますか? 1日分のデータを失う余裕がある場合は、1日1回バックアップしてください。データは決して変わらない?その後、必要なコピーは1つだけです。