数据库集群技术
目录
集群概述
mysql复制技术
集群目的
类型
原理图示
集群案例
一主一从
环境配置
主服务器配置
从服务器配置
一主一从(自动记录)
重置数据库(可选)
双主双从
重置数据库(可选)
配置主库的my.cnf
配置从库的my.cnf
创建账号,主主同步的账号和从主同步的账号
配置主从同步
重要注意事项
集群概述
mysql复制技术
集群目的
负载均衡(解决高并发),高可用HA(服务可用性),远程灾备(数据有效性)
类型
一主一从,一主多从,双主双从等等
原理图示
主库的数据变更记录到二进制日志中,备库的I/O线程将主库上的日志,复制到自己的中继日志中.备库SQL线程读取中继日志中的事件,将其重放到备份数据库之上。
集群案例
一主一从
环境配置
准备四台服务器,分别安装上mysql服务器
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld
vim /etc/sysconfig/selinux #关闭内核SELINUX=disabled
主服务器配置
先在数据库中准备一些数据1
开启二进制日志
vim /etc/my.cnflog_bin #开启二进制日志server-id=1 #设置数据库序号
systemctl restart mysqld #重启数据库在mysql数据库中创建专门用于主从复制的用户
CREATE USER 'repl'@'%' IDENTIFIED BY '你的密码';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;备份一下数据库用于验证mysqldump -p'密码' --all-databases --single-transaction --source-data=2 --flush-logs > `date +%F`-mysql-all.sql
scp -r 备份的数据 要发送的主机IP地址:/tmp #备份数据发送给另一台主机
在插入一些数据用于验证。
从服务器配置
测试用于主从备份的用户是否可用
mysql -h master1 -urep1 -p密码
配置从服务器
vim /etc/my.cnfserver-id=2 #服务器ID
systemctl restart mysqld重新登陆
mysql -uroot -p密码
同步主服务器数据
set sql_log_bin=0 #关闭二进制日志,防止数据恢复时产生多于日志
source #备份数据目录 配置主从复制链路
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='主库IP地址',
SOURCE_USER='repl',
SOURCE_PASSWORD='你的密码',
SOURCE_LOG_FILE='记录的文件名',
SOURCE_LOG_POS=记录的位置值,
GET_SOURCE_PUBLIC_KEY=1; -- 如果使用caching_sha2_password认证且MySQL 8.0.4以上,建议添加此参数启动复制并检查状态
START REPLICA;
然后检查从库的复制状态
SHOW REPLICA STATUS\GMySQL 8.0.22及之前版本语法
CHANGE MASTER TO
MASTER_HOST='主库IP地址',
MASTER_USER='repl',
MASTER_PASSWORD='你的密码',
MASTER_LOG_FILE='记录的文件名',
MASTER_LOG_POS=记录的位置值;启动复制并检查状态
START SLAVE;
然后检查从库的复制状态
SHOW SLAVE STATUS\G#使用 \G 是为了让结果以更易读的垂直格式显示。在返回的结果中,请重点关注以下两个字段,必须确保它们都是 Yes:Replica_IO_Running (或 Slave_IO_Running)Replica_SQL_Running (或 Slave_SQL_Running)
若不是使用 stop replica;
START REPLICA;
-- 或者旧版本
START SLAVE;返回主服务器更新数据,在从服务器观察是否同步
一主一从(自动记录)
重置数据库(可选)
systemctl stop mysqld
rm -rf /var/lib/mysql/*
systemctl start mysqld
grep password /var/log/mysqld.log
mysqladmin -uroot -p旧密码 password 新密码
和上面的实验不同点在于
vim /etc/my.cnf
gtid_mode=ON
enforce_gtid_consistency=1
配置主从复制链路
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='主库IP地址',
SOURCE_USER='repl',
SOURCE_PASSWORD='你的密码',这俩行不用打,不需要手动定位
#SOURCE_LOG_FILE='记录的文件名',
#SOURCE_LOG_POS=记录的位置值,打这一行
source_auto_position=1;GET_SOURCE_PUBLIC_KEY=1; -- 如果使用caching_sha2_password认证且MySQL 8.0.4以上,建议添加此参数
双主双从
防止一台主服务器宕机,集群丢失写入能力
重置数据库(可选)
systemctl stop mysqld
rm -rf /var/lib/mysql/*
systemctl start mysqld
grep password /var/log/mysqld.log
mysqladmin -uroot -p旧密码 password 新密码
配置主库的my.cnf
vim /etc/my.cnflog-bin=/var/lib/mysql/binlog #binlog日志server-id=1 #服务idbinlog-ignore-db=mysql #主从复制忽略的数据库binlog-ignore-db=information_schemabinlog-do-db=mydb2 主从复制的数据库binlog_format=statement #statement记录主库执行的SQL复制到从库,#ROW记录主库每一行的变化,#MIXED修复一些主从数据不一致情况expire_logs_days=7 #二进制日志过期天数,默认0不删除slave_skip_errors=1062 #跳过主从复制中遇到的所有错误或指定类型的错误log_slave_updates #在座位数据库时候,有写入操作也要更新二进制日志auto-increment-increment=2 #表示自增长字段每次递增的量auto-increment-offset=1 #表示自增长从哪个数开始max_connect_errors=1000 #增加mysql的连接数# 启用GTIDgtid_mode = ONenforce_gtid_consistency = ONsystemctl restart mysqld #重启数据库
配置从库的my.cnf
vim /etc/my.cnfserver-id = 3 #服务idrelay-log = relay-log-bin # 中继日志配置read-only = 1 # 可选:设置为只读# log-slave-updates = ON # 如果从库也可能作为其他从库的主库,也需要开启# 启用GTIDgtid_mode = ONenforce_gtid_consistency = ONsystemctl restart mysqld #重启数据库
创建账号,主主同步的账号和从主同步的账号
CREATE USER 'repl'@'%' IDENTIFIED BY 'YourSecurePassword123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
配置主从同步
如果没有配置# 启用GTID
gtid_mode = ON
enforce_gtid_consistency = ON可以使用SHOW BINARY LOG STATUS;查看记录主库二进制日志状态(MySQL 8.4.0及以上版本)
可以使用SHOW MASTER STATUS;查看记录主库二进制日志状态(MySQL 8.4.0以下版本)配置主从复制链路
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='主库IP地址',
SOURCE_USER='主从同步账号',
SOURCE_PASSWORD='你的密码',
SOURCE_LOG_FILE='记录的文件名',
SOURCE_LOG_POS=记录的位置值,
GET_SOURCE_PUBLIC_KEY=1; -- 如果使用caching_sha2_password认证且MySQL 8.0.4以上,建议添加此参数启动复制并检查状态
START REPLICA;
然后检查从库的复制状态
SHOW REPLICA STATUS\G配置主主复制链路
和配置主从一样只需要将SOURCE_USER='主主同步账号',改一下即可如果有配置# 启用GTID
gtid_mode = ON
enforce_gtid_consistency = ONCHANGE MASTER TO
MASTER_HOST='主库2的IP地址',
MASTER_USER='repl',
MASTER_PASSWORD='YourSecurePassword123!',这俩行不用打,不需要手动定位
#SOURCE_LOG_FILE='记录的文件名',
#SOURCE_LOG_POS=记录的位置值,打这一行
source_auto_position=1;START SLAVE;
配置完成之后,请检查,检查同步状态,所有服务器上执行show replica status\G(MySQL 8.0.4以上)或SHOW SLAVE STATUS\G(MySQL 8.0.4以下)
关键查看
Replica_IO_Running (或 Slave_IO_Running)
Replica_SQL_Running (或 Slave_SQL_Running)
若都是Yes则是复制线程运行正常
数据验证同步:在任意数据库中插库插数据,观察其他数据库中是否有。
重要注意事项
自增主键冲突:双主架构中,务必像前面配置那样设置 auto_increment_increment 和 auto_increment_offset,以确保两台主库生成的自增ID不会重复。
数据一致性:如果主库上已有数据,必须先进行数据备份,并在从库上恢复,确保所有节点的初始数据一致,然后再建立主从关系。
版本一致性:确保所有MySQL服务器版本一致(这里都是8.4),避免因版本差异导致复制兼容性问题。
故障排查:如果 SHOW SLAVE STATUS 显示错误,重点关注 Last_IO_Error 和 Last_SQL_Error 字段的内容,这是解决问题的关键线索。