mysql主从复制+读写分离

1.主从复制

一主一从

server1:主

server2:从

1.下载地址

https://dev.mysql.com/downloads/mysql/5.7.html#downloads

2.安装

yum install -y mysql-community-libs-5.7.24-1.el7.x86_64.rpm \

>mysql-community-common-5.7.24-1.el7.x86_64.rpm \

>mysql-community-libs-5.7.24-1.el7.x86_64.rpm \

>mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm \

>mysql-community-server-5.7.24-1.el7.x86_64.rpm

 

3.启动数据库,初始化配置

systemctl start mysqld

#查看密码

grep password /var/log/mysqld.log

#修改密码大小写加特殊字符以及数字,其他默认

mysql_secure_installation -p

 

4.主库配置

vim /etc/my.cnf

#末尾加入以下参数

server-id=1  # 配置id
log-bin=mysql-bin  #启用二进制日志

#重新启动数据库

systemctl restart mysqld

 

#为复制创建用户

mysql -p

mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.25.70.%' IDENTIFIED BY 'Redhat_001';

mysql>show master status;

 

5.从库配置,这里数据库都是刚安装的,不用同步数据库。否则必须同步数据库,在建立主从复制

mysql -p

mysql>change master to master_host='172.25.70.1',master_user='repl',master_password='Redhat_001',master_log_file='mysql-bin.000002',master_log_pos=1740;

mysql>start slave;

mysql>show slave status\G;

 

测试

主库建立数据库

mysql> create database Student;

mysql>use Student;

mysql>create table user_tb (username varchar(25) not null,password varchar(25) not null);

mysql> set global read_only=1;

 

从库查看,通到主库的操作

 

server2同步server1的二进制日志都保存在中继日志文件,然后由sql,下图所示

工作原理:

从库生成两个线程,一个I/O线程,一个SQL线程;

i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;

主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;

SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

#查看二进制日志

mysqlbinlog 日志文件

 

 

#开启gtid,主从库都配置如下

vim /etc/my.cnf

加入以下参数

gtid_mode=ON
enforce-gtid-consistency=true

#重启

systemctl restart mysqld

 

#测试

主库

 

从库

如下所是通过gtid方式,来复制数据库

在Master与Slave中都加入以下参数,开启gtid,就是每个组操作的ID都是递增,由1开始,更加有利多个节点同步复制管理,当Master主机挂了时,Slave直接执行next ID 就可以了,方便维护管理,以及更快的选出新的Master

 

#从库加入以下参数

slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16

 如果这个Master库并发写入,Slave库的SQL忙不过来,实现事件同步并发,提高worker进程数量,类型是组并行提交,还有DATABASE,实现事件同步并发,提高速率实现并发存储,建议16个

 

master-info-repository=TABLE
relay-log-info-repository=TABLE

relay-log-recovery=TRUE

将中继日志存储到TABLE中,避免重复读写磁盘,加快速度

 

 mysql>SHOW VARIABLES WHERE variable_name IN ('relay_log_recovery','relay_log_info_repository','master_info_repository');

 

 

半同步复制

主库

#导入模块

mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

#两种查看启用方式方式

mysql>show plugins; 

# 还没有启用

 

#启动

mysql>set global repl_semi_sync_master_enabled=on;

# 加入配置文件永久生效

rpl_semi_sync_master_enabled=on

 

从库

#导入模块

mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

 

#启用

mysql>set GLOBAL rpl_semi_sync_slave_enabled=on;

stop slave io_thread;

start slave io_thread;

#加入配置文件,永久生效

rpl_semi_sync_slave_enabled=on

 

#主库查看到客户端数量为1

 

2.读写分离

在前面基础上加入proxy

server3:mysql-proxy

1.下载地址

https://downloads.mysql.com/archives/proxy/

 

2.解压安装

tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/

ln -s /usr/local/mysql-proxy-0.8.5-linux-el6-x86-64bit/ /usr/local/mysql-proxy

ln -s /usr/local/mysql-proxy/bin/mysql-proxy /usr/local/bin

3.修改以下参数,方便实验

vim mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua

#实现读写分离的脚本,由lua语言编写

# 修改读写分离最小最大值

min_idle_connections = 1,最小连接数

 max_idle_connections = 2,最大连接数

 

4.编辑配置文件

cd /usr/local/mysql-proxy

mkdir conf/

mkdir logs/

vim conf/mysql-proxy

内容如下:

[mysql-proxy]
user=root
daemon=true
proxy-address=172.25.70.3:3306
proxy-backend-addresses=172.25.70.1:3306
proxy-read-only-backend-addresses=172..25.70.2:3306
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
log-level=debug
keepalive=true

 

#使用帮助命令可以查看参数信息

/usr/local/mysql-proxy/bin/mysql-proxy --help

 

5.运行测试

/usr/local/mysql-proxy/bin/mysql-proxy --plugins=proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

chmod 660 mysql-proxy

 

# 查看网络端口状态,如下启动端口为3306

yum install -y net-tools

#在server1:master库创建数据库用户

 

#远程登陆测试,这里我们连接的是调度器server3的ip

# 多次访问后,在proxy中查看端口占用发现默认情况下读写都是master:server1,当达到条件后开始分离,多了指向slave:server2的连接

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值