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)

本文由博客一文多发平台 OpenWrite 发布!

相关推荐
Fireworkitte1 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil9001 小时前
ubuntu常见问题汇总
linux·ubuntu
ac.char1 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
中科米堆3 小时前
中科米堆CASAIM自动化三维测量设备测量汽车壳体直径尺寸
运维·自动化·汽车·视觉检测
淮北也生橘123 小时前
Linux的ALSA音频框架学习笔记
linux·笔记·学习
缘华工业智维4 小时前
CNN 在故障诊断中的应用:原理、案例与优势
大数据·运维·cnn
可观测性用观测云4 小时前
Milvus 可观测性最佳实践
监控
开航母的李大5 小时前
软件系统运维常见问题
运维·服务器·系统架构·运维开发
华强笔记6 小时前
Linux内存管理系统性总结
linux·运维·网络
十五年专注C++开发7 小时前
CMake进阶: CMake Modules---简化CMake配置的利器
linux·c++·windows·cmake·自动化构建