MyCat を使用して Linux で MySQL マスター/スレーブの読み取り/書き込み分離を実装する方法

MyCat を使用して Linux で MySQL マスター/スレーブの読み取り/書き込み分離を実装する方法

Linux - MyCat を使用して MySQL マスター スレーブの読み取り書き込み分離を実装する

1. MySQLの読み書き分離

1. MySQLの読み書き分離の概要

世界で最も広く利用されている無料データベースとして、システムの運用・保守に携わるエンジニアであれば誰もが一度は触れたことがあるのではないでしょうか。しかし、実際の運用環境では、独立したデータベースとしての単一の MySQL サーバーは、セキュリティ、高可用性、高同時実行性などの点で、実際のニーズをまったく満たすことができません。

そのため、一般的には、主從復制(Master-Slave)を介してデータを同期し、その後、讀寫分離(MySQL-Proxy/Amoeba)を使用してデータベースの同時負荷容量を向上させるというソリューションが展開され、実装されています。

2. 読み書き分離の動作原理

基本的な原則は、マスター データベースでトランザクションの追加、変更、削除操作 (INSERT、UPDATE、DELETE) を処理し、スレーブ データベースで SELECT クエリ操作を処理することです。データベース レプリケーションは、トランザクション操作によって発生した変更をクラスター内のスレーブ データベースに同期するために使用されます。 内部データ交換プロセスを説明する画像をここに挿入します。

3. 読むことと書くことを分ける必要があるのはなぜですか?

  • アクセス圧力の高まりに直面し、単一サーバーのパフォーマンスがボトルネックとなり、負荷を分散する必要が生じている
  • マスターとスレーブは自身の書き込みと読み取りのみを担当するため、X (書き込み) ロックと S (読み取り) ロックの競合が大幅に軽減されます。
  • スレーブデータベースはMyISAMエンジンを使用して構成することができ、クエリパフォーマンスを向上させ、システムのオーバーヘッドを節約することができます。
  • 冗長性を高め、可用性を向上

3. 読み書き分離を実現する方法

これを実現するには 2 つの方法があります

(1)アプリケーション層の実装:ウェブサイトのプログラム実装。アプリケーション層の実装とは、アプリケーション内およびコネクタ内での読み取りと書き込みの分離の実装を指します。

利点:アプリケーション内で読み取りと書き込みの分離が実現され、インストール後に使用可能になり、展開の難易度がある程度軽減され、アクセス圧力が一定レベル以下になり、パフォーマンスが非常に良好になります。
デメリット:アーキテクチャを調整すると、それに応じてコードを変更する必要があり、自動データベースおよびテーブル パーティション分割などの高度なアプリケーションを実装することが困難であり、大規模なアプリケーション シナリオには適していません。

(2)ミドルウェア層の実装:ミドルウェア層の実装とは、外部ミドルウェアプログラムにおける読み書き分離の実装を指します。

4. 共通ミドルウェアプログラム

(1)Cobar: Alibaba B2Bが開発したリレーショナル分散システムで、約3,000個のMySQLインスタンスを管理しています。 Alibaba でのテストには耐えましたが、その後、作者が退職したため、cobar を保守する人がいなくなり、Alibaba も cobar の代わりに tddl を開発しました。
(2)MyCAT:コミュニティの熱心なファンがAlibaba cobarをベースに二次開発を行い、当時のcobarが抱えていたいくつかの問題を解決し、多くの新機能を追加しました。現在、MyCAT コミュニティは非常に活発で、すでにいくつかの企業が MyCAT を使用しています。全体的にサポートは比較的高く、今後も維持され続けるでしょう。
(3)OneProxy:データベースの専門家であり、Alipayデータベースチームの元リーダーであるLou氏が、C言語を使用してMySQLの公式プロキシコンセプトに基づいて開発しました。OneProxyは商用ミドルウェアです。Lou氏は、いくつかの機能的な点を放棄し、パフォーマンスと安定性に重点を置きました。誰かがそれをテストし、高い同時実行性でも非常に安定していると述べました。
(4)Vitess:このミドルウェアはYouTubeの制作現場で使用されていますが、そのアーキテクチャは非常に複雑です。 これまでのミドルウェアとは異なり、Vitess を使用するには、比較的大きなアプリケーションの変更が必要です。Vitess が提供する言語の API インターフェースを使用するには、その設計アイデアのいくつかを参照することができます。
(5)Kingshard: Kingshardは、360Atlasミドルウェア開発チームの元メンバーであるChen Feiが余暇にGo言語を使用して開発しました。現在、開発には約3人が関わっています。現時点では、使用できるほど成熟した製品ではなく、継続的な改善が必要です。
(7)Atlas: 360チームはMySQLプロキシに基づいてLuaをCで書き直しました。オリジナルバージョンはシャーディングテーブルをサポートしており、シャーディングバージョンがリリースされました。インターネット上で、高同時実行時にクラッシュすることが多いと言っている友人もいたので、使用する場合は事前にテストする必要があります。
MaxScale と MySQL Route: これらのミドルウェアは両方とも公式です。MaxScale は mariadb (MySQL のオリジナルの作成者によって管理されているバージョン) によって開発されました。現在のバージョンではシャーディングはサポートされていません。 MySQL Route は、MySQL の公式企業である Oracle Corporation がリリースしたミドルウェアです。
利点:アーキテクチャ設計がより柔軟です。透過的な水平分割、フェイルオーバー、監視などの高度な制御をプログラムに実装できます。MySQL のパフォーマンスは技術的な手段で向上できます。ビジネス コードへの影響は小さく、安全です。
デメリット:特定の開発および運用チームからのサポートが必要です。

2. MyCATの概要

1. MyCATとは

エンタープライズ アプリケーション開発用の完全にオープン ソースの大規模データベース クラスター。トランザクションと ACID をサポートし、MySQL を置き換えることができる拡張データベース。高価な Oracle クラスターを置き換える MySQL クラスターと見なすことができるエンタープライズ レベルのデータベース。メモリ キャッシュ テクノロジ、NoSQL テクノロジ、および HDFS ビッグ データを統合した新しい SQL Server。従来のデータベースと新しい分散データ ウェアハウスを組み合わせた新世代のエンタープライズ レベルのデータベース製品。斬新なデータベース ミドルウェア製品。

2. MyCatサービスのインストールと設定

MyCat は、Windows、Linux、Mac、Solaris などのシステムへのインストールと実行をサポートするコンパイル済みインストール パッケージを提供します。公式ダウンロードホームページ http://www.mycat.org.cn/

建築:

192.168.1.63 マイキャット
192.168.1.64 マスター 192.168.1.65 スレーブ

Mycat には JDK 1.7 以上が必要です。

ステップ1: jdk-8u191-linux-x64.tar.gzファイルをダウンロードする

[root@xuegod63 ローカル]# wget http://download.oracle.com/otn-pub/java/jdk/8u191-
b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.tar.gz 
#Linux でダウンロードしたパッケージに問題がある場合は、リンクを Windows にコピーしてダウンロードし、Linux にアップロードする必要があります。

ステップ2:新しい/usr/javaフォルダを作成し、jdk-8u191-linux-x64.tar.gzをそのディレクトリに解凍します。

[root@xuegod63 ローカル]# mkdir /usr/java
[root@xuegod63 ローカル]# tar xf jdk-8u191-linux-x64.tar.gz -C /usr/java/

ステップ 3:環境変数を構成する /etc/profile の下部に次の内容を追加します。

[root@xuegod63 local]# vim /etc/profile.d/java.sh #/etc/profile.d/ディレクトリにjava.shファイルを作成し、次の内容を設定します。JAVA_HOME=/usr/java/jdk1.8.0_191
PATH=$JAVA_HOME/bin:$PATH 
クラスパス=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
PATH JAVA_HOME CLASSPATH をエクスポートする
[root@xuegod63 local]# source /etc/profile.d/java.sh #環境変数を有効にする [root@xuegod63 local]# java -version #javaのバージョンを表示 java version "1.8.0_191"
Java(TM) SE ランタイム環境 (ビルド 1.8.0_191-b12)

 Java HotSpot(TM) 64 ビット サーバー VM (ビルド 25.191-b12、混合モード)

mycat をインストールします。 Linux では、Mycat-server-xxxxx.linux.tar.gz をダウンロードし、ディレクトリに解凍できます。ディレクトリ内にスペースがあってはならないことに注意してください。 Linux (Unix) では、次のように usr/local/Mycat ディレクトリに配置することをお勧めします。

[root@xuegod63 ~]# tar -xf Mycat-server-1.5-RELEASE-0301083012-linux.tar.gz -C 
/usr/local/
[root@xuegod63 ローカル]# ls /usr/local/mycat/

以下の MyCAT ユーザー パスワードを変更します (参照のみ):

[root@xuegod63 ~]# ユーザー追加 mycat
[root@xuegod63 ~]# passwd mycat #変更を成功させるにはパスワードを2回入力してください

[root@xuegod63 ~]# chown -R mycat.mycat /usr/local/mycat #権限の変更

ディレクトリの説明は次のとおりです。

bin プログラム ディレクトリには、Windows バージョンと Linux バージョンが格納されます。サービスとしてパッケージ化されたバージョンを提供するだけでなく、選択と変更を簡単に行える nowrap シェル スクリプト コマンドも提供します。bin ディレクトリに入ります。

Linux 下運行:./mycat console,首先要chmod +x *

注: mycat は次のコマンドをサポートしています: { console | start | stop | restart | status | dump }

設定ファイルはconfディレクトリに保存されます。server.xml server.xml 、Mycat サーバーのパラメータ調整とユーザー認証用の設定ファイルですschema.xmlは、論理ライブラリ定義、テーブル、およびシャーディング定義用の設定ファイルです。rule.xml rule.xml 、シャーディング ルール用の設定ファイルです。シャーディング ルールの特定のパラメータ情報は、このディレクトリに別のファイルとして保存されます。設定ファイルが変更された場合、有効にするにはMycatを再起動する必要があります。

libディレクトリには主に、 mycat依存するいくつかのjarファイルが格納されます。

ログはlogs/mycat.logに 1 日 1 ファイルずつ保存されます。ログ設定はconf/log4j.xmlにあります。必要に応じて、出力レベルをデバッグに調整できます。デバッグ レベルでは、トラブルシューティングを容易にするために、より多くの情報が出力されます。

3. MyCatサービスの起動と起動設定

MyCAT を Linux にデプロイして起動する場合、まず Linux システムの環境変数で MYCAT_HOME を設定する必要があります。操作は次のとおりです。

[root@xuegod63 local]# vim /etc/profile.d/mycat.sh #/etc/profile.d ディレクトリに mycat.sh ファイルを作成し、次のように記述します。
MYCAT_HOME=/usr/local/mycat PATH=$MYCAT_HOME/bin:$PATH
[root@xuegod63 local]# source /etc/profile.d/mycat.sh #環境変数を有効にする

MyCAT クラスターが複数の Linux システム上に構築されている場合は、MyCAT サーバーが配置されているサーバー上の他の IP アドレスとホスト名のマッピングを構成する必要があります。構成は次のとおりです。

vi /etc/hosts

たとえば、次の構成のマシンが 3 台あります: IP ホスト名:

192.168.1.63 suegod63.cn より 
192.168.1.64 suegod64.cn より 
192.168.1.65 suegod65.cn より

編集後、ファイルを保存します。

mycatのユーザーアカウントと認証情報はconf/server.xmlファイルで設定されます。

[root@xuegod63 ローカル]# vim /usr/local/mycat/conf/server.xml
<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
 <システム>
 <property name="defaultSqlParser">ドルイドパーサー</property>
 </システム>
 <!--次の設定は、アプリケーション アクセス アカウントの権限に関するものです-->
 行 34 <user name="root"> #管理者ユーザー、つまりMycatに接続するためのユーザー名を定義します <property name="password">123456</property> #パスワード <property name="schemas">ha</property> #スキーマ構成ファイルに対応する論理ライブラリを定義します </user>
 <!--次の設定は読み取り専用アカウント権限に適用されます-->
 <ユーザー名="ユーザー">
 <property name="password">ユーザー</property>
 <property name="schemas">は</property>
 <プロパティ名="readOnly">true</プロパティ>
 </ユーザー>
</mycat:サーバー>

MyCAT 構成ファイル schema.xml を編集します。dataHost に関する構成情報は次のとおりです

[root@xuegod63 ローカル]# mv /usr/local/mycat/conf/schema.xml 
/usr/local/mycat/conf/schema.xml.bak #元のファイルをバックアップします。
[root@xuegod63 local]# vim /usr/local/mycat/conf/schema.xml <?xml version="1.0"?> を作成します。
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
< mycat:スキーマxmlns:mycat="http://org.opencloudb/">
 <スキーマ名="ha" checkSQLschema="false" sqlMaxLimit="100" 
データノード='dn1'>
 </スキーマ>
 <データノード名="dn1" データホスト="dthost" データベース="ha"/>
 <データホスト名="dthost" 最大コン="500" 最小コン="10" 残高="1" 
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" 
スレーブしきい値="100">
 <ハートビート> ユーザーを選択()</ハートビート>
 < writeHostホスト="xuegod64.cn" url="192.168.1.64:3306" ユーザー="mycat" 
パスワード="123456">
 </writeHost>
 < writeHostホスト="xuegod65.cn" url="192.168.1.65:3306" ユーザー="mycat" 
パスワード="123456">
 </writeHost>
 </データホスト>
</ mycat:スキーマ>

緑は物理的に存在するデータベースの名前です。注:スキーマタグは、MyCat インスタンス内の論理ライブラリを定義するために使用されます。Name: の後には論理ライブラリ名が続きます。MyCat には複数の論理ライブラリが存在する可能性があり、各論理ライブラリには独自の関連構成があります。スキーマ タグを使用して、これらの異なる論理ライブラリを分割できます。

checkSQLschema 属性はデフォルトでは false です。公式ドキュメントでは、テーブルの前のデータベース名を削除するかどうか、「select * from db1.testtable」を意味します。true に設定すると、db1 が削除されます。ただし、db1 の名前がスキーマの名前でない場合は削除されないため、この構文を使用しないことが公式に推奨されています。デフォルトでは false に設定されています。

sqlMaxLimit 値が特定の数値に設定されている場合。実行される各 SQL ステートメントに対して、制限ステートメントがない場合、MyCat は対応する値を自動的に追加します。たとえば、値を 100 に設定して「select * from test_table」を実行すると、結果は「select * from test_table limit 100」になります。

dataNode タグは、MyCat 内のデータ ノード (通常はデータ シャードと呼ばれる) を定義します。データノードラベルは独立したデータシャードである

writeHost タグと readHost タグはどちらもバックエンド データベースの構成を指定し、バックエンド接続プールをインスタンス化するために使用されます。唯一の違いは、writeHost が書き込みインスタンスを指定し、readHost が読み取りインスタンスを指定することです。 1 つの dataHost に複数の writeHost と readHost を定義できます。ただし、writeHost で指定されたバックエンド データベースがダウンした場合、この writeHost にバインドされているすべての readHost は使用できなくなります。一方、この writeHost はダウンしているため、システムはそれを自動的に検出し、バックアップ writeHost に切り替えます。これら2つのタグの属性は同じです

注意すべきパラメーターは、balance と switchType の 2 つです。このうち、 balance は負荷分散タイプを指し、現在は 4 つの値があります。

(2)balance="0"の場合、読み取り書き込み分離メカニズムは有効にならず、すべての読み取り操作は現在利用可能なwriteHostに送信されます。
(2) balance="1" の場合、すべての readHost とスタンバイ writeHost が SELECT ステートメントの負荷分散に参加します。簡単に言うと、デュアル マスターとデュアル スレーブ モード (M1->S1、M2->S2、M1 と M2 は相互にマスターとスレーブ) では、通常の状況では、M2、S1、および S2 はすべて SELECT ステートメントの負荷分散に参加します。
(3)balance="2"の場合、すべての読み取り操作はwriteHostとreadhostにランダムに分散されます。
(4) balance="3"の場合、すべての読み取り要求はwriterHostに対応するreadhostにランダムに分散されて実行され、writerHostは読み取り圧力を負担しません。

switchType はスイッチング モードを指し、現在可能な値は 4 つあります。

(1)switchType='-1'は自動切り替えがないことを意味する。
(2)switchType='1' デフォルト値は自動切り替えを示す。
(3)switchType='2'は、MySQLのマスタースレーブ同期の状態に基づいて切り替えるかどうかを決定します。ハートビートステートメントはshow slave statusです。
(4) switchType='3' は、MySQL galary cluster (suitable for cluster) (1.4.1) のスイッチングメカニズムに基づいており、ハートビートステートメントは 'wsrep%' のようなステータスを表示します。

上記の 2 つの手順が完了したら、/usr/local/mycat/bin ディレクトリに移動し、./mycat start を実行して mycat サービスを開始できます。

[root@xuegod63 local]# /usr/local/mycat/bin/mycat 開始
[root@xuegod63 ~]# cat /usr/local/mycat/logs/wrapper.log #ログを表示して正常に起動します

4. MySQLマスタースレーブを設定する

mysqlをインストールし、mysql-5.7.ta​​r.gzをxuegod64にアップロードします。

[root@xuegod64 ~]# systemctl でmysqldを起動します
[root@xuegod64 ~]# echo "validate-password=OFF">> /etc/my.cnf
[root@xuegod64 ~]# systemctl mysqldを再起動します

パスワード強度監査プラグインを無効にする

[root@xuegod64 ~]# systemctl でmysqldを起動します
[root@xuegod64 ~]# echo "validate-password=OFF">> /etc/my.cnf
[root@xuegod64 ~]# systemctl mysqldを再起動します

ルートユーザーのパスワードを変更する

[root@xuegod64 ~]# grep "パスワード" /var/log/mysqld.log
[root@xuegod64 ~]# mysql -uroot -p'-NEjo1gbPllh'
mysql> root@localhost のパスワードを設定します = password('123456');
mysql>終了

別のマシン

[root@xuegod65 ~]# tar xf mysql-5.7.ta​​r.gz
[root@xuegod65 ~]# yum install -y ./mysql*.rpm

パスワード強度監査プラグインを無効にする

[root@xuegod65 ~]# systemctl でmysqldを起動します
[root@xuegod65 ~]# echo "validate-password=OFF">> /etc/my.cnf
[root@xuegod65 ~]# systemctl mysqldを再起動します

ルートユーザーのパスワードを変更する

[root@xuegod65~]# grep "パスワード" /var/log/mysqld.log
[root@xuegod65 ~]# mysql -uroot -p'%OrrfGwyM6tS'
mysql> root@localhost のパスワードを設定します = password('123456');
mysql>終了

データベースとテストデータを作成する

[root@xuegod64 ~]# mysql -uroot -p123456
mysql> データベース ha を作成します。
mysql> ha を使用します。
mysql> テーブル test(id int,name varchar(20)) を作成します。
mysql> テスト値に挿入(1,'man');
[root@xuegod64 ~]# mysqldump -uroot -p123456 -B ha >HA.sql #データベースをエクスポートできます

エクスポートしたデータベースをスレーブサーバーに転送する

[root@xuegod64 ~]# scp HA.sql [email protected]:/root/

xuegod65 はサービスから操作します: 読み取り操作のためにデータベースとテーブルをインポートします:

[root@xuegod65 ~]# mysql -uroot -p123456<HA.sql
[root@xuegod64 ~]# vim /etc/my.cnf
log-bin=mysql-bin-master #バイナリログを有効にする server-id=1 #ローカルデータベースIDマーク binlog-do-db=ha #サーバーからコピーできるリポジトリ、同期する必要があるバイナリデータベース名 binlog-ignore-db=mysql #サーバーからコピーできないリポジトリ [root@xuegod64 ~]# systemctl restart mysqld
[root@xuegod64 ~]# mysql -uroot -p'123456'

mycatがデータベースアカウントとマスタースレーブレプリケーションアカウントにログインすることを許可する

mysql> 'mycat'@"%" IDENTIFIED BY "123456" に *.* のすべての権限を付与します。 
mysql> *.* 上のレプリケーションスレーブを、"123456" で識別される slave@"192.168.1.%" に付与します。
mysql>終了
[root@xuegod65 ~]# vim /etc/my.cnf
log-bin=mysql-bin-slave #バイナリログを有効にする server-id=2 #ローカルデータベースIDマーク binlog-do-db=ha #サーバーからコピーできるリポジトリ、同期する必要があるバイナリデータベース名 binlog-ignore-db=mysql #サーバーからコピーできないリポジトリ [root@xuegod65 ~]# systemctl restart mysqld
[root@xuegod65 ~]# mysql -uroot -p'123456'

mycatがデータベースアカウントとマスタースレーブレプリケーションアカウントにログインすることを許可する

mysql> 'mycat'@"%" IDENTIFIED BY "123456" に *.* のすべての権限を付与します。
mysql> *.* 上のレプリケーションスレーブを、"123456" で識別される slave@"192.168.1.%" に付与します。
mysql>マスターを次のように変更します 
マスターホスト='192.168.1.64'、マスターユーザー='スレーブ'、マスターパスワード='123456';
mysql> start slave; #スレーブを起動
mysql> show slave status\G #ステータスを確認します。2 つの yes があります。マスターとスレーブの同期が成功しました。
mysql>終了

スレーブ障害をシミュレート: スレーブサーバーがダウンしています

[root@xuegod65 ~]# systemctl を停止 mysqld

クライアント上での読み取りと書き込みのテスト

[root@xuegod63 ~]# mysql -uroot -p123456 -h 192.168.1.63 -P8066 
mysql> ha を使用します。
mysql> テストから * を選択します。

これは、読み取り操作ルートがマスターに切り替えられ、外部への影響がないことを意味します。

[root@xuegod65 ~]# systemctl でmysqldを起動します

マスター障害をシミュレートする: マスターサーバーがダウンしている

[root@xuegod64 ~]# systemctl を停止 mysqld

クライアント上での読み取りと書き込みをテストする

[root@xuegod63 ~]# mysql -uroot -p123456 -h 192.168.1.63 -P8066
mysql> ha を使用します。
mysql> テーブル test1(id int) を作成します。
エラー 1184 (HY000): 接続が拒否されました #マスター データベースがダウンしているため、書き込み操作はできませんが、読み取りには影響はありません。
mysql> テストから * を選択します。

[root@xuegod64 ~]# systemctl でmysqldを起動します

読み取り専用ユーザーログインテスト

mysql -u ユーザー -puser -h 192.168.1.201 -P8066
mysql> テスト値に挿入(5,'feng');
エラー 1495 (HY000): ユーザーは読み取り専用です
mysql> ha.test から * を選択します。
+------+--------+
| ID | 名前 |
+------+--------+
| 1 | CD |

5. 実際のノードがクラッシュしたら、スレーブノードに自動的に切り替える

MMモードのマスタースレーブレプリケーション環境を構成して、65を64のマスターとして有効にします。

[root@xuegod64 ~]# mysql -uroot -p'123456'
mysql>マスターを次のように変更します 
マスターホスト='192.168.1.65'、マスターユーザー='スレーブ'、マスターパスワード='123456';
mysql> start slave; #スレーブを起動
mysql> show slave status\G #ステータスを確認します。2 つの yes があります。マスターとスレーブの同期が成功しました。
mysql>終了

1. mycat設定ファイルを最適化して調整する

[root@xuegod63 ~]# vim /usr/local/mycat/conf/schema.xml
<?xml バージョン="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:スキーマ xmlns:mycat="http://org.opencloudb/">
 <スキーマ名="ha" checkSQLschema="false" sqlMaxLimit="100" 
データノード='dn1'>
 </スキーマ>
 <dataNode 名="dn1" データホスト="dthost" データベース="ha"/>
 <dataHost name="dthost" maxCon="500" minCon="10" バランス="1" 
writeType="0" dbType="mysql" dbDriver="ネイティブ" switchType="1"
スレーブしきい値="100">
 <heartbeat>ユーザーを選択()</heartbeat>
 <writeHost ホスト="xuegod64.cn" url="192.168.1.64:3306" ユーザー="mycat" 
パスワード="123456">
 </writeHost>
 <writeHost ホスト="xuegod65.cn" url="192.168.1.65:3306" ユーザー="mycat" 
パスワード="123456">
 </writeHost>
 </データホスト>
</mycat:スキーマ>

以前は、自動切り替えをオフにするために switchType="-1" を設定していましたが、マスタースレーブ環境ではスレーブノードにデータを書き込まないようにする必要があります。そうしないと、マスターデータベースとスレーブデータベースの間に不整合が発生します。 MM モードを使用すると、障害発生後にマスターノードは自動的にバックアップノードに切り替わり、データの書き込みには影響しません。

[root@xuegod63 ~]# /usr/local/mycat/bin/mycat を再起動します 
[root@xuegod64 ~]# systemctl を停止 mysqld
[root@xuegod63 ~]# mysql -uroot -p123456 -h 192.168.1.63 -P8066
MySQL [(なし)]> ha.test に値を挿入します(666,'mk');
MySQL [(なし)]> ha.testから*を選択します。
+------+---------+
| ID | 名前 |
+------+---------+
| 1 | 男性 |
| 666 | ミリ |

2. マスターノードを停止します。

[root@xuegod64 ~]# systemctl を停止 mysqld
Mycat は挿入を続行します。mysql> insert into test values(5,'feng');

3. マスターノードを復元します。

[root@xuegod64 ~]# systemctl でmysqldを起動します
mysql -uroot -p123456
ha.test から * を選択します。

使用方法の提案については、一部の CMS (コンテンツ管理システム) システムでは、基礎となるデータベース コードがカプセル化されています。カプセル化された SQL ステートメントは mycat と互換性がないため、現時点では mycat を使用することはお勧めできません。プログラムを開発する際には、MySQL への接続方法が mycat と互換性があるかどうかを検討することをお勧めします。または、mysql-proxy などの他のミドルウェアを選択します。

上記は、Linux が MyCat を使用して MySQL マスター/スレーブの読み取り/書き込み分離を実現する方法の詳細です。Linux MySQL の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Linux インデックスノード inode の詳細な説明
  • Linux デバイスに空き容量がありません inode の満杯により 500 エラーが発生します
  • Linux ネットワーク設定の詳細
  • Unix/Linuxフォークの隠れたオーバーヘッド
  • Linux での UDP について学ぶ
  • Linux スワップ パーティション (詳細説明)
  • Linux での C++ ネットワーク プログラミング、epoll テクノロジ、Windows での IOCP モデル
  • Linux サーバーは最大いくつのポートを開くことができますか?
  • Linux ファイル記述子、ファイルポインタ、および inode の詳細

<<:  element-plus でオンデマンドインポートとグローバルインポートを実装する方法

>>:  両端揃えレイアウトを実現する CSS 列のサンプルコード

推薦する

React コンポーネントのコンストラクタとスーパーの知識ポイントのまとめ

1. Reactでクラス宣言する際のヒント 上記のように、Child クラスは class キーワー...

Linux サーバーの状態を監視する方法

私たち、特に Linux エンジニアは毎日 Linux サーバーを扱っています。サーバーのセキュリテ...

MySQL の 10 進数データ型の小数点埋め込み問題の詳細な説明

序文開発プロセスでは、10 進データ型がよく使用されます。 MySQL では、小数点は正確なデータ型...

MySQL 5.7.23 バージョンのインストールチュートリアルと設定方法

MySQL を自分でインストールするのに 3 時間かかりました。チュートリアルはたくさんあるにもかか...

ネットワークセグメント内の IP アドレスに対する Nginx の接続制限設定の詳細な説明

Nginx におけるいわゆる接続制限は、実際には TCP 接続、つまり 3 ウェイ ハンドシェイク後...

docker-compsoe を使用してフロントエンドとバックエンドを分離したプロジェクトをデプロイする方法

事前に言っておくDocker を使用すると非常にシンプルなデプロイメント環境を実現できることは誰もが...

html2canvas を使用して HTML コードを画像に変換する方法

コードを画像に変換するにはhtml2canvas は、ブラウザから Web ページのスクリーンショッ...

よく使われるnginxの書き換えルールの詳細な説明

この記事では、Web ページのリンクを美しくするためによく使用される書き換えルールをいくつか紹介しま...

データベースを削除して逃げる?xtraback を使用して MySQL データベースをバックアップする方法

1. mysqldump バックアップ方法では論理バックアップが使用されます。最大の欠点は、バック...

MySQL に接続されている IP アドレスを表示する方法の例

具体的な方法:まずコマンドプロンプトを開きます。次に、[ mysql -u root -p ] コマ...

Reactにおけるコンテキスト適用シナリオの分析

コンテキストの定義と目的コンテキストは、コンポーネント ツリーにプロパティを明示的に渡すことなく、コ...

CSSは座席選択効果を実現するためにautoflow属性を使用する

1. 自動フロー属性、要素コンテンツの長さと幅が要素自体の長さと幅を超える場合、スクロールバーが表示...

MySQLに挿入する前にデータが存在するかどうかを確認する方法

ビジネスシナリオ: 訪問者の訪問状況を記録する必要があるが、繰り返し記録することはできない挿入する前...

読み込み進捗バーのネイティブ JS 実装

この記事では、ネイティブ JS によって実装された動的読み込みプログレス バーの特殊効果を紹介します...

MySQL 8.0.13 のインストールと設定のグラフィックチュートリアル

Msyqlデータベースのインストール、参考までに具体的な内容は次のとおりです。 ①ブラウザでhttp...