XtraBackupを使用してMySQLデータベースのバックアップの実装例

  バックアップMySQLデータベース上のツールや方法がよりになり、我々は単にプラットフォームのバックアップソリューション私達の会社をご紹介。Xtrabackupはい、しかし唯一のデータベースのストレージエンジンInnoDBのデータベースとXtraDBのための非ブロッキングpercona無料のオープンソースデータベースのホットバックアップソフトウェアによってバックアップされますが、(MySQLのような)MyISAMテーブルのバックアップは、バックアップ処理中にテーブルをロックします。Xtrabackupの詳細あなたのお母さんの度合いを紹介してください。

1、インストールXtrabackup

  公式サイトへHttps://www.percona.comタールは、当社のサーバーの一部として、インストールするためにダウンロードすることがパブリックネットワーク、サービスプロバイダに接続し、ターゲットホストに直接ダウンロード送信することができます

  インストール後、バックアップ用のMySQLをinnobackupexするために使用することができますいくつかのツールを、生成されます。

2、ディビジョンI-プラットフォーム、データベースのバックアップ戦略

  現在、2つのサーバーAとBに配備MySQLのインターネットデータ、2つの相互バックアップデータのリアルタイム同期、現在主要ライブラリがAです。バックアップスクリプトとcronジョブを2つのサービス上で展開している、スケジュールされたタスクは、二つの毎日のサービスで実行されますが、唯一のライブラリとバックアップ用のメインスクリプト戦略は、主な基準は、ホストIPに浮かぶMySQLのデータであり、上。

  フルバックアップ

#完全バックアップスクリプト
#!/ binに/ bashの
HOMEDIR =は/ opt / db_backup

#判事は、ディレクトリの完全バックアップを保存し、ログディレクトリが新しい存在しない場合、存在する
[-dは/ opt / db_backup / full_bakcup] ||ます。mkdir -pは/ opt / db_backup / full_bakcup
[-dは/ opt / db_backup /ログ] ||ます。mkdir -pは/ opt / dB_backup /ログ

#バックアップセットのログ
ログファイル= `DATE "Y +%メートル%d個の%"` _fullbackup.log
タッチの$ HOMEDIR /ログ/ $ログファイル

#ホスト上の浮動IPを有効にするかどうかを決定
/ sbinに/ IPのaddr | grepを192.168.1.10
IF [$ -ne 0?];その後、
        エコー"これは、マスタDB、バックアップする必要はありませんではない" >> $のHOMEDIR /ログ/ $ログファイル
        を終了します。3
Fiの

#检查mysqlの是否运行正常
の/ usr / sbinに/のlsof -i:3306 | grepがLISTEN
[$場合は?-ne 0];その後、
        「MySQLはMySQLのLISTEN見つけることができない、正しく動作しない場合があります。」エコー >> $ HOMEDIR /ログ/ $ログファイルの
        5番出口
Fiの

ps -ef | grepを/ホーム/ mysqlの/ binに/ mysqldの
場合は[$?-ne 0];その後、
        エコー「のmysqlのPIDを見つけることができない、MySQLが正しく動作しない場合があります。」>> $ HOMEDIR /ログ/ $ログファイルの
        7番出口
Fiの

#执行全量备份
は/ usr / binに/ innobackupex --defaults-ファイル=は/ etc / my.cnfの--user =ルート--password = "ABC 123 @"は/ opt / DB_backup / full_bakcup /&>> $のHOMEDIR /ログ/ $ログファイル
[$?-eq 0] &&エコー"のフルバックアップ成功しました。" >> $ HOMEDIR /ログ/ $ログファイル

#増分バックアップは、前の週/ homeディレクトリに転送され、一時的に記憶
tmp_back_name = "`日付-d "-7日" + "%Y%mの%dの" `-`date -d" -1日"+"をY%mの%のD% "`"
タール-zcvf /home/old_DB_backup/$tmp_back_name.tar.gzは/ opt / db_backup / incremental_backup / >> 201 *&$ HOMEDIR /ログ/ $ログファイル&& RM -rfは/ opt / db_backup / incremental_backup / *&>> $ HOMEDIR /ログ/ $ログファイル&&エコー" $ tmp_back_name増分バックアップの一時的な成功を保存するために/ homeディレクトリに転送。" >> $ HOMEDIR /ログ/ $ログファイル

  増分バックアップ

  また、MySQLの増分バックアップフローティングIPホストによってそれがマスター・データベースと判断し、その後、通常の動作状態のMySQLか否かを判断されていません。ホストがフルバックアップされていない、または最新のフルバックアップは、7日前に何の増分バックアップ、フルバックアップにシフトされていない場合は、再度フルバックアップディレクトリを依存しますことで決意が決定されます。それ以上、いくつかのディスク領域を占有しますがので、毎日の増分バックアップは、月曜日のバックアップベースの全額を使用しているが、リカバリを実行する必要がある場合にのみ、二回、回復アクションをすることができます。

#増分バックアップスクリプト
#!/ binに/ bashのの
#MySQLの増分バックアップの目的で、このスクリプトは一日一回

HOMEDIR =は/ opt / DB_backup

#裁判官増分バックアップには、新しい存在しない場合、ディレクトリが存在してログインすると、ディレクトリを保存し
、[-dは/ opt / db_backup / incremental_backup] ||ます。mkdir -pは/ opt / db_backup / incremental_backup
| [-dは/ opt / db_backup /はログに記録します] |ます。mkdir -pは/ opt / dB_backup /ログ

#バックアップセットログ
ログファイル= '日付"+%のY %のM%dの" `_incremental_backup.log

タッチ$ HOMEDIR /ログ/ $ログファイル

ライブラリは、スクリプトを実行するには、メインの出口でない場合は#、ホストはライブラリとメインのmysqlではないかを確認します。
/ sbinに/ IP addrの| grepを192.168.1.10
IF [$ -ne 0?];そして、
        これはマスターDBではない」エコー、バックアップの必要性NOへ。「>> $ HOMEDIR /ログ/ $ログファイルの
        3番出口
Fiの

#检查mysqlの是否运行正常
の/ usr / sbinに/のlsof -i:3306 | grepがLISTEN
[$場合は?-ne 0];その後、
        「MySQLはMySQLのLISTEN見つけることができない、正しく動作しない場合があります。」エコー >> $ HOMEDIR /ログ/ $ログファイルの
        5番出口
Fiの

ps -ef | grepを/ホーム/ mysqlの/ binに/ mysqldの
場合は[$?-ne 0];その後、
        エコー「のmysqlのPIDを見つけることができない、MySQLが正しく動作しない場合があります。」>> $ HOMEDIR /ログ/ $ログファイルの
        7番出口
Fiの


#増分バックアップの合計金額を確認している依存電流のバックアップディレクトリ
のbasedir -lrt LS = `は/ opt / db_backup / full_bakcup |尾-1 | awkの。{} 9印刷$ '`
ホストが行われていない場合は#精神フルバックアップが決定され、フルバックアップ、キャンセル増分バックアップを実行
[「$のBASEDIR」==「」]のIF;そして
    。エコーを「これはDBが前に、実行することができないと増分バックアップ」>> $ HOMEDIR /ログ/ $ログファイルをdoesntのフルバックアップを持っています
    エコー>> $ HOMEDIR /ログ/ $ログファイル「を実行し始めフルバックアップに」。
    SH /opt/DB_backup/shell/full_backup.sh
    IF [$ -eq 0?];その後、
        最初のフルバックアップサーバーで、」エコーは、この成功オンになっています、ウィルによって増分バックアップとAT明日。「>> $ HOMEDIR /ログ/ $のログファイルから始まり
        終了
    Fiの
    出口77
Fiの

#は、総量がバックアップの7日以内にない場合、7日より前に存在するホストの完全バックアップを確認し、フルバックアップを実行している。
Tlの= 'DATE + "%Y-%M-%のD『`
T2 =`エコー』$ BASEDIR "| -F_ awkの。{} 1を印刷$ '`
1日目%S = -d + `DATE" Tlの$ "`
2日目%S = -d + `DATE" T2の$「`
3日目は= $((($ Day1- 2日目$)/ 86400))
[$ 3日目は7 -gt]をIF;その後、
    エコー>> $ HOMEDIR /ログ/ $ログファイルの"最新のでフルバックアップを実行するフルバックアップに始まり、7日前メンバーである"。
    SHは/ opt / db_backup /シェル/ full_backup.sh
    IF [$ -eq 0?];その後、
        エコー"完全Backup Execの成功、PLSチェックフルバックアップログ" >> $ HOMEDIR /ログ/ $ログファイルの
        終了
    Fi回線
    出口99
Fiの

#ログに印刷されたディレクトリのフル・バックアップ
「basedirには、$ BASEDIRである」エコーの$ HOMEDIR /ログ/ $ログファイル>>

#执行增量备份
は/ usr / binに/ innobackupex --defaults-ファイル=は/ etc / my.cnfの--user =ルート--password = "123 @ ABC" --incremental --incremental-BASEDIR =は/ opt / DB_backup / full_bakcup / $ BASEDIRは/ opt / DB_backup / incremental_backup >> $ HOMEDIR /ログ/ $ログファイル

[$?-eq 0] &&エコー "増分バックアップ成功しました。" >> $ HOMEDIR /ログ/ $ログファイル

3、復旧計画

  データ復旧作業は比較的簡単です

  回復の全額

--applyログデータファイルの作用によって、準備する#は、ロールバック、コミットされていない提出されたトランザクションとトランザクションの同期を通じて一貫性のある状態でデータファイルを作ることです
innobackupexはは/ opt / DB_backup --applyログ / full_bakcup / 2019 -05-09_10-45-32

#操作は、すべてのデータ・ソース・ライブラリーを空にし、データディレクトリに元のデータファイルを削除する必要が復元
MySQLの>ドロップデータベースXXX。

RM -rf ib_logfile0 ib_logfile1 ibdata1と

#コマンドの復元
innobackupexの--defaults-ファイルを=の/ etc / mysqlの/ my.cnfの--copyバックは/ opt / DB_backup / full_bakcup / 2019-05-09_10-45-32

  増分リカバリ

#データの一部のみが非可逆のデータは、非可逆データの範囲を決定した後、インクリメンタルに直接復元できる場合
innobackupex --applyログは/ opt / DB_backup / full_bakcup / 2019-05-09_10-45-32 --incremental -dir = /ホーム/ dB_backup / incremental_backup / 2019-05-11_03-00-00

#すべてのデータが破損している場合、次の操作を実行
#1を、第1還元の総量
innobackupex --defaultsファイル=の/ etc / MySQLの/ my.cnfの--copyバック/ OPT / DB_backup / full_bakcup / 2019-05-09_10-45 -32
#2、インクリメンタル削減
innobackupex --applyログは/ opt / dB_backup / full_bakcup / 2019-05-09_10-45-32 --incremental-DIR = /ホーム/ dB_backup / incremental_backup / 2019-05-11_03- 00-00

おすすめ

転載: www.linuxidc.com/Linux/2019-08/159946.htm