mysql(2)

目录

gtid模式

master配置

slave配置

半同步模式

master配置

slave配置

延迟复制

并行复制

mysql组复制

server1配置

server2配置

server3配置

慢查询

mysql路由器


gtid模式

        当gtid模式被启用时,MySQL会自动为每个事务生成GTID,并将其记录在二进制日志中,以便于在复制链上的其他MySQL实例中进行复制。

        通过启用gtid模式,我们可以更加方便地进行主从复制,而且不需要依赖于特定的主从架构或者拓扑结构,因为GTID是全局唯一和不可重复的。

master配置

server1

 vim /etc/my.cnf

log-bin=mysql-bin
server-id=1
gtid_mode=ON            //启用gtid功能
enforce-gtid-consistency=ON    //强制要求所有更新操作都使用GTID

/etc/init.d/mysqld restart

slave配置

server2

vim /etc/my.cnf

server-id=2
gtid_mode=ON
enforce-gtid-consistency=ON

/etc/init.d/mysqld restart
mysql -pwestos

stop slave;
CHANGE MASTER TO MASTER_HOST='192.168.81.30', MASTER_USER='repl', MASTER_PASSWORD='westos', MASTER_AUTO_POSITION = 1;
start slave;
show slave status\G;

其它slave节点(server3)以此类推

半同步模式

 

master配置

安装半同步模块

server1

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
    ->        FROM INFORMATION_SCHEMA.PLUGINS
    ->        WHERE PLUGIN_NAME LIKE '%semi%';

 

激活master半同步模式,查看半同步参数

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';

查看半同步状态

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

半同步参数写入配置文件,确保重启后依然生效

vim /etc/my.cnf

log-bin=mysql-bin
server-id=1
gtid_mode=ON
enforce-gtid-consistency=ON
rpl_semi_sync_master_enabled=1        //开机启动半同步模式

slave配置

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;

需要重启IO线程,slave端的半同步才能生效
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';        //查看是否启用了复制半同步模式,并可以查看其它相关变量的取值
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';        //查看当前复制半同步模式的工作状态,比如是禁用、正在运行,还是已停止等

半同步参数写入配置文件

vim /etc/my.cnf

server-id=2
gtid_mode=ON
enforce-gtid-consistency=ON
rpl_semi_sync_slave_enabled=1

测试:

master写入数据

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

停止所有slave节点的IO线程:

master节点再次写入数据:

所有slave节点再次启动IO线程,mysql会自动切回半同步模式

延迟复制

在其中一个slave中执行

mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_DELAY =30;
mysql> start slave ;

在master上插入数据后,slave不会立即更新,而是需要等待指定的延迟后才会执行。

并行复制

默认slave节点sql单线程回放,会造成数据同步延时较高

slave节点添加以下参数

vim /etc/my.cnf

slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON

/etc/init.d/mysqld restart
mysql -pwestos
show processlist;

mysql组复制

server1配置

首先停止数据库,清楚数据

/etc/init.d/mysqld stop
cd /data/mysql 
rm -fr *
vim /etc/my.cnf

disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"

server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW

plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "server1:33061"
group_replication_group_seeds= "server1:33061,server2:33061,server3:33061"
group_replication_bootstrap_group=off
group_replication_ip_whitelist="192.168.81.0/24,127.0.0.1/8"
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
group_replication_allow_local_disjoint_gtids_join=1

根据实际情况修改主机名和网段

初始化
mysqld --initialize --user=mysql

启动服务
/etc/init.d/mysqld start

mysql -p
#首先修改临时密码
mysql> alter user root@localhost identified by 'westos';
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'westos';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='westos' FOR CHANNEL 'group_replication_recovery';
mysql> SET GLOBAL group_replication_bootstrap_group=ON;    //只在server1上执行
mysql>  START GROUP_REPLICATION;
mysql>  SET GLOBAL group_replication_bootstrap_group=OFF;	 //只在server1上执行
mysql> SELECT * FROM performance_schema.replication_group_members;

server2配置

/etc/init.d/mysqld stop
cd /data/mysql 
rm -fr *
vim /etc/my.cnf      //与server1相同,修改主机名和网段
mysqld --initialize --user=mysql
/etc/init.d/mysqld start

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='westos' FOR CHANNEL 'group_replication_recovery';
mysql>  START GROUP_REPLICATION;
mysql> SELECT * FROM performance_schema.replication_group_members;

server3配置

同server2

测试:

所有节点都可以读写数据

server1

server2

server3

慢查询

mysql> set global slow_query_log=ON;
mysql> show variables like "long%";
mysql> set  long_query_time=5;
mysql> select sleep(5);		//模拟慢查询语句
mysql> show variables like "slow%";

mysql路由器

server4

安装软件
 rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm
配置服务
 cd /etc/mysqlrouter/
 vim mysqlrouter.conf

[routing:ro]
bind_address = 0.0.0.0
bind_port = 7001
destinations = 192.168.81.30:3306,192.168.81.40:3306,192.168.81.50:3306
routing_strategy = round-robin
//表示路由策略为轮询(Round-Robin),即按照目标服务器列表的顺序依次将请求路由到不同的后端MySQL服务器,以实现负载均衡。
[routing:rw]
bind_address = 0.0.0.0
bind_port = 7002
destinations = 192.168.81.50:3306,192.168.81.40:3306,192.168.81.30:3306
routing_strategy = first-available
//表示路由策略为首个可用服务器(First-Available),即首先将请求路由到列表中第一个可用的服务器,从而实现高可用性。

启动服务
systemctl  enable --now  mysqlrouter.service
安装mysql客户端工具
yum install -y mariadb

server1

在mysql集群中创建远程测试用户

mysql> grant all on test.* to 'shx'@'%' identified by 'westos';

server4

连接mysql路由器

mysql -h 192.168.81.60 -P 7001 -u shx -pwestosL;
MySQL [(none)]> select * from test.t1;

在server1上查看网络连接

yum install -y lsof
lsof -i :3306

mysql -h 192.168.81.60 -P 7002 -u shx -pwestosL;

server3

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值