MySQL 3主集群搭建

2025/1/2 21:03:14

本文主要是介绍MySQL 3主集群搭建,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

由于工作需要,搭建了一套MySQL3主集群。集群使用了MySQL 8.0,在3台Redhat 8.10上完成的搭建。过程如下:

直接官网下载mysql数据库
上传到服务器,解压然后执行 yum localinstall *.rpm

修改数据库配置文件/etc/my.cnf

[mysqld]
server-id=1133  # 集群中每个节点id值唯一,如第一个1133,第二个1134,第三个1135
port=3306
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
symbolic-links=0
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

long_query_time=2
slow_query_log_file=/var/log/mysql_slowsql.log
slow_query_log=1
log-queries-not-using-indexes=off
default_authentication_plugin=mysql_native_password
max_connections=1000
max_connect_errors=6000
thread_cache_size=32
log_bin_trust_function_creators=TRUE
group_concat_max_len=102400
skip_ssl
table_open_cache=614
external-locking=FALSE
sort_buffer_size=2M
join_buffer_size=2M
read_buffer_size=1M
thread_cache_size=300
thread_stack=192K
transaction_isolation=READ-COMMITTED
tmp_table_size=256M
max_heap_table_size=256M
myisam_sort_buffer_size=128M
myisam_max_sort_file_size=10G
innodb_buffer_pool_size=2048M
innodb_thread_concurrency=4
innodb_flush_log_at_trx_commit=2
innodb_log_buffer_size=16M
# innodb_log_file_size=128M
innodb_redo_log_capacity = 1G  # 设置适当的值,视具体需求而定
innodb_log_files_in_group=3
innodb_max_dirty_pages_pct=90
innodb_lock_wait_timeout=120
innodb_file_per_table=0
log-bin=binlog
#binlog-format=Row
binlog-format=ROW
binlog_cache_size=4M
max_binlog_cache_size=512M
max_binlog_size=512M
# bin log 保留时间
expire_logs_days=7

auto_increment_offset=1    # 节点1为1,节点2为2,节点3为3
auto_increment_increment=3 # 集群自增长的步长,一般等于节点数
binlog-format=mixed

# 通过 GTID(全局事务 ID)实现自动定位,简化复制配置
gtid_mode=ON
enforce_gtid_consistency=ON

# 每台主机都需要充当主从角色,因此需要启用 relay log(中继日志)
relay_log=relay-bin
# 避免数据循环传播(即自己写的数据被再次同步回自己)
log_slave_updates=ON
# MySQL 的多源复制可以使用多个 SQL 线程并行处理事务
slave_parallel_type=LOGICAL_CLOCK
slave_parallel_workers=4 # 根据 CPU 核数调整,建议 4 或以上
# 增加中继日志的处理效率
sync_relay_log=1
sync_relay_log_info=1

# 中继日志清理 防止中继日志占用过多空间
relay_log_purge=ON
# 主从间网络优化 确保网络连接可靠性,配置超时
net_read_timeout=60
net_write_timeout=60

配置集群同步

三台机分别安装MySQL数据库,设置如上的参数,然后启动数据库systemctl start mysqld,然后修改数据库密码:

more /var/log/mysqld.log |grep temp # 将会显示数据库密码

# 修改数据库密码
alter user 'root'@'localhost' identified by 'Password!';

# 创建数据库复制所用的账号
CREATE USER 'repl'@'%' IDENTIFIED BY 'Password!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

配置数据库复制,节点1将从节点2和节点3复制(执行第2条和第3条),节点2将从节点1和节点3复制,节点3类似:

# 从节点1复制
CHANGE MASTER TO MASTER_HOST='192.168.1.133', MASTER_USER='repl', MASTER_PASSWORD='Password!', MASTER_AUTO_POSITION=1 FOR CHANNEL 'node1';
START REPLICA FOR CHANNEL 'node1';
# 从节点2复制
CHANGE MASTER TO MASTER_HOST='192.168.1.134', MASTER_USER='repl', MASTER_PASSWORD='Password!', MASTER_AUTO_POSITION=1 FOR CHANNEL 'node2';
START REPLICA FOR CHANNEL 'node2';
# 从节点3复制
CHANGE MASTER TO MASTER_HOST='192.168.1.135', MASTER_USER='repl', MASTER_PASSWORD='Password!', MASTER_AUTO_POSITION=1 FOR CHANNEL 'node3';
START REPLICA FOR CHANNEL 'node3';

查询节点状态Show slave status\G",每个通道 Slave_SQL_Running 和 Slave_IO_Running 都为Yes则为正常状态:

mysql -uroot -p -e "Show slave status\G" | grep -E "Slave_IO_Running:|Slave_SQL_Running:"
Enter password:
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

同步测试

可以在任何一台数据库中执行数据库修改语句,在其他库中查询数据库更改:

mysql> create database test11;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test11             |
+--------------------+
5 rows in set (0.01 sec)


这篇关于MySQL 3主集群搭建的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程