企业运维实战LAMP架构--mysql主从复制、半同步复制、组复制、mysql路由器


前言

在之前的章节中,我们源码编译安装并初始化了mysql数据库,今天我们将详细学习mysql数据库在lamp架构中的主要应用。
主要内容包括mysql的主从复制、通过gtid实现的主从复制(一主一从、一主多从)、mysql半同步复制、mysql组复制。


一、mysql主从复制

master主机vm1:
开启mysql数据库
/etc/init.d/mysqld start
在这里插入图片描述编辑mysql主配置文件,给定主机server id
vim /etc/my.cnf

[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
# symbolic-links=0
# # Settings user and group are ignored when systemd is used.
# # If you need to run mysqld under a different user or group,
# # customize your systemd unit file for mariadb according to the
# # instructions in http://fedoraproject.org/wiki/Systemd
#
# #default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci

server-id=1
log-bin=mysql-bin

重启mysql数据库

/etc/init.d/mysqld restart

在这里插入图片描述

mysql -p 输入密码 登陆数据库

查看主机状态

show master status;

在这里插入图片描述
创建mysql用户并授权

CREATE USER 'repl'@'%' IDENTIFIED BY 'westos' #创建用户repl可以通过任何方式登陆,密码为westos
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; #授权

查看所以用户

select * from mysql.user\G;

在这里插入图片描述
slave主机vm2:
需要安装mysql(可以将server1中的mysql scp到vm2中的/usr/local)

将mysql添加到环境变量中

vim ~/.bash_profile
在这里插入图片描述
source ~/.bash_profile 重新读取文件

创建用户mysql和数据目录/data/mysql
在这里插入图片描述

chmod 750 /data/mysql

vim /etc/my.cnf

[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

character-set-server = utf8
collation-server = utf8_general_ci

mysqld -initialize --user=mysql

在这里插入图片描述生成临时密码用于安全初始化mysql

设置脚本启动mysql

cp /usr/local/mysql/support-files/mysql.server	/etc/init.d/mysqld
/etc/init.d/mysqld start #开启mysql

安全初始化mysql

mysql_secure_installation

登陆验证:
mysql -p
在这里插入图片描述vim /etc/my.cnf ,添加设置从server id
在这里插入图片描述重启mysql

/etc/init.d/mysqld restart

在这里插入图片描述
测试,

server2:
连接主机ip的mysql

CHANGE MASTER TO MASTER_HOST='172.25.9.1',MASTER_USER='repl',MASTER_PASSWORD='westos',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;
mysql -h 172.25.9.1 -u repl -p

在这里插入图片描述配置连接参数:

server1 创建库表

create database westos;		#创建库

mysql> create table westos.user(   #创建表
    -> username varchar(10));

INSERT INTO westos.user VALUES('user1'); #插入数据

select * from user;	#查看数据

在这里插入图片描述

再进行操作前,先将主机被操作的库备份,并传给server2

mysqldump -p westos > dbdump.db 
scp dbdump.db server2:~

server2:
导入备份文件。

mysql -pwestos westos < dbdump.db

开启slave并查看状态

start slave;
show slave status\G;

在这里插入图片描述

select * from westos.user;

在这里插入图片描述
主机master中的操作已经成功通过二进制文件复制到从机slave中。


二、Gtid实现主从复制

gtid工作原理:
在这里插入图片描述若主机玛斯图尔down掉,可通过gtid_next 来恢复信息。

一主一从

特点:
高可用性、主备、热备份

操作:
master主机通过主配置文件打开gtid模式
在这里插入图片描述
重启mysql

/etc/init.d/mysqld restart 

slave主机也编辑主配置文件打开gtid模式
在这里插入图片描述/etc/init.d/mysqld restart 重启服务

slave主机关闭slave,配置连接参数,

CHANGE MASTER TO MASTER_HOST = '172.25.9.1', MASTER_USER='repl', MASTER_PASSWORD = 'westos', MASTER_AUTO_POSITION=1;

测试:
master:

INSERT INTO westos.user VALUES ('user2');
INSERT INTO westos.user VALUES ('user3');

slave:

select * from westos.user;

在这里插入图片描述

一主多从

通常使用与读作用大于写作用

通过server3连接server2

server2操作
vim /etc/my.cnf,使得二进制文件能够被读取并且开启slave更新开关

server-id=2
log-bin=mysql-bin
log_slave_updates=ON
gtid_mode=ON
enforce-gtid-consistency=ON

重启服务

/etc/init.d/mysqld restart

备份westos

mysqldump -pwestos --set-gtid-purged=OFF westos > dump.sql

授权repl用户用于slave服务

grant replication slave on *.* to repl@'%' identified by 'westos';

reset master;

server3操作:
备份文件

mysqladmin -pwestos create westos
mysql -pwestos westos < dump.sql

vim /etc/my.cnf

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

在这里插入图片描述
重启服务

/etc/init.d/mysqld restart
stop slave;
CHANGE MASTER TO MASTER_HOST = '172.25.9.2', MASTER_USER='repl', MASTER_PASSWORD = 'westos', MASTER_AUTO_POSITION=1;
start slave;
show slave status\G;

在这里插入图片描述

测试:
server1:
INSERT INTO westos.user VALUES (‘user3’);

server2、server3:
select * from westos.user;
在这里插入图片描述
在这里插入图片描述
一主二从配置成功。


三、mysql半同步复制

server1:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';  #安装master模块
SELECT PLUGIN_NAME, PLUGIN_STATUS       FROM INFORMATION_SCHEMA.PLUGINS
     WHERE PLUGIN_NAME LIKE '%semi%';			#查询模块状态

在这里插入图片描述

SET GLOBAL rpl_semi_sync_master_enabled =1;  #启动模块
show variables like 'rpl%';		#查看复制

在这里插入图片描述
插入数据,默认等待最长响应时间为10s

INSERT INTO westos.user VALUES ('user6'); 

在这里插入图片描述
查看半同步复制工作工作状态

show status like 'rpl%'; 查看半同步复制工作工作状态

在这里插入图片描述

server2:

stop slave io_thread;
show slave status\G;  #IO进程被关掉,slave无法同步信息
start slave io_thread;	#启动后可同步信息

安装半同步复制相应模块

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';  #server2既是master主机又是slave主机 需要安装两个模块
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SELECT PLUGIN_NAME, PLUGIN_STATUS       FROM INFORMATION_SCHEMA.PLUGINS
     WHERE PLUGIN_NAME LIKE '%semi%';

在这里插入图片描述

启动模块

SET GLOBAL rpl_semi_sync_slave_enabled =1; #启动模块
SET GLOBAL rpl_semi_sync_master_enabled =1;
show variables like 'rpl%';
show status like 'rpl%';
select * from westos.user;

在这里插入图片描述

在这里插入图片描述

server3(与1、2之前的配置相同):
安装模块

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

SELECT PLUGIN_NAME, PLUGIN_STATUS       FROM INFORMATION_SCHEMA.PLUGINS
    ->      WHERE PLUGIN_NAME LIKE '%semi%';

在这里插入图片描述

设定参数

SET GLOBAL rpl_semi_sync_slave_enabled =1;
stop slave io_thread;
start slave io_thread;
select * from westos.user;

在这里插入图片描述


四、mysql组复制

vm1:
初始化mysql

先关闭运行的mysql

/etc/init.d/mysqld stop
rm -fr /data/mysql/*
mysqld --initialize --user=mysql
/etc/init.d/mysqld start

在这里插入图片描述

mysql -p
初始化成功并进入mysql
修改密码

alter user root@localhost identified by 'westos';

编辑主配置文件

disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=3
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= "172.25.4.3:33061"
group_replication_group_seeds= "172.25.4.1:33061,172.25.4.2:33061,172.25.4.3:33061"
group_replication_bootstrap_group=off
group_replication_ip_whitelist="172.25.4.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=ON

以下操作可参考官方文档网页:https://dev.mysql.com/doc/refman/5.7/en/group-replication-launching.html

重启服务

安装模块并查看

INSTALL PLUGIN group_replication SONAME 'group_replication.so';
SHOW PLUGINS;

在这里插入图片描述
关闭二进制文件写入,创建用户并且授权,完成后代开二进制文件写入。

SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'westos';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
SET SQL_LOG_BIN=1;

在这里插入图片描述

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='westos' 
	FOR CHANNEL 'group_replication_recovery';

FLUSH PRIVILEGES;

master主机启动组复制必备三部曲

SET GLOBAL group_replication_bootstrap_group=ON;	#
START GROUP_REPLICATION;				#
SET GLOBAL group_replication_bootstrap_group=OFF;	# server1启动必须三步

查看相关模块状态,只有ONLINE才能实现组复制。

SELECT * FROM performance_schema.replication_group_members; # 查看

在这里插入图片描述

vm2、vm3:
先关闭mysql
scp server2:/etc/my.cnf /etc/
vim /etc/my.cnf

#default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci

disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=2
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= "172.25.9.2:33061"
group_replication_group_seeds= "172.25.9.1:33061,172.25.9.2:33061,172.25.9.3:33061"
group_replication_bootstrap_group=off
group_replication_ip_whitelist="172.25.9.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=ON

同样初始化mysql

rm -fr /data/mysql/*
mysqld --initialize --user=mysql
/etc/init.d/mysqld start

在这里插入图片描述

mysql -p
alter user root@localhost identified by 'westos';
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'westos';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='westos' 
	FOR CHANNEL 'group_replication_recovery';

开启模块
START GROUP_REPLICATION;

在server1中查看
SELECT * FROM performance_schema.replication_group_members; # 查看

在这里插入图片描述

如果recovering
server2中

STOP GROUP_REPLICATION;
reset master;
reset slave;
START GROUP_REPLICATION;

server1中:

STOP GROUP_REPLICATION;
reset master;
reset slave;

# 启动三部曲启动master组复制模块
SET GLOBAL group_replication_bootstrap_group=ON;	#
START GROUP_REPLICATION;				#
SET GLOBAL group_replication_bootstrap_group=OFF;

再次查看

SELECT * FROM performance_schema.replication_group_members;

在这里插入图片描述
server3的操作与server2相同:
最终效果:
在这里插入图片描述
测试:

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');

server1中创建库
在这里插入图片描述server2、3中可查到
在这里插入图片描述
server中创建表,其余两部分能看到
在这里插入图片描述在这里插入图片描述
server3中插入数据、其余两部分可查看到
在这里插入图片描述在这里插入图片描述


五、mysql路由器

重新打开一台虚拟机vm4进行查询

安装查询模块

yum install -y 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.9.1:3306,172.25.9.2:3306,172.25.9.3:3306
routing_strategy = round-robin
[routing:rw]
bind_address = 0.0.0.0
bind_port = 7002
destinations=172.25.9.3:3306,172.25.9.2:3306,172.25.9.1:3306
routing_strategy = first-available

在这里插入图片描述
启动服务并且查看端口

systemctl start mysqlrouter.service
netstat -antlp # 查看7001端口和7001端口是否已经打开

在这里插入图片描述

在这里插入图片描述

server1中授权用户hyl用于查看test库的所有表文件

真实主机连接server4 通过server4 连接7001 和 7002端口

当访问7001

server1

yum install -y lsof
lsof -i :3306

在这里插入图片描述

当访问7002
server3

yum install -y lsof
lsof -i :3306

在这里插入图片描述


笔记补充

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值