MySQL グループレプリケーションの設定手順 (推奨)

MySQL グループレプリケーションの設定手順 (推奨)

MySQL-Group-Replication は、MySQL-5.7.17 で開発された新しい機能であり、マスターとスレーブ間の強力な一貫性を実現します。

しかし、現時点での主な問題は、パフォーマンスがあまり良くないことです。

【1】現在のMySQLデータベースのバージョンが5.7.17以上であることを確認する

/usr/local/mysql/bin/mysqld --バージョン
/usr/local/mysql/bin/mysqld Ver 5.7.17 (x86_64 上の linux-glibc2.5 用) (MySQL コミュニティ サーバー (GPL))

[2] 実験環境では、1つのホストに3つのMySQLサーバーをインストールし、その3つでグループレプリケーショングループを形成します。

/tmp/4406.cnf の内容は次のとおりです。

[mysqld]
####: グローバル用
ユーザー =jianglexing #mysql
ベースディレクトリ =/usr/local/mysql # /usr/local/mysql/
データディレクトリ =/tmp/4406/ # /usr/local/mysql/data
サーバーID =4406 # 0
ポート =4406 # 3306
ソケット =/tmp/4406/mysql.sock # /tmp/mysql.sock
自動増分 = 1 # 1
自動増分オフセット =1 # 1
小文字テーブル名 = 1 # 0
secure_file_priv = # ヌル


####: binlog用
binlog_format =行 # 行
log_bin =mysql-bin # オフ
binlog_rows_query_log_events = オン # オフ
log_slave_updates = オン # オフ
有効期限 =4 # 0
binlog_cache_size = 32768 # 32768 (32k)
binlog_checksum =なし # CRC32
sync_binlog =1 # 1


####: エラーログ用
log_error =mysql-err.log # /usr/local/mysql/data/localhost.localdomain.err


####: 遅いクエリログ用


####: gtidの場合
gtid_mode = オン # オフ
強制GTID一貫性 = オン # オフ


####: レプリケーション用
master_info_repository =テーブル # ファイル
relay_log_info_repository =テーブル # ファイル


####: グループレプリケーション用
transaction_write_set_extraction =XXHASH64 # オフ
ルーズグループレプリケーショングループ名="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #  
ルーズグループレプリケーション開始オンブート =オフ # オフ
ルーズグループレプリケーションローカルアドレス = "127.0.0.1:24901" #
ルーズグループレプリケーショングループシード = "127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903"
ルーズグループレプリケーションブートストラップグループ =オフ # オフ


####: innodbの場合
デフォルトのストレージエンジン = innodb # innodb
default_tmp_storage_engine = innodb # innodb
innodb_data_file_path =ibdata1:12M:autoextend # ibdata1:12M:autoextend
innodb_temp_data_file_path =ibtmp1:12M:自動拡張 # ibtmp1:12M:自動拡張
innodb_log_group_home_dir = ./ # ./
innodb_log_files_in_group = 2 # 2
innodb_log_file_size =48M # 50331648(48M)
innodb_file_format = バラクーダ # バラクーダ
innodb_file_per_table = オン # オン
innodb_page_size = 16k # 16384 (16k)
innodb_thread_concurrency = 0 # 0
innodb_read_io_threads = 4 # 4
innodb_write_io_threads = 4 # 4
innodb_purge_threads = 4 # 4
innodb_print_all_deadlocks = オン # オフ
innodb_deadlock_detect = オン # オン
innodb_lock_wait_timeout = 50 # 50
innodb_spin_wait_delay = 6 # 6
innodb_autoinc_lock_mode =2 # 1
innodb_stats_persistent = オン # オン
innodb_stats_persistent_sample_pages = 20 # 20
innodb_adaptive_hash_index = オン # オン
innodb_change_buffering =all # すべて
innodb_change_buffer_max_size = 25 # 25
innodb_flush_neighbors = 1 # 1
innodb_flush_method = O_DIRECT #  
innodb_doublewrite = オン # オン
innodb_log_buffer_size =16M # 16777216(16M)
innodb_flush_log_at_timeout = 1 # 1
innodb_flush_log_at_trx_commit = 1 # 1
自動コミット =1 # 1

[クライアント]
自動再ハッシュ

/tmp/5506.cnf の内容は次のとおりです。

[mysqld]
####: グローバル用
ユーザー =jianglexing #mysql
ベースディレクトリ =/usr/local/mysql # /usr/local/mysql/
データディレクトリ =/tmp/5506 # /usr/local/mysql/data
サーバーID =5506 # 0
ポート =5506 # 3306
ソケット =/tmp/5506/mysql.sock # /tmp/mysql.sock
自動増分 = 1 # 1
自動増分オフセット =1 # 1
小文字テーブル名 = 1 # 0
secure_file_priv = # ヌル


####: binlog用
binlog_format =行 # 行
log_bin =mysql-bin # オフ
binlog_rows_query_log_events = オン # オフ
log_slave_updates = オン # オフ
有効期限 =4 # 0
binlog_cache_size = 32768 # 32768 (32k)
binlog_checksum =なし # CRC32
sync_binlog =1 # 1


####: エラーログ用
log_error =mysql-err.log # /usr/local/mysql/data/localhost.localdomain.err


####: 遅いクエリログ用


####: gtidの場合
gtid_mode = オン # オフ
強制GTID一貫性 = オン # オフ


####: レプリケーション用
master_info_repository =テーブル # ファイル
relay_log_info_repository =テーブル # ファイル


####: グループレプリケーション用
transaction_write_set_extraction =XXHASH64 # オフ
ルーズグループレプリケーショングループ名="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #  
ルーズグループレプリケーション開始オンブート =オフ # オフ
ルーズグループレプリケーションローカルアドレス = "127.0.0.1:24902" #
ルーズグループレプリケーショングループシード = "127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903"
ルーズグループレプリケーションブートストラップグループ =オフ # オフ


####: innodbの場合
デフォルトのストレージエンジン = innodb # innodb
default_tmp_storage_engine = innodb # innodb
innodb_data_file_path =ibdata1:12M:autoextend # ibdata1:12M:autoextend
innodb_temp_data_file_path =ibtmp1:12M:自動拡張 # ibtmp1:12M:自動拡張
innodb_log_group_home_dir = ./ # ./
innodb_log_files_in_group = 2 # 2
innodb_log_file_size =48M # 50331648(48M)
innodb_file_format = バラクーダ # バラクーダ
innodb_file_per_table = オン # オン
innodb_page_size = 16k # 16384 (16k)
innodb_thread_concurrency = 0 # 0
innodb_read_io_threads = 4 # 4
innodb_write_io_threads = 4 # 4
innodb_purge_threads = 4 # 4
innodb_print_all_deadlocks = オン # オフ
innodb_deadlock_detect = オン # オン
innodb_lock_wait_timeout = 50 # 50
innodb_spin_wait_delay = 6 # 6
innodb_autoinc_lock_mode =2 # 1
innodb_stats_persistent = オン # オン
innodb_stats_persistent_sample_pages = 20 # 20
innodb_adaptive_hash_index = オン # オン
innodb_change_buffering =all # すべて
innodb_change_buffer_max_size = 25 # 25
innodb_flush_neighbors = 1 # 1
innodb_flush_method = O_DIRECT #  
innodb_doublewrite = オン # オン
innodb_log_buffer_size =16M # 16777216(16M)
innodb_flush_log_at_timeout = 1 # 1
innodb_flush_log_at_trx_commit = 1 # 1
自動コミット =1 # 1

/tmp/6606.cnf の内容は次のとおりです。

[mysqld]
####: グローバル用
ユーザー =jianglexing #mysql
ベースディレクトリ =/usr/local/mysql # /usr/local/mysql/
データディレクトリ =/tmp/6606/ # /usr/local/mysql/data
サーバーID =6606 # 0
ポート =6606 # 3306
ソケット =/tmp/6606/mysql.sock # /tmp/mysql.sock
自動増分 = 1 # 1
自動増分オフセット =1 # 1
小文字テーブル名 = 1 # 0
secure_file_priv = # ヌル


####: binlog用
binlog_format =行 # 行
log_bin =mysql-bin # オフ
binlog_rows_query_log_events = オン # オフ
log_slave_updates = オン # オフ
有効期限 =4 # 0
binlog_cache_size = 32768 # 32768 (32k)
binlog_checksum =なし # CRC32
sync_binlog =1 # 1


####: エラーログ用
log_error =mysql-err.log # /usr/local/mysql/data/localhost.localdomain.err


####: 遅いクエリログ用


####: gtidの場合
gtid_mode = オン # オフ
強制GTID一貫性 = オン # オフ


####: レプリケーション用
master_info_repository =テーブル # ファイル
relay_log_info_repository =テーブル # ファイル


####: グループレプリケーション用
transaction_write_set_extraction =XXHASH64 # オフ
ルーズグループレプリケーショングループ名="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #  
ルーズグループレプリケーション開始オンブート =オフ # オフ
ルーズグループレプリケーションローカルアドレス = "127.0.0.1:24903" #
ルーズグループレプリケーショングループシード = "127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903"
ルーズグループレプリケーションブートストラップグループ =オフ # オフ


####: innodbの場合
デフォルトのストレージエンジン = innodb # innodb
default_tmp_storage_engine = innodb # innodb
innodb_data_file_path =ibdata1:12M:autoextend # ibdata1:12M:autoextend
innodb_temp_data_file_path =ibtmp1:12M:自動拡張 # ibtmp1:12M:自動拡張
innodb_log_group_home_dir = ./ # ./
innodb_log_files_in_group = 2 # 2
innodb_log_file_size =48M # 50331648(48M)
innodb_file_format = バラクーダ # バラクーダ
innodb_file_per_table = オン # オン
innodb_page_size = 16k # 16384 (16k)
innodb_thread_concurrency = 0 # 0
innodb_read_io_threads = 4 # 4
innodb_write_io_threads = 4 # 4
innodb_purge_threads = 4 # 4
innodb_print_all_deadlocks = オン # オフ
innodb_deadlock_detect = オン # オン
innodb_lock_wait_timeout = 50 # 50
innodb_spin_wait_delay = 6 # 6
innodb_autoinc_lock_mode =2 # 1
innodb_stats_persistent = オン # オン
innodb_stats_persistent_sample_pages = 20 # 20
innodb_adaptive_hash_index = オン # オン
innodb_change_buffering =all # すべて
innodb_change_buffer_max_size = 25 # 25
innodb_flush_neighbors = 1 # 1
innodb_flush_method = O_DIRECT #  
innodb_doublewrite = オン # オン
innodb_log_buffer_size =16M # 16777216(16M)
innodb_flush_log_at_timeout = 1 # 1
innodb_flush_log_at_trx_commit = 1 # 1
自動コミット =1 # 1

【3】3つのデータベースインスタンスを初期化する

/usr/local/mysql/ に移動します
./bin/mysqld --defaultls-file=/tmp/4406.cnf --datadir=/tmp/4406 --initialize-insecrue を実行します。

./bin/mysqld --defaultls-file=/tmp/5506.cnf --datadir=/tmp/5506 --initialize-insecrue を実行します。

./bin/mysqld --defaultls-file=/tmp/6606.cnf --datadir=/tmp/6606 --initialize-insecrue を参照してください。

【4】グループレプリケーションの初期インスタンスを構成する

/usr/local/mysql/bin/mysqld --defaults-file=/tmp/4406.cnf &
mysql -h127.0.0.1 -uroot -P4406

-- ユーザーを追加 set sql_log_bin=0;
    '123456' で識別されるユーザー rpl_user@'%' を作成します。
    *.* 上のレプリケーション スレーブ、レプリケーション クライアントを rpl_user@'%' に付与します。
    '123456' で識別されるユーザー rpl_user@'127.0.0.1' を作成します。
    *.* 上のレプリケーション スレーブ、レプリケーション クライアントを rpl_user@'127.0.0.1' に付与します。
    '123456' で識別されるユーザー rpl_user@'localhost' を作成します。
    *.* 上のレプリケーション スレーブ、レプリケーション クライアントを rpl_user@'localhost' に付与します。
    sql_log_bin=1 を設定します。

-- レプリケーション資格情報を追加してマスターを変更する 
      マスターユーザー='rpl_user',
      マスターパスワード = '123456'
      チャネル 'group_replication_recovery' の場合;

-- グループ レプリケーション オブジェクトをインストールします。install plugin group_replication soname 'group_replication.so';

-- グループレプリケーションを開始します。set global group_replication_bootstrap_group=on;
    グループレプリケーションを開始します。
    グローバル group_replication_bootstrap_group を off に設定します。

【5】5506インスタンスの設定手順は以下のとおりです。

/usr/local/mysql/bin/mysqld --defaults-file=/tmp/5506.cnf &
mysql -h127.0.0.1 -uroot -P5506

-- ユーザーを追加 set sql_log_bin=0;
    '123456' で識別されるユーザー rpl_user@'%' を作成します。
    *.* 上のレプリケーション スレーブ、レプリケーション クライアントを rpl_user@'%' に付与します。
    '123456' で識別されるユーザー rpl_user@'127.0.0.1' を作成します。
    *.* 上のレプリケーション スレーブ、レプリケーション クライアントを rpl_user@'127.0.0.1' に付与します。
    '123456' で識別されるユーザー rpl_user@'localhost' を作成します。
    *.* 上のレプリケーション スレーブ、レプリケーション クライアントを rpl_user@'localhost' に付与します。
    sql_log_bin=1 を設定します。

-- レプリケーション資格情報を追加してマスターを変更する 
      マスターユーザー='rpl_user',
      マスターパスワード = '123456'
      チャネル 'group_replication_recovery' の場合;

-- グループ レプリケーション オブジェクトをインストールします。install plugin group_replication soname 'group_replication.so';

-- グループレプリケーションを開始する start group_replication; # これは初期化ではなく、参加だけであることに注意してください

【6】インスタンス6606の操作はインスタンス5506と同じです。これでグループレプリケーションの設定は完了です。

上記の MySQL グループ レプリケーション構成手順 (推奨) は、エディターが皆さんと共有する内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLコンテナ間のレプリケーション構成例の詳細な説明
  • MySQL5.6 レプリケーション マスタースレーブレプリケーション(読み書き分離)構成 完全版
  • MySQL 準同期レプリケーションの概要
  • MySQL 5.7 拡張エディション セミ同期レプリケーション パフォーマンスの最適化
  • MySQL-MMM インストール ガイド (MySQL 用マルチマスター レプリケーション マネージャー)
  • MySQL レプリケーションに基づく問題の概要
  • mysql5.5 マスタースレーブ(レプリケーション)構成方法
  • mysql5.5 マスタースレーブ (レプリケーション) マスタースレーブ構成
  • MySQL マスタースレーブレプリケーション 準同期レプリケーション

<<:  怖いハロウィーン Linux コマンド

>>:  jsオブジェクト指向カプセル化カスケードドロップダウンメニューリストの実装手順

推薦する

MySQL で SQL 文の実行時間を表示する方法

目次1. 初期SQLの準備2.MysqlはSQL文の実行時間をチェックします3. さまざまなクエリの...

Mysql の遅いクエリ操作の概要

MySQL の遅いクエリの説明MySQL スロー クエリ ログは、MySQL が提供するログ レコー...

Windows 10 で MySQL の解凍バージョンをインストールする方法の詳細なグラフィック チュートリアル

MySQL のインストールは、インストール バージョンと解凍バージョンに分かれています。インストール...

MySQLバッチは特定のフィールドのスペースを削除します

Mysql で特定のフィールドからスペースを一括削除する方法はありますか?文字列の前後のスペースだけ...

Reactにおけるフックの一般的な使用法

目次1. フックとは何ですか? 2. フックはなぜ現れるのでしょうか? 3. よく使われるフックは何...

nginxリバースプロキシによるセッション障害の問題の解決策

同僚から助けを求められました。バックエンド システムへのログインは成功したものの、システムには正常に...

Windows 10 に TomCat をインストールするチュートリアル図

WindowsにTomCatをインストールするこの記事では、WindowsプラットフォームにTomC...

理論の普及——ユーザーエクスペリエンス

1. 概念分析 1: UE ユーザー エクスペリエンス <br />英語ではユーザー エ...

Web開発でボックスを中央に配置するいくつかの方法

1. ボックスを中央に配置するいくつかの方法を記録します。 1.0、マージン幅固定、高さ中央配置。 ...

JavaScript は、マウスがテーブル行を通過するときに色の識別を実装します。

この記事では、マウスがテーブルの行を通過するときにJavaScriptを使用して色ラベルを表示する方...

3Dカルーセル効果を実現するjs

この記事では、3Dカルーセル効果をjsで実装するための具体的なコードを参考までに共有します。具体的な...

複数の例で HTML フォームを使用する方法

参考までに、HTMLフォームの使い方を9つの簡単な例で分析します。具体的な内容は次のとおりです。 1...

Vue SPA ファースト スクリーン最適化ソリューション

目次序文最適化ソ連オンデマンドインポート1. ルーティングファイルでコンポーネントをオンデマンドでイ...

シンプルなカレンダー効果を実現する js

この記事では、シンプルなカレンダー効果を実現するためのjsの具体的なコードを参考までに共有します。具...

純粋な CSS ドロップダウン メニュー

成果を達成する実装コードhtml <div id="コンテナ"> &...