Windows Server 2012配置MySQL 8.0.20 MGR

你好我是李白發表於2020-07-25

1.打補丁

需要打以下補丁,以及安裝Visual C++ 2015否則mysqld.exe會報缺失下面兩個dll檔案,

從其他機器複製mysqld.exe會報無法找到程式入口點。

連結:

提取碼:odt8

vcruntime140.dll

vcruntime140_1.dll

2.解壓MySQL安裝包

使用的為免安裝版本
mysql-8.0.20-winx64.zip

3.編寫MySQL my.ini配置檔案

[mysqld]
port = 4306
server-id = 430651
socket = D:\Program Files\MySQL80\data\4306\mysql.sock
pid-file = D:\Program Files\MySQL80\data\4306\mysql.pid
basedir = D:\Program Files\MySQL80
datadir = "D:\Program Files\MySQL80\data\4306\mysql\"
explicit_defaults_for_timestamp
character-set-server=utf8mb4
lower_case_table_names=1
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES       # 由於程式碼SQL原因,無法使用預設的所有sql mode,只能配置這兩個,否則有大量sql執行報錯
# Buffer
net_buffer_length = 8K
max_allowed_packet = 256M
max_heap_table_size = 256M
sort_buffer_size = 2M
join_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
# log
log-bin = "D:\Program Files\MySQL80\data\4306\logbin\mysql_bin"
log-bin-index = "D:\Program Files\MySQL80\data\4306\logbin\mysql_bin.index"
sync_binlog=1
binlog_cache_size = 512M
max_binlog_cache_size = 512M            # 這個引數調整過,由於研發使用navicat從5.5庫匯入一個一千萬表,作為一個事務,每次匯入三百萬時會超過該快取上限,調整到4096M解決
max_binlog_size= 256M
binlog_format = row
log_output = FILE
log_error = D:\Program Files\MySQL80\data\4306\logs\mysql_error.log
slow_query_log = 1
slow_query_log_file = D:\Program Files\MySQL80\data\4306\logs\slow_query.log
general_log = 0
general_log_file = D:\Program Files\MySQL80\data\4306\logs\general_query.log
binlog_expire_logs_seconds = 2592000
relay_log = "D:\Program Files\MySQL80\data\mysql_relay"                # relay_log一開始設定的路徑過長,導致啟動MGR無法找到mysql_relay.index
relay_log_index = "D:\Program Files\MySQL80\data\mysql_relay.index"    # 縮短這兩個路徑引數重啟即解決
max_relay_log_size = 1024M
relay_log_purge=ON
relay_log_recovery=ON
log_timestamps=SYSTEM
# InnoDB
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"   # 由於之前有表為MyISAM,導致無法匯入新庫,去掉該引數,重新啟動匯入,隨後再啟用。
innodb_data_file_path = ibdata1:2048M:autoextend
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_buffer_pool_size = 15360M
innodb_undo_directory = D:\Program Files\MySQL80\data\4306\undo
innodb_buffer_pool_load_at_startup=ON
innodb_buffer_pool_dump_at_shutdown=ON
innodb_buffer_pool_dump_pct=15
innodb_max_dirty_pages_pct=85
innodb_lock_wait_timeout=10
innodb_flush_log_at_trx_commit=2
innodb_fast_shutdown=1
innodb_io_capacity=1000    
innodb_io_capacity_max=4000
transaction-isolation="READ-COMMITTED"
default_storage_engine=InnoDB
shared-memory
# gtid
gtid_mode=on
enforce_gtid_consistency=ON
master_verify_checksum=ON
sync_master_info=1
#connections
skip_name_resolve=1
max_heap_table_size=64M
connect_timeout=10
wait_timeout=600
interactive_timeout=600
net_read_timeout=30
net_write_timeout=30
max_connections=300
max_connect_errors=100000
max_user_connections=500
#query
long_query_time=1
log_queries_not_using_indexes=ON
log_throttle_queries_not_using_indexes=10
max_join_size=10000000000                       # 由於原有系統程式碼會join超大量資料,所以在不調整程式碼前提,只能調整引數
max_execution_time=20000000
# parallel replicate
slave_parallel_type=LOGICAL_CLOCK
slave_parallel_workers=4
# group commit
binlog_group_commit_sync_delay=1
binlog_group_commit_sync_no_delay_count=1000
# mysql group replicate
transaction_write_set_extraction=XXHASH64
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
slave-preserve-commit-order=on
loose_group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose_group_replication_start_on_boot=off
loose_group_replication_local_address="xx.xx.xx.xx:5306"
loose_group_replication_group_seeds="xx.xx.xx.xx:5306"
loose_group_replication_ip_whitelist="xx.xx.xx.xx,xx.xx.xx.xx"          # 之前Linux 7.6配置MGR均無設定該引數,不報錯,Windows Server需要設定該引數
loose_group_replication_bootstrap_group=off
loose_group_replication_recovery_get_public_key=on


4.配置services.msc,初始化mysql例項

# cmd下執行下面命令,配置服務:
"D:\Program Files\mysql80\bin\mysqld.exe" --install mysql80 --defaults-file="D:\Program Files\mysql80\my.ini"
# 由於該機器還有5.5版本MySQL,所以只能使用絕對路徑,否則,會無法啟動。
# 初始化例項
"D:\Program Files\mysql80\bin\mysqld.exe" --defaults-file="D:\Program Files\mysql80\my.ini" --initialize
# 檢視errorlog,檢視臨時root密碼,登陸修改
"D:\Program Files\mysql80\bin\mysql.exe" -uroot -p -P 4306
mysql> ALTER USER 'root'@'localhost' identified by 'password';

5.建立複製使用者,建立業務使用者

mysql> create user 'repl'@'%' identified by 'password';
# 由於之前業務使用5.5版本MySQL,導致無法使用最新認證外掛,只能單獨設定外掛。
mysql> create user 'user'@'%' identified with mysql_native_password by 'password';

6.匯入資料

# 由研發使用navicat匯入源庫資料,中間有根據匯入資料包錯調整一些my.ini引數:
max_join_size=10000000000
max_execution_time=20000000
max_binlog_cache_size = 512M

7.mysql備份

# cmd下使用:
mysqldump -uroot -p -P 4306 -A -B --master-data=2 --single-transaction > "D:\Program Files\mysql80\mysqlbak.sql"
# -A 匯出所有資料庫
# -B 匯出一些列資料庫,會包括use database語句
# --master-data=2 會將change master包含二進位制日至名以及位置作為註釋包含在輸出。
# --single-transaction  生成一個資料庫已執行快照,只支援InnoDB事務引擎,以及不能在備份期間執行ALTER TABLE, DROP TABLE, RENAME TABLE,TRUNCATE TABLE

8.MGR第二個節點恢復資料

mysql > tee D:\Program Files\mysql80\tee.log
mysql > source D:\Program Files\mysql80\mysqlbak.sql
mysql > notee

9.主節點啟動MGR複製

9.1 修改my.ini,安裝mgr外掛

# 去掉loose_字首所有引數。
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';

9.2 重啟mysql服務,啟動第一個節點mgr

mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
# 如果未成功啟動MGR,檢視error log,檢視原因,具體問題具體解決。
mysql> SELECT * FROM performance_schema.replication_group_members;

9.3 第二個節點加入MGR

1)設定my.cnf引數

# 按照必須設定引數設定,啟動mysql伺服器。
# cmd下執行下面命令,配置服務:
"D:\Program Files\mysql80\bin\mysqld.exe" --install mysql80 --defaults-file="D:\Program Files\mysql80\my.ini"
# 由於該機器還有5.5版本MySQL,所以只能使用絕對路徑,否則,會無法啟動。
# 初始化例項
"D:\Program Files\mysql80\bin\mysqld.exe" --defaults-file="D:\Program Files\mysql80\my.ini" --initialize

2)安裝外掛

(root@localhost) [(none)] INSTALL PLUGIN group_replication SONAME 'group_replication.so';

3)建立複製使用者

mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl@'%';
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
mysql> START GROUP_REPLICATION;

9.4檢視MGR狀態

mysql> SELECT * FROM performance_schema.replication_group_members;
mysql> SHOW STATUS LIKE 'group_replication_primary_member';







來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31439444/viewspace-2706896/,如需轉載,請註明出處,否則將追究法律責任。

相關文章