mysql 8.0.18 mgr のインストールと切り替え機能

mysql 8.0.18 mgr のインストールと切り替え機能

1. システムインストールパッケージ

yum -y インストール make gcc-c++ cmake bison-devel ncurses-devel readline-devel libaio-devel perl libaio wget lrzsz vim libnuma* bzip2 xz

2. ファイアウォールとSELinuxをオフにする

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
強制0を設定する

/etc/init.d/iptables を停止する

echo "/etc/init.d/iptables stop">>/etc/rc.local

3. システム制限パラメータを変更する

cat >> /etc/security/limits.conf << EOF
#
###カスタム
#
* ソフトノーファイル 20480
* ハードnofile 65535
* ソフト nproc 20480
* ハード nproc 65535
終了

4. 各ホストのホスト解像度を設定する

cat >> /etc/hosts <<"EOF"

10.10.146.28 bj-db-m1 
10.10.1.139 bj-db-m2 
10.10.173.84 bj-db-m3 

終了

5. カーネルパラメータを変更する

cat >>/etc/sysctl.conf <<"EOF"
vm.swappiness=0
#TCP でサポートされるキューの数を増やす net.ipv4.tcp_max_syn_backlog = 65535
#切断時にリソースのリサイクルを減らす net.ipv4.tcp_max_tw_buckets = 8000
ネット.ipv4.tcp_tw_reuse = 1
ネット.ipv4.tcp_tw_recycle = 1
ネット.ipv4.tcp_fin_timeout = 10
#ローカルポート範囲を変更する net.ipv4.ip_local_port_range = 1024 65535
#キューに入る接続をさらに許可する net.ipv4.tcp_max_syn_backlog = 4096 
#ローカルのみで使用されるデータベースサーバーの場合 net.ipv4.tcp_fin_timeout = 30
#ポート監視キュー net.core.somaxconn=65535
#データ受信速度 net.core.netdev_max_backlog=65535
ネットコアwmem_default=87380
ネットコアwmem_max=16777216
ネットコアrmem_default=87380
ネットコアrmem_max=16777216
終了

sysctl -p

6. インストールパッケージをダウンロードする

https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz をダウンロードします。
# インストールパッケージを解凍します tar -xJf mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz
# ディレクトリに入り、将来のアップグレードを容易にするためにソフトリンクを作成します cd /usr/local/
ln -s /opt/mysql-8.0.18-linux-glibc2.12-x86_64 mysql
# ユーザーグループを作成、mysql に追加
ユーザー追加 -g mysql mysql -d /home/mysql -s /sbin/nologin

# 対応するディレクトリを作成します mkdir -p /data/mysql/mysql_3306/{logs,tmp,undolog}

7. my.cnf設定ファイルを作成する

7-1. 最初のマシン構成

# まず if [ -f /etc/my.cnf ]; then
 mv /etc/my.cnf /etc/my.cnf.`日付 +%Y%m%d%H%m`.bak
フィ 
# ノード1
cat >/data/mysql/mysql_3306/my_3306.cnf <<"EOF"
[クライアント]
ポート = 3306
ソケット = /data/mysql/mysql_3306/tmp/mysql_3306.sock

[mysql]
プロンプト="\u@\h \R:\m:\s [\d]> "
自動再ハッシュなし

[mysqld]
ユーザー = mysql
ポート = 3306
管理者アドレス = 127.0.0.1
ベースディレクトリ = /usr/local/mysql
データディレクトリ = /data/mysql/mysql_3306/data
ソケット = /data/mysql/mysql_3306/tmp/mysql_3306.sock
pid ファイル = mysql_3306.pid
文字セットサーバー = utf8mb4
スキップ名解決 = 1

# テーブルを複製しない = mysql.%
# 複製ワイルド無視テーブル = テスト.%
#replicate-wild-ignore-table=information_schema.%

# 2マスター構成
#サーバー1 
#自動増分オフセット = 1
#自動増分 = 2 

#サーバー2    
#自動増分オフセット = 2
#自動増分 = 2


# 準同期レプリケーション設定 #
#plugin_dir = /usr/local/mysql/lib/mysql/plugin
#plugin_load = "validate_password.so;rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
plugin_dir = /usr/local/mysql/lib/plugin #公式バージョンのパス plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" #公式バージョンのパス slave_parallel_workers = 4
スレーブパラレルタイプ = LOGICAL_CLOCK
スレーブ_preserve_commit_order = 1

オープンファイル制限 = 65535
バックログ = 1024
最大接続数 = 1024
最大接続エラー数 = 1000000
テーブルオープンキャッシュ = 1024
テーブル定義キャッシュ = 1024
テーブルオープンキャッシュインスタンス = 64
スレッドスタック = 512K
外部ロック = FALSE
最大許容パケット = 32M
ソートバッファサイズ = 4M
結合バッファサイズ = 4M
スレッドキャッシュサイズ = 1536
インタラクティブタイムアウト = 600
待機タイムアウト = 600
tmp_table_size = 32M
最大ヒープテーブルサイズ = 32M
遅いクエリログ = 1
log_timestamps = システム
slow_query_log_file = /data/mysql/mysql_3306/logs/slow.log
ログエラー = /data/mysql/mysql_3306/logs/error.log
長いクエリ時間 = 0.1
ログクエリがインデックスを使用していない = 1
ログスロットルクエリがインデックスを使用していない = 60
検査行数の最小制限 = 100
ログ_遅い_管理ステートメント = 1
ログ_スロー_スレーブ_ステートメント = 1
サーバーID = 1423306
ログ bin = /data/mysql/mysql_3306/logs/mysql-bin
同期バイナリログ = 1
binlog_cache_size = 4M
最大バイナリログキャッシュサイズ = 2G
最大バイナリログサイズ = 1G
binlog_expire_logs_seconds=2592000 
マスター情報リポジトリ = テーブル
リレーログ情報リポジトリ = テーブル
gtid_mode = オン
強制GTID一貫性 = 1
binlog_checksum=なし
ログスレーブ更新
スレーブ行検索アルゴリズム = 'INDEX_SCAN、HASH_SCAN'
binlog_format = 行
binlog_row_image=フル

リレーログリカバリ = 1
リレーログパージ = 1
キーバッファサイズ = 32M
読み取りバッファサイズ = 8M
読み取りバッファサイズ = 4M
バルク挿入バッファサイズ = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
ロック待機タイムアウト = 3600
タイムスタンプの明示的なデフォルト = 1
innodb_thread_concurrency = 0
innodb_sync_spin_loops = 100
innodb_spin_wait_delay = 30

#transaction_isolation = 繰り返し読み取り
transaction_isolation = READ-COMMITTED
#innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 2867M
innodb_buffer_pool_instances = 4
起動時の innodb_buffer_pool_load = 1
シャットダウン時の innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path = ibdata1:1G:自動拡張
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 3
innodb_max_undo_log_size = 4G
innodb_undo_directory = /data/mysql/mysql_3306/undolog

# サーバーの IOPS 能力に応じて調整します。# 通常の SSD を使用する場合は、10,000 ~ 20,000 に調整できます。
# ハイエンドのPCIe SSDカードを構成する場合は、50000~80000のように高く調整できます。
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_sync = 0
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 4G
innodb_stats_on_metadata = 0

# MySQL 8 用の変数
ログエラーの詳細度 = 3
innodb_print_ddl_logs = 1
binlog_expire_logs_seconds = 2592000
#innodb_dedicated_server = 0

innodb_status_file = 1
# 注意: innodb_status_output と innodb_status_output_locks を有効にすると、ログエラーファイルがより速く大きくなる可能性があります innodb_status_output = 0
innodb_status_output_locks = 0

#パフォーマンススキーマ
パフォーマンススキーマ = 1
performance_schema_instrument = '%memory%=オン'
パフォーマンス スキーマ インストルメント = '%lock%=on'

#innodb モニター
innodb_monitor_enable="モジュール_innodb"
innodb_monitor_enable="モジュールサーバー"
innodb_monitor_enable="モジュール_dml"
innodb_monitor_enable="モジュール_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="モジュール_os"
innodb_monitor_enable="モジュールパージ"
innodb_monitor_enable="モジュールログ"
innodb_monitor_enable="モジュールロック"
innodb_monitor_enable="モジュールバッファ"
innodb_monitor_enable="モジュールインデックス"
innodb_monitor_enable="モジュール_ibuf_system"
innodb_monitor_enable="モジュールバッファページ"
innodb_monitor_enable="モジュール適応ハッシュ"

#MGR
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
素早い
最大許容パケット = 32M

[mysqld_safe]
#malloc-lib=/usr/local/mysql/lib/jmalloc.so 
ナイス=-19
オープンファイル制限=65535

終了


7-2. 2台目のマシン構成

# 2番目のマシンif [ -f /etc/my.cnf ]; then
 mv /etc/my.cnf /etc/my.cnf.`日付 +%Y%m%d%H%m`.bak
フィ 
# ノード1
cat >/data/mysql/mysql_3306/my_3306.cnf <<"EOF"
[クライアント]
ポート = 3306
ソケット = /data/mysql/mysql_3306/tmp/mysql_3306.sock

[mysql]
プロンプト="\u@\h \R:\m:\s [\d]> "
自動再ハッシュなし

[mysqld]
ユーザー = mysql
ポート = 3306
管理者アドレス = 127.0.0.1
ベースディレクトリ = /usr/local/mysql
データディレクトリ = /data/mysql/mysql_3306/data
ソケット = /data/mysql/mysql_3306/tmp/mysql_3306.sock
pid ファイル = mysql_3306.pid
文字セットサーバー = utf8mb4
スキップ名解決 = 1

# テーブルを複製しない = mysql.%
# 複製ワイルド無視テーブル = テスト.%
#replicate-wild-ignore-table=information_schema.%

# 2マスター構成
#サーバー1 
#自動増分オフセット = 1
#自動増分 = 2 

#サーバー2    
#自動増分オフセット = 2
#自動増分 = 2


# 準同期レプリケーション設定 #
#plugin_dir = /usr/local/mysql/lib/mysql/plugin
#plugin_load = "validate_password.so;rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
plugin_dir = /usr/local/mysql/lib/plugin #公式バージョンのパス plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" #公式バージョンのパス slave_parallel_workers = 4
スレーブパラレルタイプ = LOGICAL_CLOCK
スレーブ_preserve_commit_order = 1

オープンファイル制限 = 65535
バックログ = 1024
最大接続数 = 1024
最大接続エラー数 = 1000000
テーブルオープンキャッシュ = 1024
テーブル定義キャッシュ = 1024
テーブルオープンキャッシュインスタンス = 64
スレッドスタック = 512K
外部ロック = FALSE
最大許容パケット = 32M
ソートバッファサイズ = 4M
結合バッファサイズ = 4M
スレッドキャッシュサイズ = 1536
インタラクティブタイムアウト = 600
待機タイムアウト = 600
tmp_table_size = 32M
最大ヒープテーブルサイズ = 32M
遅いクエリログ = 1
log_timestamps = システム
slow_query_log_file = /data/mysql/mysql_3306/logs/slow.log
ログエラー = /data/mysql/mysql_3306/logs/error.log
長いクエリ時間 = 0.1
ログクエリがインデックスを使用していない = 1
ログスロットルクエリがインデックスを使用していない = 60
検査行数の最小制限 = 100
ログ_遅い_管理ステートメント = 1
ログ_スロー_スレーブ_ステートメント = 1
サーバーID = 1433306
ログ bin = /data/mysql/mysql_3306/logs/mysql-bin
同期バイナリログ = 1
binlog_cache_size = 4M
最大バイナリログキャッシュサイズ = 2G
最大バイナリログサイズ = 1G
binlog_expire_logs_seconds=2592000 
マスター情報リポジトリ = テーブル
リレーログ情報リポジトリ = テーブル
gtid_mode = オン
強制GTID一貫性 = 1
binlog_checksum=なし
ログスレーブ更新
スレーブ行検索アルゴリズム = 'INDEX_SCAN,HASH_SCAN'
binlog_format = 行
binlog_row_image=フル

リレーログリカバリ = 1
リレーログパージ = 1
キーバッファサイズ = 32M
読み取りバッファサイズ = 8M
読み取りバッファサイズ = 4M
バルク挿入バッファサイズ = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
ロック待機タイムアウト = 3600
タイムスタンプの明示的なデフォルト = 1
innodb_thread_concurrency = 0
innodb_sync_spin_loops = 100
innodb_spin_wait_delay = 30

#transaction_isolation = 繰り返し読み取り
transaction_isolation = READ-COMMITTED
#innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 2867M
innodb_buffer_pool_instances = 4
起動時の innodb_buffer_pool_load = 1
シャットダウン時の innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path = ibdata1:1G:自動拡張
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 3
innodb_max_undo_log_size = 4G
innodb_undo_directory = /data/mysql/mysql_3306/undolog

# サーバーの IOPS 能力に応じて調整します。# 通常の SSD を使用する場合は、10,000 ~ 20,000 に調整できます。
# ハイエンドのPCIe SSDカードを構成する場合は、50000~80000のように高く調整できます。
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_sync = 0
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 4G
innodb_stats_on_metadata = 0

# MySQL 8 用の変数
ログエラーの詳細度 = 3
innodb_print_ddl_logs = 1
binlog_expire_logs_seconds = 2592000
#innodb_dedicated_server = 0

innodb_status_file = 1
# 注意: innodb_status_output と innodb_status_output_locks を有効にすると、ログエラーファイルがより速く大きくなる可能性があります innodb_status_output = 0
innodb_status_output_locks = 0

#パフォーマンススキーマ
パフォーマンススキーマ = 1
performance_schema_instrument = '%memory%=オン'
パフォーマンス スキーマ インストルメント = '%lock%=on'

#innodb モニター
innodb_monitor_enable="モジュール_innodb"
innodb_monitor_enable="モジュールサーバー"
innodb_monitor_enable="モジュール_dml"
innodb_monitor_enable="モジュール_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="モジュール_os"
innodb_monitor_enable="モジュールパージ"
innodb_monitor_enable="モジュールログ"
innodb_monitor_enable="モジュールロック"
innodb_monitor_enable="モジュールバッファ"
innodb_monitor_enable="モジュールインデックス"
innodb_monitor_enable="モジュール_ibuf_system"
innodb_monitor_enable="モジュールバッファページ"
innodb_monitor_enable="モジュール適応ハッシュ"

#MGR
: : : : : : : : : : : : : : :
素早い
最大許容パケット = 32M

[mysqld_safe]
#malloc-lib=/usr/local/mysql/lib/jmalloc.so 
ナイス=-19
オープンファイル制限=65535

終了

7-3. 3番目の構成

# 3番目のステーション if [ -f /etc/my.cnf ]; then
 mv /etc/my.cnf /etc/my.cnf.`日付 +%Y%m%d%H%m`.bak
フィ 
# ノード1
cat >/data/mysql/mysql_3306/my_3306.cnf <<"EOF"
[クライアント]
ポート = 3306
ソケット = /data/mysql/mysql_3306/tmp/mysql_3306.sock

[mysql]
プロンプト="\u@\h \R:\m:\s [\d]> "
自動再ハッシュなし

[mysqld]
ユーザー = mysql
ポート = 3306
管理者アドレス = 127.0.0.1
ベースディレクトリ = /usr/local/mysql
データディレクトリ = /data/mysql/mysql_3306/data
ソケット = /data/mysql/mysql_3306/tmp/mysql_3306.sock
pid ファイル = mysql_3306.pid
文字セットサーバー = utf8mb4
スキップ名解決 = 1

# テーブルを複製しない = mysql.%
# 複製ワイルド無視テーブル = テスト.%
#replicate-wild-ignore-table=information_schema.%

# 2マスター構成
#サーバー1 
#自動増分オフセット = 1
#自動増分 = 2 

#サーバー2    
#自動増分オフセット = 2
#自動増分 = 2


# 準同期レプリケーション設定 #
#plugin_dir = /usr/local/mysql/lib/mysql/plugin
#plugin_load = "validate_password.so;rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
plugin_dir = /usr/local/mysql/lib/plugin #公式バージョンのパス plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" #公式バージョンのパス slave_parallel_workers = 4
スレーブパラレルタイプ = LOGICAL_CLOCK
スレーブ_preserve_commit_order = 1

オープンファイル制限 = 65535
バックログ = 1024
最大接続数 = 1024
最大接続エラー数 = 1000000
テーブルオープンキャッシュ = 1024
テーブル定義キャッシュ = 1024
テーブルオープンキャッシュインスタンス = 64
スレッドスタック = 512K
外部ロック = FALSE
最大許容パケット = 32M
ソートバッファサイズ = 4M
結合バッファサイズ = 4M
スレッドキャッシュサイズ = 1536
インタラクティブタイムアウト = 600
待機タイムアウト = 600
tmp_table_size = 32M
最大ヒープテーブルサイズ = 32M
遅いクエリログ = 1
log_timestamps = システム
slow_query_log_file = /data/mysql/mysql_3306/logs/slow.log
ログエラー = /data/mysql/mysql_3306/logs/error.log
長いクエリ時間 = 0.1
ログクエリがインデックスを使用していない = 1
ログスロットルクエリがインデックスを使用していない = 60
検査行数の最小制限 = 100
ログ_遅い_管理ステートメント = 1
ログ_スロー_スレーブ_ステートメント = 1
サーバーID = 1443306
ログ bin = /data/mysql/mysql_3306/logs/mysql-bin
同期バイナリログ = 1
binlog_cache_size = 4M
最大バイナリログキャッシュサイズ = 2G
最大バイナリログサイズ = 1G
binlog_expire_logs_seconds=2592000 
マスター情報リポジトリ = テーブル
リレーログ情報リポジトリ = テーブル
gtid_mode = オン
強制GTID一貫性 = 1
binlog_checksum=なし
ログスレーブ更新
スレーブ行検索アルゴリズム = 'INDEX_SCAN,HASH_SCAN'
binlog_format = 行
binlog_row_image=フル

リレーログリカバリ = 1
リレーログパージ = 1
キーバッファサイズ = 32M
読み取りバッファサイズ = 8M
読み取りバッファサイズ = 4M
バルク挿入バッファサイズ = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
ロック待機タイムアウト = 3600
タイムスタンプの明示的なデフォルト = 1
innodb_thread_concurrency = 0
innodb_sync_spin_loops = 100
innodb_spin_wait_delay = 30

#transaction_isolation = 繰り返し読み取り
transaction_isolation = READ-COMMITTED
#innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 2867M
innodb_buffer_pool_instances = 4
起動時の innodb_buffer_pool_load = 1
シャットダウン時の innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path = ibdata1:1G:自動拡張
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 3
innodb_max_undo_log_size = 4G
innodb_undo_directory = /data/mysql/mysql_3306/undolog

# サーバーの IOPS 能力に応じて調整します。# 通常の SSD を使用する場合は、10,000 ~ 20,000 に調整できます。
# ハイエンドのPCIe SSDカードを構成する場合は、50000~80000のように高く調整できます。
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_sync = 0
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 4G
innodb_stats_on_metadata = 0

# MySQL 8 用の変数
ログエラーの詳細度 = 3
innodb_print_ddl_logs = 1
binlog_expire_logs_seconds = 2592000
#innodb_dedicated_server = 0

innodb_status_file = 1
# 注意: innodb_status_output と innodb_status_output_locks を有効にすると、ログエラーファイルがより速く大きくなる可能性があります innodb_status_output = 0
innodb_status_output_locks = 0

#パフォーマンススキーマ
パフォーマンススキーマ = 1
performance_schema_instrument = '%memory%=オン'
パフォーマンス スキーマ インストルメント = '%lock%=on'

#innodb モニター
innodb_monitor_enable="モジュール_innodb"
innodb_monitor_enable="モジュールサーバー"
innodb_monitor_enable="モジュール_dml"
innodb_monitor_enable="モジュール_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="モジュール_os"
innodb_monitor_enable="モジュールパージ"
innodb_monitor_enable="モジュールログ"
innodb_monitor_enable="モジュールロック"
innodb_monitor_enable="モジュールバッファ"
innodb_monitor_enable="モジュールインデックス"
innodb_monitor_enable="モジュール_ibuf_system"
innodb_monitor_enable="モジュールバッファページ"
innodb_monitor_enable="モジュール適応ハッシュ"

#MGR
: : : : : : : : : : : : : : :
素早い
最大許容パケット = 32M

[mysqld_safe]
#malloc-lib=/usr/local/mysql/lib/jmalloc.so 
ナイス=-19
オープンファイル制限=65535

終了

8. 権限を変更し、初期化して起動する

chown -R mysql.mysql /data/mysql/mysql_3306
chown -R mysql.mysql /usr/local/mysql/

# 初期化 # /usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql --initialize-insecure
# 公式の推奨は --initialize を使用することです。これにより、エラー ログに入力するのが難しい一時パスワードが生成されます。ここではパスワードを使用しない方法を使用します。
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql_3306/my_3306.cnf --initialize-insecure --user=mysql &

#データベースを起動します /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql_3306/my_3306.cnf &

9. ログを表示する

#9. ログを確認する# tail -f /data/mysql/mysql_3306/logs/error.log

10. 初回ログイン

#10. 最初のログイン /usr/local/mysql/bin/mysql -S /data/mysql/mysql_3306/tmp/mysql_3306.sock

11. パスワードを変更する

# パスワード変更方法 set sql_log_bin = 0;

ALTER USER 'root'@'localhost' は 'GJjumB6g4FcwdF3R6AZc' によって mysql_native_password で識別され、パスワードは期限切れになりません。
'GJjumB6g4FcwdF3R6AZc' によって mysql_native_password で識別されるユーザー 'root'@'127.0.0.1' を作成します。パスワードは期限切れではありません。
'root'@'127.0.0.1' に *.* のすべての権限を GRANT オプションで付与します。

'fcfmTbRw1tz2x5L5GvjJ' によって mysql_native_password で識別されるユーザー 'admin_m'@'127.0.0.1' を作成します。パスワードは無期限です。 
'admin_m'@'127.0.0.1' に *.* のすべての権限を GRANT オプションで付与します。

ユーザー 'admin_m'@'%' を作成します。'fcfmTbRw1tz2x5L5GvjJ' によって mysql_native_password で識別されます。パスワードは期限切れになりません。 
'admin_m'@'%' に GRANT オプションを使用して *.* のすべての権限を付与します。

'EeCrfUDO6wRzn72BBQ52' によって mysql_native_password で識別されるユーザー 'test_w'@'%' を作成します。パスワードは期限切れではありません。
db144.* に対する挿入、削除、更新、選択権限を 'test_w'@'%' に付与します。

'EeCrfUDO6wRzn72BBQ52' によって mysql_native_password で識別されるユーザー 'test_r'@'%' を作成します。パスワードは期限切れになりません。
db144.* に対する挿入、削除、更新、選択権限を 'test_r'@'%' に付与します。

'replpfhOTnWffQdQL3F3' によって mysql_native_password で識別されたユーザー 'repl'@'%' を作成します。
*.* のレプリケーションスレーブを 'repl'@'%' に付与します。
sql_log_bin = 1 に設定します。

12. ショートカット設定

ショートカット

ln -s /usr/local/mysql/lib/libmysqlclient.so /usr/lib/
: ローカルマシンでmysqlclient.so.21を実行する
ln -s /usr/local/mysql/lib/libmysqlclient.so /usr/lib64/
: := /usr/local/mysql/lib/libmysqlclient.so.21 /usr/lib64/libmysqlclient.so.21 を使います。


ln -s /data/mysql/mysql_3306/tmp/mysql_3306.sock /tmp/mysql.sock
ln -s /usr/local/mysql/bin/* /usr/bin/

cat >>~/.bashrc <<"EOF"
##########


エイリアス mysql.3306.start="/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql_3306/my_3306.cnf &"
エイリアス mysql.3306.stop="/usr/local/mysql/bin/mysqladmin -h127.0.0.1 -P 3306 -uroot -p'GJjumB6g4FcwdF3R6AZc' シャットダウン &"
エイリアス mysql.3306.login="/usr/local/mysql/bin/mysql -h127.0.0.1 -P 3306 -uroot -p'GJjumB6g4FcwdF3R6AZc'"


##########
終了


ソース /root/.bash_profile

cat >>/etc/ld.so.conf <<"EOF"
ローカル
終了

ldconfig 
mysql.3306.ログイン

13. MGR 構成

13-1. 最初のマシン構成

# MGR の最初のマシン構成:
# ステップ 1: レプリケーション用のユーザーを作成します。set sql_log_bin=0;
'JhXpMK44ju8Vp5bxvO2N' によって識別されるユーザー 'repuser'@'%' を作成します。

*.* 上のレプリケーション スレーブ、レプリケーション クライアントを 'repuser'@'%' に付与します。

'JhXpMK44ju8Vp5bxvO2N' によって識別されるユーザー 'repuser'@'127.0.0.1' を作成します。

*.* 上のレプリケーション スレーブ、レプリケーション クライアントを 'repuser'@'127.0.0.1' に付与します。

'JhXpMK44ju8Vp5bxvO2N' によって識別されるユーザー 'repuser'@'localhost' を作成します。

*.* 上のレプリケーション スレーブ、レプリケーション クライアントを 'repuser'@'localhost' に付与します。

sql_log_bin=1 を設定します。

# 手順 2: レプリケーションに使用するユーザーを設定します。チャネル 'group_replication_recovery' のマスターを master_user='repuser'、master_password='JhXpMK44ju8Vp5bxvO2N' に変更します。

# ステップ 3: mysql グループ レプリケーション プラグインをインストールします。 # 注: my.cnf に plugin_load="group_replication=group_replication.so" と記述した場合、plugin group_replication soname 'group_replication.so' をインストールする必要はありません。

# show plugins;show plugins; を実行してインストールが成功したかどうかを確認します。

# ステップ 4: グループを作成します (正式名称はレプリケーション グループを初期化することです)。set global group_replication_bootstrap_group=on;
グループレプリケーションを開始します。
グローバル group_replication_bootstrap_group を off に設定します。

performance_schema.replication_group_members から * を選択します。


13-2. 2番目と3番目のマシン構成

##########################################################################
#MGR は他のスレーブ ノードを構成します #すべてのスレーブ ホスト上の mysql で実行します #ステップ 1: レプリケーション用のユーザーを作成します set sql_log_bin=0;
'JhXpMK44ju8Vp5bxvO2N' によって識別されるユーザー 'repuser'@'%' を作成します。

*.* 上のレプリケーション スレーブ、レプリケーション クライアントを 'repuser'@'%' に付与します。

'JhXpMK44ju8Vp5bxvO2N' によって識別されるユーザー 'repuser'@'127.0.0.1' を作成します。

*.* 上のレプリケーション スレーブ、レプリケーション クライアントを 'repuser'@'127.0.0.1' に付与します。

'JhXpMK44ju8Vp5bxvO2N' によって識別されるユーザー 'repuser'@'localhost' を作成します。

*.* 上のレプリケーション スレーブ、レプリケーション クライアントを 'repuser'@'localhost' に付与します。

sql_log_bin=1 を設定します。

# 手順 2: レプリケーションに使用するユーザーを設定します。チャネル 'group_replication_recovery' のマスターを master_user='repuser'、master_password='JhXpMK44ju8Vp5bxvO2N' に変更します。

# ステップ 3: mysql グループ レプリケーション プラグインをインストールします。 # 注: my.cnf に plugin_load="group_replication=group_replication.so" と記述した場合、plugin group_replication soname 'group_replication.so' をインストールする必要はありません。

# show plugins;show plugins; を実行してインストールが成功したかどうかを確認します。

# ステップ 4: 先ほど作成したレプリケーション グループに参加します。start group_replication;
performance_schema.replication_group_members から * を選択します。
#########################################################################################

# ステータスを確認するmysql> select * from performance_schema.replication_group_members;
+---------------------------+---------------------------------------+-------------+-------------+--------------+--------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+---------------------------------------+-------------+-------------+--------------+--------------+----------------+
| group_replication_applier | d955da6d-0048-11ea-b7b4-525400f4342d | bj-db-m1 | 3306 | オンライン | プライマリ | 8.0.18 |
| group_replication_applier | e050c34f-0048-11ea-917d-52540021fab9 | bj-db-m3 | 3306 | オンライン | セカンダリ | 8.0.18 |
| group_replication_applier | e6c56347-0048-11ea-9e8b-5254007c241f | bj-db-m2 | 3306 | オンライン | セカンダリ | 8.0.18 |
+---------------------------+---------------------------------------+-------------+-------------+--------------+--------------+----------------+
セット内の 3 行 (0.00 秒)

14. 単一マスターから複数マスターへの切り替え

######################################################################
# シングルマスターからマルチマスターへの切り替え # MGR 切り替えモードではグループレプリケーションを再起動する必要があるため、最初にすべてのノードでグループレプリケーションをシャットダウンする必要があります。
#group_replication_single_primary_mode=OFF およびその他のパラメータを設定し、グループレプリケーションを開始します。
1) グループレプリケーションを停止します (すべての MGR ノードで実行)。
グループレプリケーションを停止します。 
グローバル group_replication_single_primary_mode を OFF に設定します。
グローバル group_replication_enforce_update_everywhere_checks=ON を設定します。

2) 実行する MGR ノードを選択します (たとえば、ここでは MGR-node1 を選択します)。
グローバル group_replication_recovery_get_public_key=1 を設定します。
グローバル group_replication_bootstrap_group を ON に設定します。
GROUP_REPLICATIONを開始します。
グローバル group_replication_bootstrap_group を OFF に設定します。

3) 次に、他の MGR ノード (ここでは MGR-node2 と MGR-node3) で実行します。
グローバル group_replication_recovery_get_public_key=1 を設定します。
GROUP_REPLICATIONを開始します。

4) MGR グループ情報を表示する (どの MGR ノードでも表示できます)
performance_schema.replication_group_members から * を選択します。


# すべての MGR ノードのステータスがオンライン、ロールが PRIMARY、MGR マルチマスター モードが正常に確立されていることがわかります。

##########################################################################

15. 複数のマスターから単一のマスターへの切り替え

##########################################################################
# マルチマスターモードからシングルマスターモードに戻す 1) グループレプリケーションを停止します (すべての MGR ノードで実行)。
グループレプリケーションを停止します。
グローバル group_replication_enforce_update_everywhere_checks=OFF を設定します。
グローバル group_replication_single_primary_mode を ON に設定します。

2) マスターノードとしてノードを選択し、マスターノード上で実行します(ここでは、MGR-node1 がマスターノードとして選択されています)
グローバル group_replication_bootstrap_group を ON に設定します。
GROUP_REPLICATIONを開始します。
グローバル group_replication_bootstrap_group を OFF に設定します。
 
3) 残りのノード、つまりスレーブ ノードで実行します (ここでのスレーブ ノードは MGR-node2 と MGR-node3 を指します)。
GROUP_REPLICATIONを開始します。

4) MGR グループ情報を表示する (どの MGR ノードでも表示できます)
performance_schema.replication_group_members から * を選択します。
##########################################################################

16. 故障時の予防措置

# 障害予防策:
# シングルマスターモードで、MGR-node1 ノードを復元します。復元後、ノードのグループレプリケーション機能を手動でアクティブ化する必要があります。# ノードに障害が発生した場合は、復元後に MGR クラスターに再参加する必要があります。正しい方法は次のとおりです。
GROUP_REPLICATIONを停止します。
GROUP_REPLICATIONを開始します。

# ノードがハングしても、他のノードは同期を続行します。
# 障害が発生したノードが復旧したら、ノードのグループレプリケーション機能を手動でアクティブ化するだけで済みます(「START GROUP_REPLICATION;」)。
# MGR グループ レプリケーション クラスターに通常どおり参加し、他のノードからのデータを自動的に同期できます。


# I/O レプリケーションで例外が発生した場合 # データが正しいことを確認した後 # マスター データベースの gtid を検索します mysql> show global variables like '%gtid%';
+------------------------------------------------+------------------------------------------------------+
| 変数名 | 値 |
+------------------------------------------------+------------------------------------------------------+
| binlog_gtid_simple_recovery | オン |
| 強制GTID一貫性 | オン |
| グループレプリケーションgtid割り当てブロックサイズ | 1000000 |
| gtid_executed | 58f6e65e-9309-11e9-9d88-525400184a0a:1-946050:1000003 |
| gtid_executed_compression_period | 1000 |
| gtid_mode | オン |
| gtid_owned | |
| gtid_purged | |
| session_track_gtids | オフ |
+------------------------------------------------+------------------------------------------------------+
セット内の行数 (0.00 秒)

# 障害のあるスレーブの GROUP_REPLICATION を停止します。
マスターをリセットします。
グローバルgtid_purged='58f6e65e-9309-11e9-9d88-525400184a0a:1-946055:1000003'を設定します。
GROUP_REPLICATIONを開始します。

# ホワイトリストネットワークセグメントを追加します。stop group_replication;
グローバル group_replication_ip_whitelist="127.0.0.1/32,172.16.60.0/24,172.16.50.0/24,172.16.51.0/24" を設定します。
グループレプリケーションを開始します。
「group_replication_ip_whitelist」のような変数を表示します。

# 注意: ホワイトリストを設定する前に、まずグループレプリケーションを無効にして、「stop group_replication;」を実行する必要があります。

要約する

以上がMySQL 8.0.18 mgr構築と切り替え機能についての編集者による紹介でした。皆様のお役に立てれば幸いです!

以下もご興味があるかもしれません:
  • MySQL 8.0.15 で MGR シングル マスターと複数スレーブを構成する方法
  • MySQL MGR の利点は何ですか?
  • mysql MGR シングルマスターとマルチマスターモードの切り替えの知識ポイントの詳細な説明
  • MySQL 8.0.18 はクローンプラグインを使用して MGR 実装を再構築します
  • MySQL 5.7 MGR シングルマスター決定マスターノード方式の詳細説明
  • MySQL MGR 構築時の一般的な問題と解決策

<<:  Vueはタブ切り替えの虫眼鏡効果を実装します

>>:  GoのDockerデプロイメント用の基本イメージ2つの実装

推薦する

クロスオリジン画像リソース権限(CORS 対応画像)

HTML 仕様書では、画像の crossorigin 属性が導入されています。適切なヘッダー情報 ...

MySql はコミットする必要がありますか?

MySQL が挿入などの操作を実行するときにコミットする必要があるかどうかは、ストレージ エンジン...

ソースコードの観点からキープアライブコンポーネントのキャッシュ原理に答える

今日は、早速本題に入り、面接中に尋ねられた質問、つまりキープアライブ コンポーネントのキャッシュ原理...

LinuxにDockerをインストールする(非常に簡単なインストール方法)

最近、かなり暇です。大学4年生として数か月間インターンをしていました。インターンとして、Docker...

MySQL フルテキスト検索の中国語ソリューションとサンプルコード

MySQL 全文検索中国語ソリューション最近、会社のプロジェクトで、データベースで中国語を検索する機...

JSにおける4つのデータ型判定方法

目次1. 型2. インスタンス3. コンストラクター4.toString() この記事では、4 つの...

MySQL テーブルの垂直分割と水平分割

垂直分割垂直分割とは、データテーブルの列を分割すること、つまり、多くの列を持つテーブルを複数のテーブ...

使用したコマンドを表示するLinuxコマンドメソッドの概要

システムでは多くのコマンドが使用されていますが、使用したコマンドをどのように確認すればよいでしょうか...

Vueモバイル端末が指のスライド効果を実現

この記事の例では、Vueモバイル端末で指のスライド効果を実現するための具体的なコードを紹介します。具...

MySQL バージョン 5.7.24 のデータベース インストール プロセスの詳細なグラフィック説明

MySQL は最も人気のあるリレーショナル データベース管理システムです。WEB アプリケーションに...

Linux での MySQL 8.0.25 のインストールと設定のチュートリアル

LinuxにMySQL 8.0.25をインストールするための最新のチュートリアルを参考にしてください...

Mysql の読み取り/書き込み分離期限切れに対する一般的な解決策

MySQLの読み書き分離の落とし穴読み取りと書き込みの分離の主な目的は、メイン データベースの負荷を...

Vue.jsフレームワークはショッピングカート機能を実装します

この記事では、ショッピングカートを実装するためのVue.jsフレームワークの具体的なコードを参考まで...

Angular CLI リリース パスの構成項目の簡単な分析

序文プロジェクトのリリースでは、常に特定の状況に応じたパッケージ化が必要です。Angular CLI...

Mysql5.7.17 winx64.zip 解凍バージョンのインストールと設定のグラフィックチュートリアル

1. mysql-5.7.17-winx64.zip をダウンロードします。リンク: https:/...