mysqlバックアップインスタンス攻略

9510 ワード

本システムCentos 6.0
まず、バックアップ用語を普及させます.
  • ホット・バックアップ:読み取り、書き込みは影響を受けません.
  • 温バックアップ:読み取り操作のみを実行できます.
  • コールドバックアップ:オフラインバックアップ;読み取り、書き込み操作はすべて中止します.

  • バックアップは、一般的に次の部分をバックアップします.
    1.データファイル
    2.ログ・ファイル(トランザクション・ログ、バイナリ・ログなど)
    3.ストアド・プロシージャ、ストアド関数、トリガ
    4.プロファイル(各プロファイルをバックアップすることが重要)
    一、よく使うバックアップツール
    1.Mysqlに付属のバックアップツール
  • mysqldumpロジックバックアップツールは、すべてのエンジンをサポートし、MyISAMエンジンは温備、InnoDBエンジンは熱備、バックアップ速度は中速、リストア速度は非常に遅いが、リストアを実現する際には、大きな操作余地がある.弾力性がある.
  • mysqlhotcopy物理バックアップツールですが、MyISAMエンジンのみサポートされており、基本的には冷備の範疇に属し、物理バックアップ、速度が比較的速いです.

  • 2.ファイルシステムバックアップツール
  • cpコールドバックアップは、すべてのエンジンをサポートし、コマンドをコピーし、コールドバックアップ、物理バックアップしか実現できません.アーカイブツール、cpコマンドを使用してバックアップを行う場合、バックアップ速度が速く、リストア速度がほぼ最速ですが、柔軟性が低く、システムにまたがることができますが、プラットフォームにまたがる能力が悪いです.
  • lvmはほとんどホットバックアップで、すべてのエンジンをサポートし、スナップショット(LVM,ZFS)ベースの物理バックアップで、速度が非常に速く、ほとんどホットスペアです.データに影響を与えるのは数秒だけです.しかし、スナップショットを作成するプロセス自体がデータベースのオンライン使用に影響を与えるため、バックアップ速度が速く、リカバリ速度が速く、弾力性がなく、LVMの制限がありません.また、LVMの制限は、複数の論理ボリュームを同じ時間にバックアップできないため、データファイルやトランザクションログなどの各種ファイルは同じLVM上に置かなければなりません.ZFSは、マルチ論理ボリューム間でバックアップすることができます.

  • 3.その他のツール
  • xtrabackupオープンソースツールMyISAMは温バックアップ、InnoDBはホットバックアップ、ibbackupビジネスツールの代替ツール
  • 二、バックアップ例:
    ここではlvmのパーティション:mysql 5を作成しました.6コンパイルインストール完了;
    mysqlのdatadir=/usr/dataつまりlvmがマウントされている場所
    mysqlのtestライブラリには2つのテーブルがあります.t 1の大きさは388 M程度である.t 2の大きさは210 M程度である.
    こちらのテスト中のMyを見せてください.cnf
    [root@centos test]# vim /etc/my.cnf
    [mysqld]
    datadir=/usr/data
    socket=/tmp/mysql.sock
    user=mysql
    server-id=1
    log-bin=mysql-bin
    report-port=3306
    port=3306
    symbolic-links=0
    [mysql_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

    こちらのバックアップ操作は全部で4つの方法です.
    方式1>;mysqldump:
    mysqldumpバックアップデータベース(フルバックアップ+増加バックアップ、比較的遅い速度で中小型データベースに適している)(MyISAMは温バックアップ、InnoDBはホットバックアップ)
    mysqldumpはSQLレベルのバックアップメカニズムを採用しており、データテーブルをSQLスクリプトファイルに導き、異なるMySQLバージョン間でアップグレードする場合に適しています.これも最も一般的なバックアップ方法です.mysqldumpはダイレクトコピーより遅いです.中級レベルのビジネス・ボリュームのシステムでは、バックアップ・ポリシーは、最初のフル・バックアップ、毎日1回のインクリメンタル・バックアップ、週に1回のフル・バックアップを繰り返します.重要で多忙なシステムでは、1日に1回のフルバックアップ、1時間に1回のインクリメンタルバックアップ、さらに頻繁なバックアップが必要になる場合があります.オンラインビジネスに影響を及ぼさず、オンラインバックアップを実現し、インクリメンタルバックアップを実現するためには、主従レプリケーションメカニズムを採用し、slaveマシン上でバックアップを行うことが最善の方法です.
    方式2>;直接cpデータベースファイル:
    直接バックアップメソッドを使用する場合は、テーブルが使用されていないことを保証する必要があります.サーバがテーブルをコピーしている間に変更すると、コピーは意味を失います.コピーの整合性を保証する最善の方法は、サーバを閉じ、ファイルをコピーし、サーバを再起動することです.サーバを閉じたくない場合は、テーブルチェックを実行しながらサーバをロックします.サーバが実行されている場合、同じ制約はファイルのコピーにも適用されます.また、同じロックプロトコルを使用してサーバを「静かに」する必要があります.バックアップが完了したら、サーバを再起動するか(閉じた場合)、テーブルに追加されたロックを解除する必要があります(サーバを実行させる場合).直接コピーファイルで1つのデータベースを1つのマシンから別のマシンにコピーするには、ファイルを別のサーバホストの適切なデータディレクトリにコピーするだけです.ファイルがMyIASM形式であるか、2台のマシンが同じハードウェア構造を持っていることを確認します.そうしないと、データベースが別のホストに奇妙な内容を持っています.別のマシンのサーバがデータベース・テーブルをインストールしている間にアクセスしないことを保証する必要があります.
    方式3>;lvmスナップショット:
    lvmスナップショットは物理的な角度からほぼホットな完全バックアップを実現し、バイナリログバックアップと協力して増分バックアップを実現し、速度が速く、比較的忙しいデータベースに適している.
    前提:
  • データファイルは論理ボリュームにあります.
  • この論理ボリュームが存在するボリュームグループには、スナップショットボリュームを使用するのに十分なスペースが必要です.
  • データファイルとトランザクションログは同じ論理ボリュームにあります.

  • 方式4>;xtrabackupバックアップツール.xtrabackupはデータベースをバックアップし、完全なホットバックアップとインクリメンタルホットバックアップを実現する(MyISAMは温バックアップ、InnoDBはホットバックアップ)
    3、インスタンス操作:
    方式1>;mysqldump:
    ●現在のlog statusを表示する;
    mysql> show master status;

    ●全ライブラリをバックアップする;バックアップファイルの特定
    mysqldump -u root -p --all-databases --lock-all-tables --routines --triggers --events --master-data=2 --flush-logs > /backup/201308071550.full.sql
    --all-databases   # 
    --lock-all-tables # 
    --routinge        # 
    --triggers        # 
    --events          # 
    --master-data=2   # , ,1 
    --flush-logs      # 

    ●この時のlog statusを確認する;
    ●増分バックアップのために数本のデータを追加する;
    mysql> insert into test.t1(id,user_name,user_passwd)values(10000,' ','123'),(10001,' ','123'),(10002,' ','123');

    ●binlogログのバックアップ
    cp /usr/data/mysql-bin.000007 /backup/201308071550.full.binlog.000001

    ●アナログデータベース破損、復旧
    rm -rf /usr/data/*
    killall mysqld
    /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/data/ --user=mysql
    service mysqld start
    mysql -u root -p
    mysql> source /backup/201308071550.full.sql

    [原句]これで、私たちが完全に準備していたときのデータが復元されたことに気づきます.そしてその後挿入された「三大天王」はいなかった.
    ●その後挿入したデータを復元する;天王のデータがあるかどうか見てみましょう.
    [root@centos ~]# mysqlbinlog /backup/201308071550.full.binlog.000001 |mysql test

    ここで、:mysqldumpの操作は終わり、モードを回復し、初めてbinlogログを完全に追加します.
    方式2>;直接cpデータベースファイル(この方法は簡単ですが、個人的にはcpの前にlockを行うことをお勧めします)
    ◆まず時計をロックする:
    mysql> flush tables with read lock;

    ◆cpデータファイル:
    mkdir /backup/`date +%F-%H-%M-%S`
    cp -pr /usr/data/* /backup/2013-08-07-17-02-19/

    ◆ロック解除:
    mysql> unlock tables;

    ◆シミュレーションを開始してデータベースを破壊して復元する:
    rm -rf /usr/data/*
    killall mysqld
     /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/data/ --user=mysql
    cp -pr /backup/2013-08-07-17-02-19/* /usr/data/
    service mysqld start

    ◆これで正常に戻った.
    方式3>;lvmスナップショット
    ★ロックテーブル、ロゴを更新する;
    mysql> flush tables with read lock;
    mysql> flush logs;

    ★別端末、lvmスナップショット
    lvcreate -L 1G -n mysql-snapshot -s -p r /dev/mylvm/lansgg

    注:私の/dev/mylvmというvgは全部で5 Gで、lansggというlvに4 Gを分けて、まだ1 G残っています.
    -L 1G              # 
    -n mysql-snapshot  # 
    -s                 # 
    -p r               #permission  

    ロック解除:
    mysql> unlock tables;

    ★スナップショットをマウントし、スナップショットのデータcpを1つのディレクトリに入れ、アンインストールし、スナップショットを削除する
    mkdir /backup/lvmsnapshot
    mount /dev/mylvm/mysql-snapshot /mnt/
    cp -pr /mnt/* /backup/lvmsnapshot/
    umount /mnt/
    lvremove /dev/mylvm/mysql-snapshot

    ★データ破壊、復旧
    rm -rf /usr/data/*
    killall mysqld
    cp -pr /backup/lvmsnapshot/* /usr/data/

    復旧完了
    Ps:以上のインクリメンタルバックアップは同じ方法で行うことができます.
    方式4>;xtrabackupバックアップツール
    ▲インストールに必要なパッケージ:
    yum install libaio libaio-devel perl-Time-HiRes curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel perl-ExtUtils-MakeMaker perl-DBD-MySQL.*  -y

    ▲xtrabackupをインストールする:
    wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/binary/Linux/i686/percona-xtrabackup-2.1.3-608.tar.gz
    tar zxvf percona-xtrabackup-2.1.3-608.tar.gz
    cd percona-xtrabackup-2.1.3/bin/
    cp * /usr/bin/

    ▲全ライブラリバックアップ:
    innobackupex --ibbackup=xtrabackup --user=root --password=123 --defaults-file=/etc/my.cnf /tmp/data/

    省略~~~結末を見る
    ▲バックアップファイルの表示:
    データは/tmp/dataのディレクトリ名が現在の日付に完全にバックアップされ、xtrabackupはすべてのInnoDBテーブルをバックアップします.MyISAMテーブルはテーブル構造ファイルとMyISAM、MERGE、CSV、ARCHIVEテーブルの関連ファイルのみをコピーし、トリガとデータベース構成情報に関連するファイルもバックアップします.データの保存に加えてxtrabackupに必要なデータファイルも生成されます
  • xtrabackup_checkpointsバックアップタイプ(フルまたはインクリメンタルなど)、バックアップステータス(preparedステータスかどうかなど)、LSN(ログシーケンス番号)の範囲情報.各InnoDBページ(通常は16 kサイズ)には、LSNというログ・シーケンス番号が含まれます.LSNはデータベースシステム全体のシステムバージョン番号であり、各ページに関連するLSNは、このページが最近どのように変更されたかを示すことができる.
  • xtrabackup_binlog_info mysqlサーバが現在使用しているバイナリログファイルは、バックアップの瞬間までバイナリログイベントの場所です.
  • xtrabackup_binaryバックアップで使用されるxtrabackupの実行可能ファイル.
  • backup-my.cnfバックアップコマンドで使用する構成オプション情報.
  • xtrabackup_logfile記録標準出力情報xtrabackup_logfile

  • ▲テスト復旧データ:
    killall mysqld
    rm -rf /var/lib/mysql/*
    innobackupex --apply-log /tmp/data/2013-08-11_14-54-26/
    innobackupex --copy-back /tmp/data/2013-08-11_14-54-26/
    chown  -R mysql.mysql /var/lib/mysql/
    service mysqld start

    完全なリカバリ
    注:
    --apply-log commit , commit --copy-back ,
    2、▲ バックアップテスト:
    データの :
    mysql> insert into test.t1(id,user_name) values(10,' ');

    インクリメンタルバックアップ:
    innobackupex --ibbackup=xtrabackup --user=root --password=123 --incremental --incremental-basedir=/tmp/data/2013-08-11_14-54-26/ /tmp/data/
    #--incremental  
    #--incremental-basedir  , 
    ps: InnoDB , MyISAM 

    インクリメンタルバックアップのテストリカバリ:
    killall mysqld
    rm -rf /var/lib/mysql/*
    innobackupex --ibbackup=xtrabackup --apply-log --redo-only /tmp/data/2013-08-11_14-54-26/
    innobackupex --ibbackup=xtrabackup --apply-log /tmp/data/2013-08-11_14-54-26/ --incremental-dir=/tmp/data/2013-08-11_15-16-47/
    innobackupex --copy-back /tmp/data/2013-08-11_14-54-26/
    chown -R mysql.mysql /var/lib/mysql/
    service mysqld start

    の は、インクリメンタルテストが したことを しています.
    3、 :
    ▼ ライブラリを にバックアップし、パッケージ する:
    innobackupex --ibbackup=xtrabackup --user=root --password=123 --defaults-file=/etc/my.cnf --database=test --stream=tar /tmp/data/ > /tmp/data/testfull201308111624.tar

    ▼ ライブラリを にバックアップして する:
    innobackupex --ibbackup=xtrabackup --user=root --password=123 --defaults-file=/etc/my.cnf --database=test --stream=tar /tmp/data/ |gzip > /tmp/data/testfull201308111628.tar.gz

    ▼ ライブラリ バックアップ:
    innobackupex --ibbackup=xtrabackup --user=root --password=123 --database=test --incremental --incremental-basedir=/tmp/data/2013-08-11_14-54-26/ /tmp/data/add/

    :https://blog.51cto.com/lansgg/1270430