MySQL安装+主从复制+GTID+半同步+读写分离+一主多从

@@@@@@@@@@@@@@@@@@
实验环境:企业6.5
master–>server1:172.25.100.1
slave–>server2:172.25.100.2
@@@@@@@@@@@@@@@@@@

1.安装数据库:

官网下载安装包:mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar;
在master和slave上分别解压安装;
解压后只安装下面5个rpm包;
yum install mysql-community-client-5.7.17-1.el6.x86_64.rpm
yum install mysql-community-common-5.7.17-1.el6.x86_64.rpm
yum install mysql-community-libs-5.7.17-1.el6.x86_64.rpm
yum install mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm
yum install mysql-community-server-5.7.17-1.el6.x86_64.rpm
这里写图片描述

2.启动数据库+初始化
启动数据库;
过滤临时密码,进行密码修改;
这里写图片描述

设置完新密码后,回车选择应用不再修改;
依次是移除匿名用户,不允许root用户远程登陆,移除test数据库,刷新数据库,全选yes;
这里写图片描述

master测试成功
这里写图片描述

slave测试成功
这里写图片描述

二.主从同步的基本配置:

1.master配置
更改配置文件,并重启动数据库
这里写图片描述这里写图片描述

进入数据库

mysql -pXuehui+666
mysql> show master status\G;   ##查看master状态
mysql> grant REPLICATION SLAVE ON *.* to redhat@'172.25.100.%' identified by 'Xuehui+666';  ##授权slave对任何数据库的任何表操作,以redhat身份,从172.25.100.0/24网段登陆,密码‘Xuehui+666‘
mysql> show master status\G;   ##再次查看master状态

这里写图片描述
授权操作以后, Position发生改变
这里写图片描述
2.从(以下称slave)的配置
更改配置文件,并重启动数据库
这里写图片描述
这里写图片描述
进入数据库

mysql -pXuehui+666
mysql>change master to master_host='172.25.100.1',master_user='redhat',master_password='Xuehui+666',master_log_file='mysql-bin.000001',master_log_pos=450;    ##和master建立认证联系
mysql> start slave;   ##开启slave
mysql> show slave status\G;  ##查看状态

slave和master建立认证联系
这里写图片描述

开启slave,查看状态 (IO线程和 sql线程已经正常开启 )
这里写图片描述

3.测试:
master新建个数据库xuehui, slave会自动同步
这里写图片描述
slave自动同步
这里写图片描述

三.gtid的使用:

Gtid全称global transaction identifiers全局事务标志
一个事务对应唯一的一个id(mysql的语句),一个gtid在一个服务器(master)上只会也只能执行一次,在从库上(slave)也只会出现一次;
Gtid由uuid+tid组成,uuid是mysql实例的唯一标识,tid代表了该实例(理解为语句,执行的动作)上已经提交的事务数量,并且会随着事务提交单调递增;
1.master配置
这里写图片描述
这里写图片描述
2.slave配置
这里写图片描述
这里写图片描述
3.测试:
master再xuehui库中新建表;
这里写图片描述
slave同步
这里写图片描述
在master的xuehui库的user_tb表中添加 use1,123,
这里写图片描述
slave同步
这里写图片描述

四.slave并行复制

并行复制可以优化把/var/lib/mysql/relay-log.info优化为 mysql 库中的表,就不用将其不断的写入磁盘了,此时此文件将不存在;
这里写图片描述
1.编辑slave配置文件
这里写图片描述
这里写图片描述
2.进入slave数据库,查看优化项
这里写图片描述
查看16个线程
这里写图片描述……这里写图片描述

五.半同步

在异步复制的情况下,mysql master server 会将自己的二进制日志通过copy线程传输给slave以后,master会自动返回数据给客户端,而不管slave上是否接收到了这个日志;
半同步,当master把日志传给slave时,确保slave收到了日志,才会返回数据给客户端;
1.master加载模块

mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> show plugins; 
mysql> show variables like  '%rpl_semi%';
mysql> set global rpl_semi_sync_master_enabled=1;  ##global全局

这里写图片描述
……这里写图片描述
查看加载模块信息
这里写图片描述
开启加载的master模块 ,延迟时间为10s;
这里写图片描述
2.slave加载模块

mysql> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';   ##加载slave模块
mysql> set global rpl_semi_sync_slave_enabled=1;  ##开启slave模块
mysql> show variables like  '%rpl_semi%';   ##查看信息
mysql> STOP SLAVE IO_THREAD;   ##关闭slaveIO线程
mysql> START SLAVE IO_THREAD;  ##开启slaveIO线程

模块添加完以后,IO线程正常
这里写图片描述
3.测试
关闭slave的IO线程
这里写图片描述
在master建立数据后,会停滞10s,从半同步转入异步模式;
这里写图片描述
再建立数据,会很快返回OK;
这里写图片描述
有两个事务没有slave没有接受到;
这里写图片描述
slave开启IO线程以后又会进入半同步模式;

六.读写分离

1.下载,解压mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz,找到它的启动脚本mysql-proxy
这里写图片描述
这里写图片描述
3.在/usr/local/mysql-proxy新建配置目录conf和日志目录logs,进入新建的目录内,编写配置文件mysql-proxy.conf
这里写图片描述
这里写图片描述
配置文件内容:

[mysql-proxy]
user=root    ##root身份运行
proxy-address=172.25.100.3:3306   ###mysql中间代理件
proxy-backend-addresses=172.25.100.1:3306    ##master
proxy-read-only-backend-addresses=172.25.100.2:3306 ##slave
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua    ##lua脚本
pid-file=/usr/local/mysql-proxy/logs/mysql-proxy.pid
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log  ##日志文件(手动新建logs)
log-level=info  ##日志级别
keepalive=true   ##持续连接
daemon=true    ##后台运行

4.修改下lua脚本,方便实验效果
这里写图片描述
这里写图片描述
5.启动msql-proxy

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf ##报错后更改权限
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

这里写图片描述……这里写图片描述
启动成功
这里写图片描述
6.master授权后物理机检测
这里写图片描述
物理机登陆代理server3
这里写图片描述
插入数据
这里写图片描述
server1和server2都可以读到数据,这说明master(hsot1)和slave(host2)都有读的功能;
这里写图片描述
这里写图片描述

将server1(master)关闭,物理机连接代理server3发现写不进去数据
这里写图片描述
这里写图片描述
把master(server1)数据库开启,关闭slave(server2),物理机插入数据user9,999,会发现写入成功,再到master (server1) 上查看,发现写进去了,这说明master有读和写的功能,而slave只有读的功能;
这里写图片描述这里写图片描述
这里写图片描述
这里写图片描述

七.再加一台slave(master–>slave1–>slave2)

1.在server3上安装并启动mysql
这里写图片描述
杀死占用3306端口的mysql-proxy进程,才能成功启动mysql
这里写图片描述
这里写图片描述
初始化操作示图略
配置server-id,开启gtid
这里写图片描述

2.master将备份的数据库传给slave2(server3)
这里写图片描述
这里写图片描述

3.slave1上开启二进制日志,并授权
开启二进制日志
这里写图片描述
授权

mysql> grant REPLICATION SLAVE on *.* to redhat@'172.25.100.%' identified by 'Xuehui+666';
mysql> flush privileges;

这里写图片描述
4.在slave2上(server3)指定master为slave1(server2)

change master to master_host='172.25.100.2',master_user='redhat',master_password='Xuehui+666',master_auto_position=1;

IO和SQL线程正常开启
这里写图片描述
5.master(server1)进行一条事务,slave1(server2)和slave2(server3)同步
这里写图片描述

猜你喜欢

转载自blog.csdn.net/guaiderzhu1314/article/details/80317328