mysqlマスターXtraBackupリカバリ
6597 ワード
MySQLマスタスレーブ同期原理MySQLマスタスレーブ同期は、MySQLマスタスレーブレプリケーション(Master-Slave Replication)に基づいて実現され、Master MySQLに設定されたbinlog(オープン状態)により、Slave MySQL上でI/Oスレッドを介してMaster MySQLからbinlogを読み出し、Slave MySQLの中継ログに転送するその後、Slave MySQLのSQLスレッドは、中継ログから中継ログを読み出し、Slave MySQLのデータベースに適用します.これにより、プライマリ・スレーブ・データ同期機能が実現されます.XtraBackupバックアップの原理innobackupexは、バックグラウンドスレッドでInnoDBのログファイルを追跡し続け、InnoDBのデータファイルをコピーします.データファイルのコピーが完了すると、ログのコピースレッドも終了します.これにより、同じ時点にないデータのコピーとバックアップ開始後のトランザクション・ログが得られます.上記の手順を完了すると、InnoDBクラッシュ・リカバリ・コードを使用してトランザクション・ログ(redo log)を実行し、データの一貫性を達成できます.
XtraBackupのメリット:データベースを停止することなくInnoDBホットスペア を行う.インクリメンタルバックアップMySQL ストリームは、他のサーバ への送信に圧縮する.は、プライマリスレーブ同期 を比較的容易に作成することができる. MySQLバックアップ時にサーバ負荷が増大しない バックアップには、次の2つのプロセスがあります. backup、バックアップフェーズ、トランザクション・ログの追跡、およびデータ・ファイルのコピー(物理バックアップ). preparing、トランザクション・ログを再生し、すべてのデータを同じ時点にし、一貫性のある状態にします.
なぜマスターコピーをするのですか?これは実施する前によく考えなければならない問題だと思います.読み書き分離を実現し、メインライブラリの負荷やデータ分析を軽減するためですか?データセキュリティのためにバックアップ・リカバリを行いますか?マスタースイッチを高可用性にしますか?ほとんどのシーンでは、以上の3つの疑問符が1つのマスターから1つのマスターから解決され、どの生産環境でも少なくとも1つのスレーブライブラリが必要であることをお勧めします.もしあなたの読み取り操作の圧力が特に大きく、1つのマスターから複数のマスターになるならば、異なるslaveで異なる役割を果たすことができます.例えば、異なるインデックスや異なるストレージエンジンを使用することができます.または、バックアップにのみslaveを使用するには、小さなメモリserverを使用します.(もちろんslaveが多すぎるとmasterの負荷やネットワーク帯域幅に圧力がかかりますが、この場合、カスケード・レプリケーション、すなわちA->B->C)mysqlがサポートするレプリケーション・タイプを考慮できます:(1):文ベースのレプリケーション:プライマリ・サーバ上で実行されるSQL文、サーバ上で同じ文を実行します.MySQLのデフォルトでは、文ベースのレプリケーションが採用されており、効率が高い.正確なレプリケーションができないことが判明すると、行ベースのレプリケーションが自動的に選択されます.(2):ローベースのレプリケーション:サーバからコマンドを1回実行するのではなく、変更するコンテンツを過去にレプリケーションする.mysql 5から0サポート開始(3):ブレンドタイプのレプリケーション:デフォルトでは文ベースのレプリケーションが使用され、文ベースの正確なレプリケーションが発見されると、行ベースのレプリケーションが使用されます.レプリケーションのタイプは、非同期レプリケーションと半同期レプリケーションに分けることもできます.通常は非同期です.つまり、マスターライブラリがCommitを実行した後、マスターライブラリがBinlogログに書き込まれた後、クライアントに正常に戻ります.Binlogログがスレーブライブラリに転送されるのを待つ必要はありません.マスターライブラリがダウンタイムすると、ログが失われる可能性があります.一方、半同期レプリケーションは、ライブラリからBinlogトランザクションが受信され、Relay Logに正常に書き込まれるのを待ってから、Commit操作がクライアントに正常に返されます.このように半同期は、トランザクションが正常にコミットされた後に少なくとも2つのログが記録されることを保証し、1つはメインライブラリBinlog上にあり、もう1つはスレーブライブラリのRelay Log上にあり、データの完全性をさらに保証する.半同期レプリケーションは、プラグインsemisync_を使用して、プライマリスレーブネットワークRTT(往復遅延)に大きく依存します.master/semisync_slave形式が存在する.補足: mysql 5.7はマルチソースレプリケーションを開始し、この特性は同時に多くのmysqlインスタンスを持つのに役立ち、アリクラウドRDS(移行)は同様の方法を実現した. MySQL 5.6.2から始まり、mysql binlogはchecksumチェックをサポートし、5.6.6はデフォルトで有効(CRC 32)であり、mysqlレプリケーションを実現するシーンのシミュレーションに影響を与える.
MySQLレプリケーション・テクノロジーには、(1)データ分散(Data distribution)(2)ロード・バランシング(load balancing)(3)バックアップ(Backups)(4)高可用性とフォールト・トレランス・ラインHigh availability and failoverが次のようにしてXtraBackupバックアップを行うには、まずmysqlがデータから同期し、mysqlがプライマリmysqlのデータをリアルタイムで同期することが特徴です.ここで、通常、マスターmsyqlはmysqlバージョンと同じか、マスターmsyqlがmysqlバージョンより高くないことが要求されます(バージョンクエリー>select version()).一般的に安定した方法は、mysqlバージョン間のbinlog(バイナリログ)フォーマットが異なる場合があり、同期異常を引き起こす可能性があるため、バージョンを同じにすることです.
XtraBackupのメリット:
なぜマスターコピーをするのですか?これは実施する前によく考えなければならない問題だと思います.読み書き分離を実現し、メインライブラリの負荷やデータ分析を軽減するためですか?データセキュリティのためにバックアップ・リカバリを行いますか?マスタースイッチを高可用性にしますか?ほとんどのシーンでは、以上の3つの疑問符が1つのマスターから1つのマスターから解決され、どの生産環境でも少なくとも1つのスレーブライブラリが必要であることをお勧めします.もしあなたの読み取り操作の圧力が特に大きく、1つのマスターから複数のマスターになるならば、異なるslaveで異なる役割を果たすことができます.例えば、異なるインデックスや異なるストレージエンジンを使用することができます.または、バックアップにのみslaveを使用するには、小さなメモリserverを使用します.(もちろんslaveが多すぎるとmasterの負荷やネットワーク帯域幅に圧力がかかりますが、この場合、カスケード・レプリケーション、すなわちA->B->C)mysqlがサポートするレプリケーション・タイプを考慮できます:(1):文ベースのレプリケーション:プライマリ・サーバ上で実行されるSQL文、サーバ上で同じ文を実行します.MySQLのデフォルトでは、文ベースのレプリケーションが採用されており、効率が高い.正確なレプリケーションができないことが判明すると、行ベースのレプリケーションが自動的に選択されます.(2):ローベースのレプリケーション:サーバからコマンドを1回実行するのではなく、変更するコンテンツを過去にレプリケーションする.mysql 5から0サポート開始(3):ブレンドタイプのレプリケーション:デフォルトでは文ベースのレプリケーションが使用され、文ベースの正確なレプリケーションが発見されると、行ベースのレプリケーションが使用されます.レプリケーションのタイプは、非同期レプリケーションと半同期レプリケーションに分けることもできます.通常は非同期です.つまり、マスターライブラリがCommitを実行した後、マスターライブラリがBinlogログに書き込まれた後、クライアントに正常に戻ります.Binlogログがスレーブライブラリに転送されるのを待つ必要はありません.マスターライブラリがダウンタイムすると、ログが失われる可能性があります.一方、半同期レプリケーションは、ライブラリからBinlogトランザクションが受信され、Relay Logに正常に書き込まれるのを待ってから、Commit操作がクライアントに正常に返されます.このように半同期は、トランザクションが正常にコミットされた後に少なくとも2つのログが記録されることを保証し、1つはメインライブラリBinlog上にあり、もう1つはスレーブライブラリのRelay Log上にあり、データの完全性をさらに保証する.半同期レプリケーションは、プラグインsemisync_を使用して、プライマリスレーブネットワークRTT(往復遅延)に大きく依存します.master/semisync_slave形式が存在する.補足:
MySQLレプリケーション・テクノロジーには、(1)データ分散(Data distribution)(2)ロード・バランシング(load balancing)(3)バックアップ(Backups)(4)高可用性とフォールト・トレランス・ラインHigh availability and failoverが次のようにしてXtraBackupバックアップを行うには、まずmysqlがデータから同期し、mysqlがプライマリmysqlのデータをリアルタイムで同期することが特徴です.ここで、通常、マスターmsyqlはmysqlバージョンと同じか、マスターmsyqlがmysqlバージョンより高くないことが要求されます(バージョンクエリー>select version()).一般的に安定した方法は、mysqlバージョン間のbinlog(バイナリログ)フォーマットが異なる場合があり、同期異常を引き起こす可能性があるため、バージョンを同じにすることです.
mysql> select version();
+------------+
| version() |
+------------+
| 5.6.35-log |
+------------+
1 row in set (0.00 sec)
ip :192.168.212.11
:MariaDB [(none)]> select version();
+----------------+
| version() |
+----------------+
| 10.2.6-MariaDB |
+----------------+
1 row in set (0.00 sec)
ip :192.168.212.10
:
mysql> grant replication slave on *.* to 'ff'@'192.168.212.10' identified by 'chylinux';
Query OK, 0 rows affected (0.09 sec)
( )
:( )
( ) ( )
[root@chy01 ~]# rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
:/var/tmp/rpm-tmp.tIRhy2: V4 DSA/SHA1 Signature, ID cd2efd2a: NOKEY
... ################################# [100%]
/ ...
1:percona-release-0.1-3 ################################# [100%]
( rpm yum )
[root@chy01 ~]# yum list | grep percona
[root@chy01 ~]# yum install percona-xtrabackup
( )
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'chy'@localhost identified by 'aminglinux';
Query OK, 0 rows affected (0.00 sec)
( )
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
( mysql)
[root@chy01 ~]# mkdir /data/backup
( backup , mysql )
[root@chy01 ~]# ls -l /data/backup/
4
drwx------ 9 root root 4096 9 2 18:08 2017-09-02_18-08-29
( )
[root@chy01 backup]# tar -zcvf 2017-09-02_18-08-29.tar.gz 2017-09-02_18-08-29
[root@chy01 backup]# du -sh 2017-09-02_18-08-29.tar.gz
540K 2017-09-02_18-08-29.tar.gz
[root@chy01 backup]# rsync -avP /data/backup/2017-09-02_18-08-29.tar.gz 192.168.212.10:/data/backup/
[email protected]'s password:
sending incremental file list
2017-09-02_18-08-29.tar.gz
551406 100% 40.40MB/s 0:00:00 (xfer#1, to-check=0/1)
sent 3090 bytes received 4531 bytes 1172.46 bytes/sec
total size is 551406 speedup is 72.35
( rsync )
( + )
[root@chy ~]# mkdir /data/backup
( )
[root@chy ~]# ls /data/backup/
2017-09-02_18-08-29.tar.gz
( )
[root@chy ~]# du -sh /data/backup/2017-09-02_18-08-29.tar.gz
540K /data/backup/2017-09-02_18-08-29.tar.gz
( )
[root@chy backup]# tar -xzvf /data/backup/2017-09-02_18-08-29.tar.gz
( )
[root@chy backup]# innobackupex --use-memory=512M --apply-log 2017-09-02_18-08-29
( )
[root@chy ~]# /etc/init.d/mariadb stop
Stopping mariadb (via systemctl): [ ]
( , )
[root@chy backup]# rm -rf /data/mariadb/
[root@chy backup]# mkdir /data/mariadb
[root@chy backup]# chown mysql1:mysql1 /data/mariadb
[root@chy backup]# innobackupex --defaults-file=/etc/my.cnf --datadir=/data/mariadb/ --use-memory=512M --copy-back 2017-09-02_18-08-29
( ,innobackupex version 2.3.9 based on MySQL server 5.6.24 Linux (x86_64) (revision id: fde0e3e)
Error: datadir must be specified.
( datadir , )
[root@chy backup]# ls /data/mariadb/
db1 ib_logfile0 mysql performance_schema xtrabackup_binlog_pos_innodb zhucong
ibdata1 ib_logfile1 mysql2 test xtrabackup_info zrlog
( )
[root@chy backup]# /etc/init.d/mariadb start
Starting mariadb (via systemctl): Warning: mariadb.service changed on disk. Run 'systemctl daemon-reload' to reload units.
[ ]
[root@chy backup]# systemctl daemon-reload
[root@chy backup]# /etc/init.d/mariadb start
Starting mariadb (via systemctl): [ ]