MySQL集群实例

集群技术

简介

1、Mysql主从复制类型

  • 一主一从
  • 主主复制
  • 一主多从(扩展系统读取的性能,因为读是在从库读取的)
  • 多主一从(5.7开始支持)

2、Mysql主从复制原理

在这里插入图片描述步骤:

  1. 主库master的更新事件(update、insert、delete)被写到binlog。
  2. 从库发起连接,连接到主库。
  3. 此时主库创建一个binlog dump thread线程,把binlog的内容发送到从库
  4. 从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log。
  5. 从库还会创建一个SQL线程,从relay log里面读取内容,将更新内容写入到slave的db。

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

设置master1为master2的主服务器

1、一主master1

(1) 通过vim /etc/my.cnf修改配置文件,启动二进制日志,服务器ID,GTID

log_bin                      二进制开启  
server-id=1                  服务器 ID  
gtid_mode=ON                 gtid的模式为 开  
enforce_gtid_consistency=1   存主从信息的临时表-强制开启

(2)重新启动数据库

systemctl  restart  mysqld        

(3)授权复制用户 rep

grant replication slave,replication client on *.* to 'rep'@'10.8.162.%' identified by 'QianFeng@123';
授权

flush  privileges;             
手动刷新

(4)备份数据

mysqldump -p'QianFeng@123' --set-gtid-purged=OFF  --all-databases --single-transaction --master-data=2 --flush-logs >all.sql 
备份主服务器数据库内容
 
scp  all.sql    master2:/tmp     
备份内容拷贝到从服务器

注:
--all-databases   -A   导出全部数据库
--single-transaction   保证导出时数据库的一致性状态
--set-gtid-purged=OFF  从开启GTID的库中导出数据到未开启GTID的库中,在导出的文件中去掉相应的gtid内容
--flush-logs           备份之前刷新binlog日志
master-data=2          在mysqldump出来的文件包含CHANGE MASTER TO这个语句,处于被注释状态

2、一从master2

(1) 通过vim /etc/my.cnf修改配置文件,启动二进制日志,服务器ID,GTID

server-id=2
gtid_mode = ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE      从服务器连接主服务器的信息和中继日志存放在master_info和relay_log中

(2)重新启动数据库,让配置生效

systemctl  restart  mysqld        

(3)还恢复手动同步数据

两种方式
1.在数据库外
mysql -uroot -p'QianFeng@123' < /tmp/2020-1-1-mysql-full.sql   
 
2.在数据库内
source /tmp/2020-1-1-mysql-full.sql   

(4)在 从 上设置主服务器

mysql> change master to
master_host='master1',              主服务器名(域名解析/IP)
master_user='rep',                  主库的授权用户为 rep
master_password='QianFeng@123',     授权用户rep登录数据库的密码  
master_auto_position=1;             主库  自动位置  开启

(5)启动slave,并查看是否成功

start slave;                         
show slave status\G;            查看状态是否为双 YES

在这里插入图片描述
(6)验证

二、双主(M-M)

目前已经设置master1为master2的主服务器,只需设置master2为master1的主服务器

1、master2上创建用户

grant replication slave,replication client on *.* to 'rep'@'10.8.162.%' identified by 'QianFeng@123';
授权
flush  privileges;             
手动刷新

2、master1连接主服务器

(1)在master1上设置主服务器(master2)

mysql>change master to 
master_host='192.168.0.104', 
master_user='feng', 
master_password='123456',
master_auto_position=1;

(2)启动 从 master1,查看IO和SQL是否为双Yes

start slave;
show slave  status\G

在这里插入图片描述

三、双主双从(M-M-S-S)

设置master1和master2主服务器 ,设置 slave1 和 slave2 从服务器

原理:

多源复制加入了一个叫做Channel的概念, 每一个Channel都是一个独立的Slave,都有一个IO_THREAD和SQL_THREAD。原理和普通复制一样。我们只需要对每一个Master执行Change Master 语句,只需要在每个语句最后使用For Channel来进行区分。

由于复制的原理没有改变,在没有开启GTID的时候Master的版本可以是MySQL5.5、5.6、5.7。并且从库需要master-info-repository、relay-log-info-repository设置为table,否则会报错。

1、同步现有数据库

(1)master1导出所有数据

mysqldump -p'QianFeng@123' --set-gtid-purged=OFF --all-databases --single-transaction --master-data=2  --flush-logs > -all.sql       

注:
	主库 master1 备份内容 ( 已经是双主,只备份一个库即可 )
	slave1 和 slave2从服务器操作一样

(2)把主库备份内容导入到Slave中,保持数据一致

scp -r all.sql  slave1:/tmp

2、设置从服务器

(1)通过vim /etc/my.cnf修改配置文件,启动 slave 1 从服务器ID,gtid

server-id=3
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE

(2)重新启动数据库,让配置生效

systemctl restart mysqld

(3)设置从服务器

mysql> change master to                  #master 1 设置主服务器
master_host='10.8.162.14',
master_user='rep',
master_password='QianFeng@123',
master_auto_position=1 for channel '10.8.162.14';
 
 
mysql> change master to                  #master 2 设置主服务器
master_host='10.8.162.81',
master_user='rep',
master_password='QianFeng@123',
master_auto_position=1 for channel '10.8.162.81';

(4)启动slave 1,双主一从设置成功了,slave1 和 slave2 从服务器操作一样
在这里插入图片描述
在这里插入图片描述

四、IO/SQL不为Yes的情况

如果同步效果不正常,进行以下操作:
在2台机器数据保持一致的情况下。
从节点:
stop slave;       停止同步
reset slave;      清除主节点信息
主节点:
reset master;     清除bin1og日志
再来到从节点:
change master to.....

注:

reset slave:删除master.info文件和relay-log.info 文件以及所有的relay log 文件并重新启用一个新的relaylog文件。

reset slave all:删除所有信息

reset master:将删除日志索引文件中记录的所有binlog文件,创建一个新的日志文件 起始值从000001 开始。

reset master 不能用于有任何slave 正在运行的主从关系的主库。因为在slave 运行时刻 reset master 命令不被支持,reset master 将master 的binlog从000001 开始记录,slave 记录的master log 则是reset master 时主库的最新的binlog,从库会报错无法找的指定的binlog文件。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值