- linux系统——Mysql数据库集群的简单介绍
- 集群目的
- 负载均衡——解决高并发
- 高可用HA——实现服务可用性
- 远程灾备——变相备份,数据有用性
- 原理图示
1,主库上对数据的操作,记录在二进制日志上。
2,从库的IO线程将主库的二进制内容拷贝到自己的中继日志上。
3,从库的SQL线程读取中继日志内容,将数据放到自己身上。
- 集群示例
- 一主一从:
M —— S ,一主一从
环境准备:两台服务器在同一网段,同时都要安装mysql程序
每台服务器都要做本地域名解析
- 主库配置:
1,配置文件开启二进制日志,开启自动记录position位置:
vim /etc/my.cnf
[mysqld]
log_bin \\开启二进制日志
server-id=1 \\服务器序号
gtid_mode=ON \\开启自动记录position位置
enforce_gtid_consistency=1
systemctl restart mysqld \\重启,配置生效
2,为IO线程准备数据库授权账户:
grant replication slave, replication client on *.* to 'rep'@'10.8.162.%' identified by 'QianFeng@123';
3,从库验证登录:
mysql -urep -p'QianFeng@123' -h'10.8.162.115'
- 从库配置:
1,配置文件写好服务器序号:
[mysqld]
server-id=2
systemctl restart mysqld
2,设置为从库:
change master to
master_host='master1',
master_user='rep',
master_password='QianFeng@123',
master_auto_position=1;
start slave \\启动slave
3,查看从库设置状态:
show slave status\G \\查看slave状态
- 主库插入数据,从库查看测试:
- 多主多从
个人原因,只能启动三个服务器,所以做两主一从,以上实验两台主机作为两个主,两个主互为主从,从作为两个主的从
- 主库1在上方实验已经配置完毕,但是需要做一次备份,用于在从库恢复数据,使数据同步
备份:
mysqldump -p'QianFeng@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-all.sql \\备份
scp -r 2020-08-31-20-mysql-all.sql slave1:/tmp \\远程传递
- 主库2配置:
1,创建授权账户,要求和主库1创建的账户一样:
grant replication slave, replication client on *.* to 'rep'@'10.8.162.%' identified by 'QianFeng@123';
2,主库1验证登录:
mysql -urep -p'QianFeng@123' -h'10.8.162.115'
3,设置主库2为主库1的主:
change master to
master_host='master2',
master_user='rep',
master_password='QianFeng@123',
master_auto_position=1;
start slave;
4,查看主2作为1的从库设置的状态:
show slave status\G
- 从库配置:
1,从库恢复数据,使数据同步:
mysql -p'QianFeng@123' < /tmp/2020-1-1-mysql-all.sql
2,配置文件配置从库设置:
server-id=3
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
systemctl restart msyqld
3,设置从库:
change master to
master_host='master1',
master_user='rep',
master_password='QianFeng@123',
master_auto_position=1 for channel 'master1';
change master to
master_host='master2',
master_user='rep',
master_password='QianFeng@123',
master_auto_position=1 for channel 'master2';
slave start;
4,查看线程启动是否成功:
show slave status\G
5,主库2插入数据,主库1,从库查看验证: