mysqlバックアップとリストア(一)

4520 ワード

【学習ノート】
なぜバックアップするのですか?ディザスタリカバリ:ハードウェア障害、ソフトウェア障害、自然災害、ハッカー攻撃、誤操作テストなどのデータ消失シーン
バックアップの注意点
  • 最大損失数を許容できる
  • データを復元するには、
  • を完了するのにどれくらいの時間がかかりますか.
  • リカバリする必要があるデータ
  • ≪バックアップ・タイプ|Backup Type|oem_src≫:≪フル・バックアップ|Full Backup|oem_src≫:データセット全体の部分バックアップ:部分ライブラリやテーブルなどのデータ・サブセットのみをバックアップします.
    フル・バックアップ、インクリメンタル・バックアップ、差分バックアップインクリメンタル・バックアップ:最近のフル・バックアップまたはインクリメンタル・バックアップ(インクリメンタルがある場合)以降に変化したデータのみをバックアップします.バックアップが速く、複雑な差分バックアップをリストアします.最近のフル・バックアップ以降に変化したデータのみをバックアップします.バックアップが遅く、リストアが簡単です.注意:バイナリ・ログ・ファイルはデータ・ファイルと同じディスクに置くべきではありません.
     
    コールド、温、ホット・バックアップ
  • 冷備:読み書き操作は
  • 不可
  • 温備:読み取り操作が実行可能;ただし、書き込み操作は実行できない
  • ホットスペア:読み書き操作は
  • を実行できます.
    MyISAM:温備、熱備InnoDBをサポートしない:いずれもサポートする
    物理および論理バックアップ
  • 物理バックアップ:データファイルを直接コピーしてバックアップを行い、ストレージエンジンと関係があり、多くの空間を占有し、速度が
  • 速い.
  • 論理バックアップ:データベースからデータを「エクスポート」して保存するバックアップは、ストレージエンジンに関係なく、占有スペースが少なく、速度が遅く、精度が失われる可能性があります
  • .
    バックアップ時に考慮すべき要因
  • 温製のロックはどのくらい
  • ですか?
  • バックアップによる負荷
  • バックアッププロセスの時間
  • 回復プロセスの時間長
  • バックアップ
  • データ
  • バイナリ・ログ、InnoDBのトランザクション・ログ
  • プログラムコード(ストアドプロシージャ、関数、トリガ、イベントスケジューラ)
  • サーバのプロファイル
  • バックアップツール

  • cp,tarなどのレプリケーションアーカイブツール:物理バックアップツール、すべてのストレージエンジンに適用;冷却のみをサポートします.完全および部分バックアップ
  • LVMのスナップショット:先にロックをかけて、スナップショットをしてからロックを解除して、ほとんどホットスペアです;ファイルシステムツールによるバックアップ
  • mysqldump:論理バックアップツール、すべてのストレージエンジンを適用し、温備;完全または一部のバックアップをサポートします.InnoDBストレージエンジンに対してホットスペアをサポートし、binlogのインクリメンタルバックアップ
  • を結合する.
  • xtrabackup:PerconaがInnoDBのホットスペア(物理バックアップ)をサポートするツールを提供し、フルバックアップ、インクリメンタルバックアップ
  • をサポートする.
  • MariaDB Backup:MariaDB 10.1.26から統合を開始し、PerconaXtraBackup 2.3.8に基づいて
  • を実現
  • mysqlbackup:ホットバックアップ、MySQL Enterprise Editionコンポーネント
  • mysqlhotcopy:PERL言語で実装され、ほとんど冷却され、MyISAMストレージエンジンのみに適用されます.
  • は、LOCK TABLES、FLUSH TABLES、およびcpまたはscpを使用して、データベース
  • を迅速にバックアップする.
    コールドバックアップ:(2台のホストシミュレーションを使用し、そのうちの1台(A)は作業ホストとしてそのデータをバックアップし、バックアップデータを別のホスト(B)に回復する)
    1.mysqlサービスの停止
    2.データベース・ディレクトリ全体の圧縮パッケージング・データベース・データ・ファイルをデフォルト/var/lib/mysql/下に保存
    tar Jcvf /data/mysql.bak.tar.xz /var/lib/mysql/

    3.圧縮パッケージを別のホストにコピーする(B)
    scp mysql.bak.tar.xz 192.168.36.27:/data/

    4.ホストBでファイルを/var/lib/mysql/下に解凍し、データベースを起動します.
     
     
    LVMベースのバックアップ
    (1)すべてのテーブルmysql>FLUSH TABLES WITH READ LOCKのロックを要求する.(2)バイナリログファイル及びイベント位置mysql>FLUSH LOGSを記録する.mysql> SHOW MASTER STATUS; mysql-e'SHOW MASTER STATUS'>/PATH/DO/SomeEFILE(3)スナップショットlvcreate-L#-s-pr-n NAME/DEP/VG_を作成NAME/LV_NAME(4)ロック解除mysql>UNLOCK TABLES;(5)スナップショットボリュームをマウントし、データバックアップを実行する(6)バックアップが完了した後、スナップショットボリュームを削除する(7)ポリシーを制定し、元のボリュームからバイナリログをバックアップする
     
     
     
     
    実験:完全にバックアップし、最新の状態に復元
    1 vim/etc/myの準備cnf [mysqld]                                                                                                log-bin=/data/binlog/mysql-bin datadir=/var/lib/mysql
    2 mysqldump-A-F--single-transaction--master-data=2|gzip>/data/allをバックアップする.sql.gzはデータの変更を継続する
    3シミュレーション破壊systemctl stop mariadb rm-rf/var/lib/mysql/*
    リストア時にユーザがデータベースにアクセスすることを禁止するiptables 4をバックアップ時状態systemctl start mariadb gzip-d/data/allにリストアする.sql.gz mysql  > set sql_log_bin=off; > source/data/all.sql;
    5最新状態grep"CHANGE MASTER"/data/allに復元する.sql position mysql-binを表示します.000002 245 
    cd/data/binlog/mysqlbin --start-position=245 mysql-bin.000002 >/data/incr.sql mysqlbin  mysql-bin.000003  >>/data/incr.sql mysqlbin  mysql-bin.000004  >>/data/incr.sql
    mysql  > set sql_log_bin=off; > source/data/incr.sql; > set sql_log_bin=on;
    6オープンユーザーアクセスデータベース
    実験:誤って削除されたテーブルを復元
    1準備、バイナリログ機能有効
    2 mysqldump-A-F--single-transaction--master-data=2|gzip>/data/allを完全バックアップする.sql.gz
    3データベースの変更
    4テーブル10:00 drop table testlogを削除
    5データベースの変更10:10
    6 flush tables with read lockユーザーアクセス禁止ユーザー数
    7バックアップ時の状態systemctl stop mariadb rm-rf/var/lib/mysql/*systemctl start mariadb gzip-d/data/allに復元する.sql.gz mysql  > set sql_log_bin=off; > source/data/all.sql;
    8バイナリログを分析し、drop table指令grep-i「change master」/data/allを見つけた.sql 245 mysql-bin.000002 mysqlbinlog --start-position=245 mysql-bin.000002 >/data/incr.sql   vim  /data/incr.sql drop table命令を見つけて、この命令に注釈します
    mysqlbinlog  mysql-bin.000003 >>/data/incr.sql mysqlbinlog  mysql-bin.000004 >>/data/incr.sql
    9最新状態mysql>set sql_に復元log_bin=off; > source/data/incr.sql; > set sql_log_bin=on;
    10データの完全性の確認
    11オープンユーザーアクセス