CentOS7_MySQL集群

概述

集群目的

  • 负载均衡:解决高并发
  • 高可用HA:服务可用性
  • 远程灾备:数据有效性
    在这里插入图片描述
    在这里插入图片描述
    1.在主库上把数据更改记录到二进制日志文件中
    2.备库I/O线程将主库上的日志复制到自己的中继日志中
    3.备库SQL线程读取中继日志中的事件,将其重放到备库数据库上

集群案例

准备环境

  • 五台全新服务器
  • 全新安装mysql必须每台单独安装,因为数据库ID不同
  • 五台主机分别命名:
    pg0.zhipenghe.com
    pg1.zhipenghe.com
    pg2.zhipenghe.com
    pg3.zhipenghe.com
    pg4.zhipenghe.com
  • 每台配置好域名解析,也可使用DNS
    搭建DNS服务器详情参阅:DNS服务器搭建

一主一从(M-S)(手动)

主服务器配置

一、准备数据
在这里插入图片描述
二、pg0.zhipenghe.com上的二进制日志开启

[root@pg0 ~]# vim /etc/my.cnf

[mysqld]
log_bin			//开启二进制日志
server_id=1		//数据库id设置为1,每一台数据库id不能相同

三、创建复制数据用户

mysql> grant replication slave,replication client on *.* to 'rep'@'192.168.100.%' identified by 'Xyz@123456';

四、主服务器备份
有关备份请参阅:数据库备份

[root@pg0 ~]# mysqldump -p'Xyz@123456' --all-databases \
> --single-transacation \
> --master-data=2 \
> --flush-logs \
> >`date +%F`-mysql-all.sql
[root@pg0 ~]# ls
2021-05-16-mysql-all.sql

五、将备份文件拷贝到从服务器上

[root@pg0 ~]# scp -r 2021-05-16-mysql-all.sql pg1.zhipenghe.com:/tmp

观察二进制日志分割点

[root@pg0 ~]# vim 2020-05-16-mysql-all.sql

在这里插入图片描述
六、更新主服务器数据

mysql> insert into class.y2101 values (9,"JH",26,'1');
mysql> insert into class.y2101 values (10,"GW",19,'0');

从服务器配置

一、检查rep用户是否可用

[root@pg1 ~]# mysql -h pg0.zhipenghe.com -urep -p'Xyz@123456'

二、启动服务器序号

[root@pg1 ~]# vim /etc/my.cnf

[mysql]
server_id=2

[root@pg1 ~]# systemctl restart mysqld	//重启服务是否正常

三、手动同步数据

mysql> set sql_log_bin=0
mysql> source /tmp/2021-05-16-mysql-all.sql

四、设置主服务器

mysql> change master to master_host='pg0.zhipenghe.com',	//主服务器主机名
    -> master_user='rep',					//拷贝使用的用户
    -> master_password='Xyz@123456',		//密码
    -> master_log_file='pg0-bin.000002',	//从哪儿开始考
    -> master_log_pos=154;					//日志裁断的节点
mysql> start slave;							//启动从设备
mysql> show slave status\G;					//查看主服务器状态

如果查看到以下两行显示YES表示设置成功了
在这里插入图片描述
五、测试
在主服务器上更新数据,到从服务器查看

一主一从(M-S)(自动)

前面步骤与手动基本一毛一样
只需要在主和从的/etc/my.cnf配置文件中加入以下行数据:

[mysqld]
...
gtid_mode=ON		//强制开启Gtid
enforce_gtid_consistency=1	//自动协商id

在设置主服务器的时候将代码改为

mysql> change master to master_host='pg0.zhipenghe.com',
    -> master_user='rep',
    -> master_password='Xyz@123456',
    -> master_auto_position=1;		//自动进行日志位置的记录

设置完成之后就可以进行测试了

双主双从(MM-SS)

双主

前言

  • 前面的实验,主服务器单节点设置,假如主服务器故障会影响全局的写入时间,故设置双是主
  • 目前已经设置了pg0为pg1的主服务器
  • 只需要设置pg1为pg0的主服务器即可

设置pg1为pg0的主服务器

一、在pg1上进行授权

mysql> grant replication slave,replication client on *.* to 'rep'@'192.168.100.%' identified by 'Xyz@123456';
mysql> flush privileges;

二、设置pg0的主服务器

mysql> change master to master_host='pg1.zhipenghe.com',
    -> master_user='rep',
    -> master_password='Xyz@123456',
    -> master_auto_position=1;
mysql> start slave;
mysql> show slave status\G; 

三、测试
在pg0上插入数据在pg1上查看
在pg1上插入数据在pg0上查看
注意:这时还需要开启pg1上的二进制日志记录才能成功

双从

一、同步现有数据库

  • pg0
[root@pg0 ~]# mysqldump -p'Xyz@123456' \
> --all-databases \
> --master-data=2 \
> --flush-logs \
> > `date +%F`-mysql-all.sql
[root@pg0 ~]# scp -r 2021-05-17-mysql-all.sql pg2.zhipenghe.com:/tmp
[root@pg0 ~]# scp -r 2021-05-17-mysql-all.sql pg3.zhipenghe.com:/tmp
  • pg2
[root@pg2 ~]# mysql -p'Xyz@123456' < /tmp/2021-05-17-mysql-all.sql
  • pg3
[root@pg3 ~]# mysql -p'Xyz@123456' < /tmp/2021-05-17-mysql-all.sql

二、启动从服务器id、gtid

  • pg2
[root@pg2 ~]vim /etc/my.cnf

[mysqld]
server-id=3
gtid_mode=ON					
enforce_gtid_consistency=1		
master-info-repository=TABLE	//把主的信息存在表里,安全
relay-log-info-repository=TABLE	//把中继日志也存在表里,安全

[root@pg2 ~]# systemctl restart mysqld
  • pg3
[root@pg3 ~]# vim /etc/my.cnf

[mysqld]
server-id=4
gtid_mode=ON
enforce_gtid_consistency=1		
master-info-repository=TABLE	//把主的信息存在表里,安全
relay-log-info-repository=TABLE	//把中继日志也存在表里,安全

[root@pg3 ~]# systemctl restart mysqld

三、设置主服务器

  • pg2
mysql> change master to master_host='pg0',
    -> master_user='rep',
    -> master_password='Xyz@123456',
    -> master_auto_position=1
    -> for channel 'pg0.zhipenghe.com';		//第一条通道
mysql> change master to master_host='pg1',
    -> master_user='rep',
    -> master_password='Xyz@123456',
    -> master_auto_position=1
    -> for channel 'pg1.zhipenghe.com';		//第二条通道
mysql> start slave;
mysql> show slave status\G;
  • pg2
mysql> change master to master_host='pg0',
    -> master_user='rep',
    -> master_password='Xyz@123456',
    -> master_auto_position=1
    -> for channel 'pg0.zhipenghe.com';		//第一条通道
mysql> change master to master_host='pg1',
    -> master_user='rep',
    -> master_password='Xyz@123456',
    -> master_auto_position=1
    -> for channel 'pg1.zhipenghe.com';		//第二条通道
mysql> start slave;
mysql> show slave status\G;

四、测试

  • pg0插入数据
  • pg1插入数据
  • pg2查看
  • pg3查看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屎到淋头还嚼便

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值