この記事では、例を使用して、MySQL マスター/スレーブ レプリケーションと読み取り/書き込み分離の原理と使用方法を説明します。ご参考までに、詳細は以下の通りです。 マスタースレーブレプリケーションコンセプトMySQL-A データベースに影響する操作は、データベース上で実行された後、ローカル ログ システム A に書き込まれます。 問題を解決するデータ損失の防止方法、バックアップ、読み取りと書き込みの分離、データベースの負荷分散、高可用性 環境構築1. 環境を準備します。2 つの Windows オペレーティング システムの IP アドレスは、172.27.185.1 (マスター) と 172.27.185.2 (スレーブ) です。 サーバーID=200 ログ bin = mysql bin リレーログ=リレービン リレーログインデックス=リレービンインデックス MySQLサービスを再起動する サーバーID = 210 replicate-do-db =itmayiedu #データベースの同期が必要 MySQLサービスを再起動する 奴隷を停止します。 変化 マスターをmaster_host='172.27.185.1'、master_user='root'、master_password='root'に設定します。 スレーブを起動します。 スレーブステータスを表示します。 注意: ①同じLAN内にいることを確認してください ②360WiFiを使用してLANを作成してください ③すべてのファイアウォールをオフにすることをお勧めします 読み書き分離とはデータベース クラスター アーキテクチャでは、マスター データベースはトランザクション クエリの処理を担当し、スレーブ データベースは選択クエリの処理のみを担当するため、両者の分担が明確になり、データベースの全体的な読み取りおよび書き込みパフォーマンスが向上します。もちろん、マスター データベースのもう 1 つの機能は、トランザクション クエリによって発生したデータの変更をスレーブ データベースに同期すること (書き込み操作) です。 読み取りと書き込みの分離の利点1) サーバーの負荷を分散し、マシンのシステム処理効率を向上させます。読み取りと書き込みの分離は、読み取りが書き込みをはるかに上回るシナリオに適しています。選択が多いサーバーがある場合、更新と削除はこれらの選択によってアクセスされているデータによってブロックされ、選択が終了するまで待機します。同時実行パフォーマンスは高くありません。マスターとスレーブは、自分の書き込みと読み取りのみを担当するため、X ロックと S ロックの競合が大幅に緩和されます。 マスタースレーブ複製原理バイナリ ログ、binary-log に依存します。 スケールアップとスケールアウトの違いスケールアウトとは、アプリケーションを水平方向に拡張できることを意味します。一般的に、データ センター アプリケーションの場合、スケール アウトとは、マシンを追加しても、アプリケーションがこれらのマシンのリソースを有効に活用して効率を向上させ、優れたスケーラビリティを実現できることを意味します。 マイキャットMycatとはオープンソースの分散データベースシステムです。ただし、データベースは一般的に独自のデータベースエンジンを持っているのに対し、Mycat は独自のデータベースエンジンを持っていないことから、厳密には完全なデータベースシステムとは言えません。あくまでアプリケーションとデータベースの橋渡しをするミドルウェアとしか言えません。 Mycat ミドルウェアを導入すると、プログラムとデータベースを効果的に分離できます。これにより、プログラムは、基盤となるデータベースがどのようにサービスを提供するかを知らなくても、データベース ミドルウェアのアドレスに注意を払うだけで済みます。多数の一般的なデータ集約、トランザクション、データ ソースの切り替えなどのタスクは、ミドルウェアによって処理されます。 Mycatのインストールテーブル構造を作成する `weibo_simple`が存在しない場合はデータベースを作成します。 -- ------------------------------------ -- `t_users` ユーザーテーブルのテーブル構造 -- ------------------------------------ `t_users` が存在する場合はテーブルを削除します。 テーブル `t_users` を作成します ( `user_id` varchar(64) NOT NULL COMMENT '登録ユーザーID', `user_email` varchar(64) NOT NULL COMMENT '登録ユーザーのメールアドレス', `user_password` varchar(64) NOT NULL COMMENT '登録ユーザーパスワード', `user_nikename` varchar(64) NOT NULL COMMENT '登録ユーザーのニックネーム', `user_creatime` datetime NOT NULL COMMENT '登録時間', `user_status` tinyint(1) NOT NULL COMMENT '検証ステータス 1: 検証済み 0: 未検証', `user_deleteflag` tinyint(1) NOT NULL COMMENT '削除マーク 1: 削除済み 0: 削除されていない', 主キー (`user_id`) )ENGINE=InnoDB デフォルト文字セット=utf8; -- ------------------------------------- -- `t_message` マイクロブログ テーブルのテーブル構造 -- ------------------------------------- `t_message` が存在する場合はテーブルを削除します。 テーブル `t_message` を作成します ( `messages_id` varchar(64) NOT NULL COMMENT 'Weibo ID', `user_id` varchar(64) NOT NULL COMMENT '投稿ユーザー', `messages_info` varchar(255) デフォルト NULL コメント 'Weiboコンテンツ', `messages_time` datetime DEFAULT NULL COMMENT 'リリース時間', `messages_commentnum` int(12) DEFAULT NULL COMMENT 'コメント数', `message_deleteflag` tinyint(1) NOT NULL COMMENT '削除マーク 1: 削除済み 0: 削除されていない', `message_viewnum` int(12) DEFAULT NULL COMMENT 'ビュー数', 主キー (`messages_id`)、 キー `user_id` (`user_id`), 制約 `t_message_ibfk_1` 外部キー (`user_id`) 参照 `t_users` (`user_id`) )ENGINE=InnoDB デフォルト文字セット=utf8; server.xml を構成する <!-- ユーザーを追加 --> <ユーザー名="mycat"> <property name="password">mycat</property> <property name="schemas">mycat</property> </ユーザー> <!-- ユーザーを追加 --> <ユーザー名="mycat_red"> <property name="password">mycat_red</property> <property name="schemas">mycat</property> <プロパティ名="readOnly">true</プロパティ> </ユーザー> schema.xml を構成する <?xml バージョン="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:スキーマ xmlns:mycat="http://org.opencloudb/"> <!-- server.xml 内のユーザーのスキーマ名と同じ --> <スキーマ名="mycat" checkSQLschema="true" sqlMaxLimit="100"> <テーブル名="t_users" プライマリキー="user_id" データノード="dn1" ルール="rule1"/> <テーブル名="t_message" タイプ="global" プライマリキー="messages_id" データノード="dn1" /> </スキーマ> <dataNode 名="dn1" データホスト="jdbchost" データベース="weibo_simple " /> <dataHost name="jdbchost" maxCon="1000" minCon="10" バランス="1" writeType="0" dbType="mysql" dbDriver="ネイティブ" switchType="1" スレーブしきい値="100"> <heartbeat>ユーザーを選択()</heartbeat> <writeHost ホスト="hostMaster" url="172.27.185.1:3306" ユーザー="root" パスワード="root"> </writeHost> <writeHost ホスト="hostSlave" url="172.27.185.2:3306" ユーザー="root" パスワード="root"/> </データホスト> </mycat:スキーマ> ルール.xmlファイルを構成する <?xml バージョン="1.0" エンコーディング="UTF-8"?> <!-- - - Apache License バージョン 2.0 (以下「ライセンス」) に基づいてライセンスされます。 - ライセンスに従わない限り、このファイルを使用することはできません。 ライセンスのコピーは、http://www.apache.org/licenses/LICENSE-2.0 から入手できます。 - - 適用法で義務付けられている場合、または書面で同意されている場合を除き、ソフトウェア - ライセンスに基づいて配布されるものは、「現状のまま」配布され、 明示的または黙示的を問わず、いかなる種類の保証または条件も保証しません。 権限と制限を規定する特定の言語のライセンス ライセンスに基づいて。 --> <!DOCTYPE mycat:rule SYSTEM "rule.dtd"> <mycat:rule xmlns:mycat="http://org.opencloudb/"> <テーブルルール名="ルール1"> <ルール> <columns>ユーザーID</columns> <アルゴリズム>関数1</アルゴリズム> </ルール> </tableRule> <関数名="func1" クラス="org.opencloudb.route.function.AutoPartitionByLong"> <property name="mapFile">autopartition-long.txt</property> </function> </mycat:ルール> エラーをより正確に特定するには、log4j.xmlを変更します。 よくある質問 アカウントに権限を割り当てる MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: JavaScriptのループの違いについての詳細な説明
1. 画像の周りのテキスト通常のものを使用する場合、たとえば次のようになります。コードをコピーコー...
目次概要ジェネリック医薬品とはビルドシステムジェネリック医薬品の一般的な理解ジェネリッククラスジェネ...
目次ビジネス要件:解決策 1: vuex-persistedstate解決策2: vuex-pers...
目次操作方法操作プロセス既存のテーブルにパーティション テーブルを作成し、データを新しいテーブルに移...
注意: nginxのバージョンは1.9以上である必要があります。nginxをコンパイルするときに、-...
コードをコピーコードは次のとおりです。 <!-- ブラウザがローカル キャッシュからページにア...
序文データベースでは、一部のデータ テーブルとデータは latin1 であり、一部のデータ テーブル...
表示するデータが多い場合、1 つのチャートに表示しても効果はよくありません。このとき、2 つのチャー...
序文:グループ化関数はグループ内の最初のデータを取得しますが、各グループ内の最新のデータを取得する必...
序文多くの学生は既に再帰に精通していると思います。アルゴリズムの問題を解決するために再帰がよく使...
目次Oracle 分離レベルMySQL 分離レベル要約する多くの読者は、MySQL のトランザク...
コードは次のようになります。 。プロセス{ 境界線:1px 実線 #B7B7B8; 背景:#F8F8...
通常、デッドロックが発生すると、重みが最も小さい接続が強制終了され、ロールバックされます。ただし、最...
最近、カンファレンスの健康申告システムに取り組んでいたとき、バックエンドを構築する必要があり、vue...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...