lamp架构之mysql主从复制

主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现。

主从复制可实现:数据备份、故障转移、MySQL集群、高可用、读写分离等功能

主从复制的好处:

(1)数据更安全:做了数据冗余,不会因为单台服务器的宕机而丢失数据

(2)性能大大提升:一主多从,不同用户从不同数据库读取,性能提升

(3)扩展性更优:流量增大时,可以方便的增加从服务器,不影响系统使用

(4)负载均衡:一主多从相当于分担了主机任务,做了负载均衡。

主从复制的缺点:

主从机制是一样的:
mysql主从的实现是,mysql master被使用后,其中master后台IO线程会写Binlog;slave有一个Relay Log线程同步binlog日志,同时有另一个Extractor线程会读取相应的Binlog,在Slave进行相应的同样的操作。

对于主从正常执行,相应的延迟几乎是不存在的。但是在高QPS下,主从同步却出现了比较明显的延迟情况。在PPT介绍中,当master QPS达到1万左右时,Slave重做的QPS却只有2000左右,因此所谓的瓶颈其实是在Binlog日志在slave重做这块。而此处实现是单线程的,因此改进的方法此处用多线程实现。

主从复制实现原理:

把主服务器上的binLog日志(记录数据的增删改和授权等写操作行为)复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。

mysql的安装和配置在lamp的第一篇,感兴趣可以去看看:

一. 主从复制

server1为master端:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在westos数据库中添加user_tb这个表:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

将server1中的数据库导入:

在这里插入图片描述

为了方便slave复制server1二进制文件到slave(server2)执行,做复制之前:主从的base需要相同

在这里插入图片描述在这里插入图片描述

在server1安装rsync:
在这里插入图片描述

配置/etc/my.cnf文件:

在这里插入图片描述

在这里插入图片描述

在salve端配置:
在这里插入图片描述
在.bsah_profile文件添加mysql路径:
在这里插入图片描述
然后初始化mysql:

添加mysql用户:
在这里插入图片描述

在server2的mysql中也要添加westos库 ,再将server1中库的数据导入:

在这里插入图片描述
在server2中:
mysql -pwestos

在这里插入图片描述
看slave端的IO 和 SQL 状态均为yes 才为服务成功!!
在这里插入图片描述

查看一下已经同步过来:
在这里插入图片描述

二. GTID复制

server1:
在这里插入图片描述

在这里插入图片描述

将server1的配置文件复制给server3:
在这里插入图片描述

在这里插入图片描述

在server2中:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在server3中:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三. 半同步复制

先停掉server2 io_thread:
在这里插入图片描述然后在server1中的表中插入成绩:

在这里插入图片描述

查看server2中能否同步数据:
无法同步数据
在server2中开启slave io:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在server1中:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在server2中再次查看:

在这里插入图片描述

四. 组复制

多主模式

server1-3配置大体相同

vim /etc/my.cnf

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
上图address后的server以及第一行的server-id都要和文件所在主机保持一致:

在这里插入图片描述

server1:

mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
mysql> SET GLOBAL group_replication_bootstrap_group=ON;     
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

server2 server3 相同

mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR 	CHANNEL 'group_replication_recovery';
mysql> START GROUP_REPLICATION;

在server1:
mysql> SELECT * FROM performance_schema.replication_group_members; ##查询组状态

在这里插入图片描述

建立数据库看信息同步:

在server1中:

mysql> create database test;
mysql> USE test;
mysql> create table t1 (c1 INT PRIMARY KEY, C2 TEXT NOT NULL);   ##只支持带有主键的表
mysql> INSERT INTO t1 VALUES (1, 'Luis');
mysql> SELECT * FROM t1;

在server2中:

在这里插入图片描述
在server3中:

在这里插入图片描述

五. 延迟复制

在server2中:

STOP SLAVE SQL_THREAD;
CHANGE MASTER TO MASTER_DELAY=60;
START SLAVE SQL_THREAD;
show slave status\G;

六. 慢查询

set global slow_query_log=ON;   
show variables like "long%";
set  long_query_time=5;
show status like '%slow%';

七. MySQL路由器

1.MySQL路由器配置

在server4执行

rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm
vim /etc/mysqlrouter/mysqlrouter.conf

[routing:ro]
bind_address = 0.0.0.0
bind_port = 7001
destinations = 172.25.1.1:3306,172.25.1.2:3306,172.25.1.3:3306
routing_strategy = round-robin

[routing:rw]
bind_address = 0.0.0.0
bind_port = 7002
destinations = 172.25.1.1:3306,172.25.1.2:3306,172.25.1.3:3306
routing_strategy = first-available

systemctl start mysqlrouter.service

mysql> grant all on test.* to sun@’%’ identified by ‘westos’; ##创建一个远程登录的用户

在真机中:

mysql -h 172.25.1.4 -P 7001 -u sun -p

在真机测试连接路由ip 登陆mysql

路由只能实现调度,负载均衡,不能实现读写分离。
[root@server1 ~]# lsof -i :3306在这里插入图片描述

查看日志:cat /var/log/mysqlrouter/mysqlrouter.log

当连接server1 down掉之后会自动跳转到server2上

由于mysql路由器的7001端口采用的使轮询的调度算法,所以每次连接到的后端真实的数据库都是一次变化的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值