現在シミュレーションしているのは、マスター スレーブ システム (ホスト 1 台とスレーブ 1 台) です。マスター スレーブ同期の原理は、bin-log バイナリ ファイルを同期し、このファイルの内容をホストからスレーブに同期することです。 1. 設定ファイルの変更1. ホスト構成ファイルを変更するまず、mysql ホスト (192.168.254.130) の /etc/my.cnf 構成ファイルが必要になり、次の構成を追加します。 #ホストの固有ID サーバーID=1 #バイナリログ log-bin=mysql-bin #同期する必要のないデータベース binlog-ignore-db=mysql binlog-ignore-db=情報スキーマ #同期データベース名 binlog-do-db=mycat #バイナリ形式 binlog_format=ステートメント my.cnfファイル全体を見てみましょう [root@localhost デスクトップ]# cat /etc/my.cnf [mysqld] データディレクトリ=/usr/local/mysql/data ベースディレクトリ=/usr/local/mysql ソケット=/usr/local/mysql/data/mysql.sock ユーザー=mysql # さまざまなセキュリティリスクを防ぐために、シンボリックリンクを無効にすることをお勧めします シンボリックリンク=0 サーバーID=1 ログ bin = mysql bin binlog-ignore-db=mysql binlog-ignore-db=情報スキーマ binlog-do-db=mycat binlog_format=ステートメント [mysqld_safe] ログエラー=/usr/local/mysql/data/mysqld.log pid ファイル = /usr/local/mysql/data/mysqld/mysqld.pid [root@localhost デスクトップ]# ホストの構成ファイルを変更した後、次のコマンドを使用してサービスを再起動する必要があります。 [root@localhost サポートファイル]# ls マジック mysqld_multi.server mysql-log-rotate mysql.server [root@localhost サポートファイル]# pwd /usr/local/mysql/サポートファイル [root@localhost サポートファイル]# ./mysql.server を再起動します 次に、スレーブ マシン (192.168.254.131) の構成ファイルを変更します。 2. スレーブ構成スレーブの設定変更は比較的簡単です。 #スレーブマシンの固有ID サーバーID=2 #リレーログ relay-log=mysql-relay 設定を変更した後、スレーブを再起動します 2. MySQLクライアントコマンド操作次に、次のコマンドを使用して、mysql コマンドラインに接続できます。 [root@localhost bin]# [root@localhost bin]# pwd ローカル [root@localhost bin]# ./mysql -uroot -p 1. ホスト操作1) 同期ユーザーを作成する まず、次のコマンドを実行して、ホスト上でマスターとスレーブの同期専用のユーザーを作成します。 *.* 上のレプリケーション スレーブを '123456' によって識別される 'SLAVE'@'%' に付与します。 2) 同期されたファイルのステータスを確認する 次に、show master status; を使用して、ホストの同期ステータスを表示します。 mysql> マスターステータスを表示します。 +------------------+----------+--------------+--------------------------+-------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+--------------------------+-------------------+ | mysql-bin.000001 | 154 | mycat | mysql、information_schema | | +------------------+----------+--------------+--------------------------+-------------------+ セット内の 1 行 (0.00 秒) 2. スレーブ操作1) スレーブホストを設定する 次のコマンドを実行して、ホストとの同期を確立するために必要な情報を設定します。 マスターをMASTER_HOST='192.168.254.130'に変更します。 MASTER_USER='スレーブ'、 マスターパスワード = '123456'、 MASTER_LOG_FILE='mysql-bin.000001', マスターログPOS = 430; ここでホスト構成が設定されていることを通知するメッセージが表示された場合、stop slave&reset master によってリセットできます。 2) 同期を開始する 次に、スレーブを起動して同期を開始します。 以下が見られます: mysql>スレーブステータスを表示\G ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 192.168.254.130 マスターユーザー: スレーブ マスターポート: 3306 接続再試行: 60 マスターログファイル:mysql-bin.000001 読み取りマスターログ位置: 592 リレーログファイル:mysql-relay.000002 リレーログ位置: 482 リレーマスターログファイル: mysql-bin.000001 スレーブIO実行中: はい スレーブSQL実行中: はい レプリケート_Do_DB: レプリケート_無視_DB: テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 0 最終エラー: スキップカウンタ: 0 実行マスターログポジション: 592 リレーログスペース: 685 Until_Condition: なし ログファイルまで: ログ位置まで: 0 マスターSSL許可: いいえ マスターSSLCAファイル: マスターSSLCAパス: マスターSSL証明書: マスターSSL暗号: マスターSSLキー: マスターより遅れている秒数: 0 Master_SSL_Verify_Server_Cert: いいえ 最終IOエラー番号: 0 最後のIOエラー: 最終SQLエラー番号: 0 最後のSQLエラー: Replicate_Ignore_Server_Ids: マスターサーバーID: 1 マスター_UUID: 74397a99-accf-11eb-ae0d-000c2912d302 マスター情報ファイル: /usr/local/mysql/data/master.info SQL_遅延: 0 SQL_残り遅延: NULL Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。 マスター再試行回数: 86400 マスターバインド: 最終IOエラータイムスタンプ: 最終SQLエラータイムスタンプ: マスターSSL証明書: マスターSSLCrlパス: 取得済み_Gtid_Set: 実行されたGtidセット: 自動位置: 0 Replicate_Rewrite_DB: チャンネル名: マスター TLS バージョン: セット内の 1 行 (0.00 秒) マイSQL> ここで、Slave_IO_Running と Slave_SQL_Running が両方とも YES であることがわかります。これは、成功を意味します。次の場合: ************************** 1. 行 **************************** Slave_IO_State: マスターに接続中 マスターホスト: 192.168.254.130 マスターユーザー: スレーブ マスターポート: 3306 接続再試行: 60 マスターログファイル:mysql-bin.000001 読み取りマスターログ位置: 430 リレーログファイル:mysql-relay.000001 リレーログ位置: 4 リレーマスターログファイル: mysql-bin.000001 Slave_IO_Running: 接続中 スレーブSQL実行中: はい レプリケート_Do_DB: レプリケート_無視_DB: テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 0 最終エラー: スキップカウンタ: 0 実行マスターログ位置: 430 リレーログスペース: 154 Until_Condition: なし ログファイルまで: ログ位置まで: 0 マスターSSL許可: いいえ マスターSSLCAファイル: マスターSSLCAパス: マスターSSL証明書: マスターSSL暗号: マスターSSLキー: マスターより遅れている秒数: NULL Master_SSL_Verify_Server_Cert: いいえ 最終IOエラー番号: 1045 Last_IO_Error: マスター '[email protected]:3306' への接続エラー - 再試行時間: 60 再試行: 1 最終SQLエラー番号: 0 最後のSQLエラー: Replicate_Ignore_Server_Ids: マスターサーバー ID: 0 マスターUUID: マスター情報ファイル: /usr/local/mysql/data/master.info SQL_遅延: 0 SQL_残り遅延: NULL Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。 マスター再試行回数: 86400 マスターバインド: 最終IOエラータイムスタンプ: 210505 00:18:08 最終SQLエラータイムスタンプ: マスターSSL証明書: マスターSSLCrlパス: 取得済み_Gtid_Set: 実行されたGtidセット: 自動位置: 0 Replicate_Rewrite_DB: チャンネル名: マスター TLS バージョン: セット内の 1 行 (0.00 秒) ここで Last_IO_Error にエラーがあることがわかりますので、ログに何が報告されているか確認してみましょう。現在、私の問題は、同期ユーザーがエラーのため同期できないことです。前述のように、まず同期を停止してリセットし、同期コマンドを修正してから再度操作してください。 3. マスタースレーブ同期テスト1. ホスト作成ライブラリまず、ホスト上で同期するために先ほど設定したデータベース mycat を作成します。 mysql> データベース mycat を作成します。 クエリは正常、1 行が影響を受けました (0.00 秒) mysql> mycat を使用します。 データベースが変更されました mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | | マイキャット | |mysql | | パフォーマンススキーマ | |システム| +--------------------+ セット内の行数は 5 です (0.00 秒) マイSQL> 2. マシンからライブラリを表示するすると、スレーブマシン上でこのライブラリを見ることができます mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | | マイキャット | |mysql | | パフォーマンススキーマ | |システム| +--------------------+ セット内の行数は 5 です (0.00 秒) 3. テーブルデータの初期化 次にテーブルデータをテストします 1) ホストまず、ホスト上にテーブルを作成し、データを挿入します mysql> mycat を使用します。 データベースが変更されました マイSQL> mysql> テーブル `test1`( を作成します。 -> id int auto_increment not null 主キー、 -> 名前 varchar(10) デフォルト null -> ); クエリは正常、影響を受けた行は 0 行 (0.03 秒) mysql> test1(`id`,`name`) に値(1,"petty") を挿入します。 クエリは正常、1 行が影響を受けました (0.16 秒) mysql> test1 から * を選択します。 +----+-------+ | ID | 名前 | +----+-------+ | 1 | ささいな | +----+-------+ セット内の 1 行 (0.00 秒) マイSQL> 2) 次に、スレーブが正常に同期されているかどうかを確認します。 mysql> mycat を使用します。 テーブル名と列名の補完のためのテーブル情報の読み取り -Aでこの機能をオフにすると起動が速くなります。 データベースが変更されました mysql> テーブルを表示します。 +-----------------+ | テーブル_in_mycat | +-----------------+ | テスト1 | +-----------------+ セット内の 1 行 (0.00 秒) mysql> test1 から * を選択します。 +----+-------+ | ID | 名前 | +----+-------+ | 1 | ささいな | +----+-------+ セット内の 1 行 (0.00 秒) マイSQL> マスター/スレーブ構成が成功したことがわかります。 4. 複数のマスターと複数のスレーブ複数のマスターと複数のスレーブを持つこともできます。たとえば、マスターとスレーブの順序は、1 番がマスター、2 番がスレーブ、3 番がマスター、4 番がスレーブです。同時に、ホスト 1 とホスト 3 は、お互いにマスターとスレーブです。このようにして、ホストの 1 つに問題があっても、MySQL クラスター全体は正常に動作します。 現在マシンは 3 台しかないため、デモの作成には 3 台のみが使用されます (Windows が 1 台、Linux が 2 台)。 1. ホスト番号1 (192.168.254.30)1) 設定を変更するには、まず元の etc/my.cnf ファイルを変更して以下を追加する必要があります。 # スレーブとして、bin-log log log-slave-updatesも変更します #自動増分増加=2 #自己増分の開始位置 auto-increment-offset=1 ファイル全体に関する情報 [root@localhost デスクトップ]# cat /etc/my.cnf [mysqld] データディレクトリ=/usr/local/mysql/data ベースディレクトリ=/usr/local/mysql ソケット=/usr/local/mysql/data/mysql.sock ユーザー=mysql # さまざまなセキュリティリスクを防ぐために、シンボリックリンクを無効にすることをお勧めします シンボリックリンク=0 サーバーID=1 ログ bin = mysql bin binlog-ignore-db=mysql binlog-ignore-db=情報スキーマ binlog-do-db=mycat binlog_format=ステートメント ログスレーブ更新 自動増分増分=2 自動増分オフセット=1 [mysqld_safe] ログエラー=/usr/local/mysql/data/mysqld.log pid ファイル = /usr/local/mysql/data/mysqld/mysqld.pid [root@localhost デスクトップ]# このファイルを変更した後はマシンを再起動する必要があります 2. スレーブ2号(192.168.254.31)このマシンはすでに30台のマシンに接続するように構成されているため、今回は変更する必要はありません。 3. ホスト番号3(192.168.254.1)1) 設定ファイルを変更します。このマシンはWindowsなので、my.iniファイルを変更して、 サーバーID=3 ログ bin = mysql bin binlog-ignore-db=mysql binlog-ignore-db=情報スキーマ binlog-do-db=mycat binlog_format=ステートメント ログスレーブ更新 自動増分増分=2 自動増分オフセット=2 上記の server-id を変更し、その増加開始点 auto-increment-offset=2 も変更したことに注意してください。同時にサービスを再起動します。 2) 同期ユーザーを作成する まず、次のコマンドを実行して、ホスト上でマスター/スレーブ同期専用のユーザーを作成します。 *.* 上のレプリケーション スレーブを '123456' によって識別される 'SLAVE'@'%' に付与します。 3) ステータスを確認する mysql> マスターステータスを表示します。 +------------------+----------+--------------+--------------------------+-------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+--------------------------+-------------------+ | mysql-bin.000001 | 154 | mycat | mysql、information_schema | | +------------------+----------+--------------+--------------------------+-------------------+ セット内の 1 行 (0.00 秒) マイSQL> 4) 同期ステータスを設定する 次に、接続先のホスト(30)情報を実行します。 マスターをMASTER_HOST='192.168.254.130'に変更します。 MASTER_USER='スレーブ'、 マスターパスワード = '123456'、 MASTER_LOG_FILE='mysql-bin.000001', マスターログPOS = 430; 5) ホストNo.1同期(192.168.254.30) マスターをMASTER_HOST='192.168.254.1'に変更します。 MASTER_USER='スレーブ'、 マスターパスワード = '123456'、 MASTER_LOG_FILE='mysql-bin.000001', マスターログPOS = 154; 次に、ホスト番号 1 で synchronized start slave; を実行し、ホスト番号 3 で synchronized start slave; を実行します。 4. テストして表示する1) 起こりうる問題(スキップ可能) ここで、2 台のマシンのマスター ステータスを個別にテストして確認します: show master status;。 mysql>スレーブステータスを表示\G ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 192.168.254.1 マスターユーザー: スレーブ マスターポート: 3306 接続再試行: 60 マスターログファイル:mysql-bin.000001 読み取りマスターログ位置: 154 リレーログファイル: localhost-relay-bin.000002 リレーログ位置: 320 リレーマスターログファイル: mysql-bin.000001 スレーブIO実行中: はい スレーブSQL実行中: はい ........ mysql>スレーブステータスを表示\G ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 192.168.254.130 マスターユーザー: スレーブ マスターポート: 3306 接続再試行: 60 マスターログファイル:mysql-bin.000002 読み取りマスターログ位置: 462 リレー ログ ファイル: LAPTOP-QR83QEC0-relay-bin.000003 リレーログ位置: 675 リレーマスターログファイル: mysql-bin.000002 スレーブIO実行中: はい スレーブSQL実行中: はい レプリケート_Do_DB: ......... 同期が「はい」であることがわかります。ここで問題が発生している可能性があり、それを自分で解決する必要があります。たとえば、マシン番号 1 の設定を変更して、そのステータスを確認します。 mysql> マスターステータスを表示します。 +------------------+----------+--------------+--------------------------+-------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+--------------------------+-------------------+ | mysql-bin.000002 | 462 | mycat | mysql、information_schema | | +------------------+----------+--------------+--------------------------+-------------------+ セット内の 1 行 (0.00 秒) マイSQL> このメッセージを使用してマシンNo.3をマシンNo.1と同期させると、(新しい挿入ステートメントを実行したため)レポートされますが、テーブル作成ステートメントはログmysql-bin.000001にあり、ここで再起動し、新しいmysql-bin.000002があるため、元のNo.2の同期情報が変更されています。 mysql>スレーブステータスを表示\G ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 192.168.254.130 マスターユーザー: スレーブ マスターポート: 3306 接続再試行: 60 マスターログファイル:mysql-bin.000002 読み取りマスターログ位置: 462 リレー ログ ファイル: LAPTOP-QR83QEC0-relay-bin.000002 リレーログ位置: 320 リレーマスターログファイル: mysql-bin.000002 スレーブIO実行中: はい スレーブSQL実行中: いいえ レプリケート_Do_DB: レプリケート_無視_DB: テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 1146 Last_Error: クエリでエラー「テーブル 'mycat.test1' が存在しません」が発生しました。デフォルトのデータベース: 'mycat'。クエリ: 'insert into test1(`id`,`name`) value(2,"TOm")' 2) 3 番にデータを挿入します。1 番と 2 番が表示されるかどうか確認するために、3 番にもう一度データを挿入してみましょう。 操作番号3: mysql> test1(`id`,`name`) に値(3,"kitt") を挿入します。 クエリは正常、1 行が影響を受けました (0.01 秒) mysql> test1 から * を選択します。 +----+-------+ | ID | 名前 | +----+-------+ | 1 | ささいな | | 2 | トム | | 3 | キット | +----+-------+ セット内の 3 行 (0.00 秒) マイSQL> 1位を見る mysql> test1 から * を選択します。 +----+-------+ | ID | 名前 | +----+-------+ | 1 | ささいな | | 2 | トム | | 3 | キット | +----+-------+ セット内の 3 行 (0.00 秒) マイSQL> 2番の眺め mysql> test1 から * を選択します。 +----+-------+ | ID | 名前 | +----+-------+ | 1 | ささいな | | 2 | トム | | 3 | キット | +----+-------+ セット内の 3 行 (0.00 秒) マイSQL> 正常に同期が取れており、ホスト番号 3 の挿入情報が番号 1 に表示されていることがわかります。 3) 番号1でデータを処理する 次に、1番の操作を確認します 1位: mysql> test1(`id`,`name`) に値(4,"lisa") を挿入します。 クエリは正常、1 行が影響を受けました (0.00 秒) mysql> test1 から * を選択します。 +----+-------+ | ID | 名前 | +----+-------+ | 1 | ささいな | | 2 | トム | | 3 | キット | | 4 | リサ | +----+-------+ セット内の 4 行 (0.00 秒) マイSQL> 3番目: mysql> test1 から * を選択します。 +----+-------+ | ID | 名前 | +----+-------+ | 1 | ささいな | | 2 | トム | | 3 | キット | | 4 | リサ | +----+-------+ セット内の 4 行 (0.00 秒) マイSQL> 互いに同期していることがわかります。 これで、MySQL マスタースレーブ構成とマルチマスターマルチスレーブ構成に関するこの記事は終了です。MySQL マスタースレーブ構成とマルチマスターマルチスレーブ構成の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS3 はアニメーション属性を使用してクールな効果を実現します (推奨)
>>: ホームページのデザインはウェブデザイナーのレベルを最もよく反映する
コミットされていない読み取りの例の操作プロセス - コミットされていない読み取り1. 2 つの My...
目次MyISAM と InnoDBパフォーマンスの低下と SQL の速度低下の理由: MySQL 実...
目次序文型推論真理値の絞り込み平等の縮小演算子の絞り込みインスタンスの絞り込み狭まりの本質ユニオン型...
目次効果ドキュメント最初のステップステップ2ステップ3ソースコード効果ドキュメント最初のステップta...
文字セットエラーは常に存在するロケール: LC_CTYPE をデフォルト ロケールに設定できません:...
フレームセット ページは通常の Web ページとは多少異なります。依然として <HTML>...
Redisの本やSpring Cloud Alibabaの本を執筆した際に、一部の分散コンポーネント...
フロントエンドとバックエンドを完全に分離する場合、Vue プロジェクトでトークン検証を実装する一般的...
[LeetCode] 176. 2番目に高い給与従業員テーブルから 2 番目に高い給与を取得する ...
目次1. Docker Composeとは何か、インストールして使用する方法2. DOCleverと...
例: VMware IOInsight は、VM のストレージ I/O 動作を理解するのに役立つツー...
目次1. 初期SQLの準備2.MysqlはSQL文の実行時間をチェックします3. さまざまなクエリの...
1. 理由システムが Centos7.3 の場合、yum install docker を使用して直...
Ubuntu 17.10 での openssh-server のインストールと使用を記録します。イン...
ウェブサイトがワイドスクリーンの場合、ブラウザ ウィンドウを左右にドラッグすると、ウェブサイトの幅が...