簡単に言えMySQLのマスタースレーブのレプリケーションで

概要

レプリケーションのMySQL(MySQLのマスタースレーブのレプリケーション何が)ありますか?

なぜ複製どのようなマスター・スレーブ原理とその実装?

MySQLのマスタースレーブレプリケーションの概念

MySQLのデータは、1つ以上のノードからMySQLデータベースサーバにマスタノードからコピーすることができる複製マスターを指します。MySQLのデフォルトの非同期レプリケーション、そのノードは、更新、データを更新するからメインサーバーにアクセスする必要がないであろうと、データがリモート接続で実行することができ、すべてのデータベース・マスター・データベースまたは特定のデータベースノードから、または特定のテーブルをコピーすることができます。

MySQLのマスタースレーブレプリケーションの主な目的

lの別々の読み取りと書き込み

開発作業では、時々ロックテーブルへのSQL文のニーズを満たすため、一時的なサービスで結果を読み取るために使用することはできません、これは、既存のビジネス、マスタースレーブレプリケーションの使用に影響しますので、メインのライブラリはそう、図書館責任からの読み取り、書き込みを担当していること場合でも、メインのライブラリのシーンは、事業の正常な動作を保証することができ、ライブラリから読み込むことでロックテーブルが登場しました。

ノードは、システムが容易にフェイルオーバーすることができる失敗リアルタイムでLバックアップデータ、

L HA HA

lのスキーマ拡張

ビジネス交通システムの増加に伴い、それはスタンドアローンのデータベースを展開することであるならば、それはI / Oアクセス頻度につながる高すぎます。マスタースレーブのレプリケーションと、I / O性能を向上させるデータ記憶ノード、複数のノードから負荷分散、単一のディスクI / Oアクセス頻度を低減する、単一のマシンの数を増加させます。

MySQLのマスタースレーブ形

マスタースレーブ

マルチマスタから読み取るために、システムのパフォーマンスを向上させるために
IMG
、マスタからマスタと、最も一般的なマスタ-スレーブ・アーキテクチャの複数、それによって同時クラスタを高める、実装が簡単で効果的な、唯一のHAを実装することができるではないが、また別リードとライトであります容量。

マルチマスタ(5.7からスタートをサポートする)から

IMG
あなたは、ストレージサーバの比較的良好なパフォーマンスに、複数のMySQLデータベースのバックアップからマルチマスタかもしれません。

デュアルマスターレプリケーション

デュアルマスター複製、すなわち複製相互両方のマスターマスターのそれぞれからのショット、および他のサーバのスレーブ。いずれかの当事者によって行われたこのような変更は、データベースをコピーして他の当事者に適用されます。

複製カスケード
IMG
カスケードコピーモードを、マスタノードのスレーブ部は、データの同期に接続されていないが、ノードから接続されています。ノードからマスターノードは、損失がレプリケーションのパフォーマンスの一部となりますので、あまりにも多く存在する場合、我々は、マスタノードからノードを結ぶ5に3を作ることができ、そのようにノードから2または3に接続された他のノードだけでなく、あなたはマスターノードの圧力、およびデータの整合性に悪影響を緩和することができます。

MySQLのマスタースレーブレプリケーションの原則

マスターノードで実行されているMySQLの3つのスレッド(ログ・ダンプ・スレッド)からのマスタコピーに関する、残りの2つ(I / Oスレッド、SQLスレッド)を以下に示すように、ノードから実行されています。

IMG
リットル主バイナリログ・ダンプ・スレッド

マスターノードからマスターノードを接続する場合、コンテンツ伝送のビンログのログ・ダンプ・スレッドを作成します。ビン・ログ内の読み出し動作では、マスターノード上のビン-logがこのスレッドをロックする読み取りが完了した時点で、でもノードへの打ち上げ前に、ロックが解除されます。

ノードからL I / Oスレッド

ノードから実行されたときにstart slaveコマンドの後に、ノードは、I / Oスレッドは、マスタライブラリビンログを更新するための要求をマスターノードを接続するために使用される作成します。更新I / Oスレッドの後にローカルリレーログに格納され、マスタノードにバイナリログのダンプ・プロセスを受けます。

ノードSQLスレッドからL

SQLスレッドが具体的な行動と実行への決意、コンテンツリレーログを読み込むための責任があり、そして最終的にマスターからのデータの一貫性を確保します。

各マスター・スレーブ接続の場合、それが完了するために、三つのプロセスが必要です。が現在の接続を構築するために、各ノードからのバイナリログ・ダンプ・プロセスにマスターノードから複数のノードのマスターノードであり、各ノードからそれ自身のI / O処理、SQLプロセスを有する場合。場合読出し動作の性能を損なうことなく、そのデータ同期タスクので、別々のタスクにクラ更新及び実装を取ることにより、マスタノードから二つのスレッド。プロセスは、SQLを実行していないが、例えば、ノードはこの時間I / Oプロセスから実行されていない場合はすぐに、マスターノードから更新を取得することができます。あなたはSQL実行処理の前にノードからサービスを停止する場合は、少なくとも、I / Oプロセスは最新の変更にマスターノードから引き出され、ローカルリレーログに保存されている、とき再びサービスまで、あなたは、データの同期化を完了することができます。

要实施复制,首先必须打开Master 端的binary log(bin-log)功能,否则无法实现。

因为整个复制过程实际上就是Slave 从Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。如下图所示:

IMG
复制的基本过程如下:

从节点上的I/O 进程连接主节点,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;主节点接收到来自从节点的I/O请求后,通过负责复制的I/O进程根据请求信息读取指定日志指定位置之后的日志信息,返回给从节点。返回信息中除了日志所包含的信息之外,还包括本次返回的信息的bin-log file 的以及bin-log position;从节点的I/O进程接收到内容后,将接收到的日志内容更新到本机的relay log中,并将读取到的binary log文件名和位置保存到master-info 文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log 的哪个位置开始往后的日志内容,请发给我”;Slave 的 SQL线程检测到relay-log 中新增加了内容后,会将relay-log的内容解析成在祝节点上实际执行过的操作,并在本数据库中执行。

MySQL 主从复制模式

MySQL 主从复制默认是异步的模式。MySQL增删改操作会全部记录在binary log中,当slave节点连接master时,会主动从master处获取最新的bin log文件。并把bin log中的sql relay。

l 异步模式(mysql async-mode)

异步模式如下图所示,这种模式下,主节点不会主动push bin log到从节点,这样有可能导致failover的情况下,也许从节点没有即时地将最新的bin log同步到本地。
IMG

l 半同步模式(mysql semi-sync)

这种模式下主节点只需要接收到其中一台从节点的返回信息,就会commit;否则需要等待直到超时时间然后切换成异步模式再提交;这样做的目的可以使主从数据库的数据延迟缩小,可以提高数据安全性,确保了事务提交后,binlog至少传输到了一个从节点上,不能保证从节点将此事务更新到db中。性能上会有一定的降低,响应时间会变长。如下图所示:
IMG

半同步模式不是mysql内置的,从mysql 5.5开始集成,需要master 和slave 安装插件开启半同步模式。

l 全同步模式

全同步模式是指主节点和从节点全部执行了commit并确认才会向客户端返回成功。

binlog记录格式
MySQL 主从复制有三种方式:基于SQL语句的复制(statement-based replication,SBR),基于行的复制(row-based replication,RBR),混合模式复制(mixed-based replication,MBR)。对应的binlog文件的格式也有三种:STATEMENT,ROW,MIXED。

l Statement-base Replication (SBR)就是记录sql语句在bin log中,Mysql 5.1.4 及之前的版本都是使用的这种复制格式。优点是只需要记录会修改数据的sql语句到binlog中,减少了binlog日质量,节约I/O,提高性能。缺点是在某些情况下,会导致主从节点中数据不一致(比如sleep(),now()等)。

l Row-based Relication(RBR)是mysql master将SQL语句分解为基于Row更改的语句并记录在bin log中,也就是只记录哪条数据被修改了,修改成什么样。优点是不会出现某些特定情况下的存储过程、或者函数、或者trigger的调用或者触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是修改table的时候会让日志暴增,同时增加bin log同步时间。也不能通过bin log解析获取执行过的sql语句,只能看到发生的data变更。

l Mixed-format Replication(MBR),MySQL NDB cluster 7.3 和7.4 使用的MBR。是以上两种模式的混合,对于一般的复制使用STATEMENT模式保存到binlog,对于STATEMENT模式无法复制的操作则使用ROW模式来保存,MySQL会根据执行的SQL语句选择日志保存方式。

GTID复制模式
@ 在传统的复制里面,当发生故障,需要主从切换,需要找到binlog和pos点,然后将主节点指向新的主节点,相对来说比较麻烦,也容易出错。在MySQL 5.6里面,不用再找binlog和pos点,我们只需要知道主节点的ip,端口,以及账号密码就行,因为复制是自动的,MySQL会通过内部机制GTID自动找点同步。

@ 多线程复制(基于库),在MySQL 5.6以前的版本,slave的复制是单线程的。一个事件一个事件的读取应用。而master是并发写入的,所以延时是避免不了的。唯一有效的方法是把多个库放在多台slave,这样又有点浪费服务器。在MySQL 5.6里面,我们可以把多个表放在多个库,这样就可以使用多线程复制。

原理GTIDの複製に基づいて
、マスタノード更新データがバイナリログにログに記録、トランザクションの前にGTIDを生成します。ビンI / Oスレッドの変更ノードログ、および現地でのリレーログへの書き込みから。SQLスレッドはリレーログ内からGTIDを取得し、ローカルバイナリログレコード(MySQLのスレーブがバイナリログ開かれている必要がありますので)かどうかを比較します。GTIDトランザクションが実行されたとあなたは、記録されている場合、ノードは無視されます。トランザクションのレコードがない場合はノードからのリレーログからGTIDを実行し、そしてビンログを記録されます。構文解析処理中でない場合に使用することがあれば二次インデックスの全走査は、主キーが存在するか否かを決定します。

概要

MySQLのMySQLのマスタースレーブのレプリケーションは、この基盤に、高性能の基盤非常に利用できる、MySQLの展開は異なるビジネスシナリオに応じて調整柔軟に対応できる、柔軟かつ多様なシンプルになります。

公開された107元の記事 ウォン称賛14 ビュー40000 +

おすすめ

転載: blog.csdn.net/belongtocode/article/details/102793447