MySql 主从复制 mysql-proxy实现读写分离
1.安装和配置Docker
服务器版本
阿里云CentOS7.4
docker版本
18.06.0-ce
docker安装步骤
https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1
下载mysql镜像
# docker pull mysql:5.7
启动两个mysql镜像,分别映射3306和3316端口
主库:3306端口
备库:3316端口
# docker run -p : --name mysql3306 -v /opt/mysql/data/data3306:/var/lib/mysql -v /opt/mysql/logs/logs3306:/logs -e MYSQL_ROOT_PASSWORD=xxxxxxxxxxxx -d mysql:5.7 # docker run -p : --name mysql3316 -v /opt/mysql/data/data3316:/var/lib/mysql -v /opt/mysql/logs/logs3316:/logs -e MYSQL_ROOT_PASSWORD=xxxxxxxxxxxx -d mysql:5.7

2.配置主从复制
从主库的docker容器中把默认的配置文件拷贝出来
# docker cp 37735c072370:/etc/mysql/mysql.conf.d/mysqld.cnf /opt/mysql/conf/conf3306
修改配置文件增加两行
#vim mysqld.cnf
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id= #设置server-id
将修改后的配置文件拷回容器里,并重启容器
# docker cp /opt/mysql/conf/conf3306/mysqld.cnf 37735c072370:/etc/mysql/mysql.conf.d/
# docker restart 37735c072370
创建主从复制需要的mysql账户,并分配权限
mysql>CREATE USER 'repl'@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'repl123';
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'xxx.xxx.xxx.xxx'
查看主库状态,记录下File和Position
mysql>SHOW MASTER STATUS;

修改从库配置文件
#vim mysqld.cnf
[mysqld]
server-id= #设置server-id
同样拷进从库镜像,并重启容器
mysql中执行配置主库的语句
mysql>change master to master_host='xxx.xxx.xxx.xxx', #Master 服务器Ip
master_port=,
master_user='repl',
master_password='repl123',
master_log_file='master-bin.000001',#Master服务器产生的日志
master_log_pos=; mysql>start slave; mysql>show slave status\G
如果slave_io_running和slave_sql_running都为yes,表示启动同步成功

建立两个客户端连接并创建测试库

主库建立student表并插入一条记录,可以看到,从库自动同步了数据,配置成功


3.用mysql-proxy实现读写分离
下载mysql-proxy
https://downloads.mysql.com/archives/proxy/
解压并配置mysql-proxy
# tar zxvf mysql-proxy-0.8.-linux-el6-x86-64bit.tar.gz
# cd mysql-proxy-0.8.-linux-el6-x86-64bit
# vim /etc/mysql-proxy.cnf
[mysql-proxy]
user=root #运行mysql-proxy用户
admin-username=proxy #主从mysql共有的用户
admin-password=proxy123 #共有用户密码
proxy-read-only-backend-addresses=xxx.xxx.xxx.xxx: #备库地址
proxy-backend-addresses=xxx.xxx.xxx.xxx: #主库地址
proxy-lua-script=/usr/local/mysql-proxy/mysql-proxy-0.8.-linux-el6-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua #指定读写分离配置文件位置
admin-lua-script=/usr/local/mysql-proxy/mysql-proxy-0.8.-linux-el6-x86-64bit/share/doc/mysql-proxy/admin-sql.lua #指定管理脚本
daemon=true #以守护进程方式运行
keepalive=true #mysql-proxy崩溃时,尝试重启
修改读写分离配置文件
# vim /usr/local/mysql-proxy/mysql-proxy-0.8.-linux-el6-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua
min_idle_connections = , #默认超过4个连接数时才开始读写分离,改为1
max_idle_connections = ,
mysql-proxy的bin目录下启动mysql-proxy
# ./mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
主库和从库分别创建用户
mysql>GRANT ALL ON *.* TO 'proxy'@'xxx.xxx.xxx' identified by 'proxy123';
创建mysql-proxy的数据里连接(默认端口4040),可以看到之前验证主从复制时简历的test库和student表

只修改从库的数据,然后通过mysql-proxy查询,可以看到读取的数据是从库修改过的数据,读分离验证成功。
主库:
从库:
mysql-proxy:
停止从库的docker容器,通过mysql-proxy插入一条数据,主库中刷新也有新增的数据,写分离验证成功。
mysql-proxy:
主库:
从库:
至此,mysql的主从复制已经通过mysql-proxy实现读写分离已实现。
MySql 主从复制 mysql-proxy实现读写分离的更多相关文章
- 分布式架构高可用架构篇_08_MyCat在MySQL主从复制基础上实现读写分离
参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...
- 高可用架构篇--MyCat在MySQL主从复制基础上实现读写分离
实战操作可参考:http://www.roncoo.com/course/view/3117ffd4c74b4a51a998f9276740dcfb 一.环境 操作系统:CentOS-6.6-x86_ ...
- mysql主从复制之mysql-proxy实现读写分离
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lansgg.blog.51cto.com/5675165/1242674 本文系 ...
- mysql主从复制 主主复制 读写分离
首先是mysql的主从复制很简单 主主复制也就是互相主从最麻烦的最难的就是日志恢复,增量恢复什么的比较复杂 首先如果你不会安装mysql版本最好一样,或者往上的版本,因为mysql是向下兼容 请注意不 ...
- MySQL/MariaDB数据库的PROXY实现读写分离
MySQL/MariaDB数据库的PROXY实现读写分离 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ProxySQL概述 1>.各家互联网公司读写分离的解决方案 m ...
- MySQL主从(MySQL proxy Lua读写分离设置,一主多从同步配置,分库分表方案)
Mysql Proxy Lua读写分离设置 一.读写分离说明 读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELE ...
- mysql proxy 数据库读写分离字符集乱码
mysql proxy 数据库读写分离字符集乱码 解决办法 在对应配置后端数据库服务器的配置.cnf中加入如下代码 init-connect='SET NAME UTF8' skip-characte ...
- Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- 黄聪:Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- linux上使用amoeba实现MySql集群,以及读写分离,主从复制
一.由于是MySql集群,所以就不可能只有一个MySql,需要多个MySql,具体安装步骤,可以参考http://www.cnblogs.com/ywzq/p/4882140.html这个地址进行安装 ...
随机推荐
- for 循环 与forEach 里面return 的区别
for 循环里面 return 可以直接终止 跳出 循环 forEach 是中断本次循环 直接 下一个循环 forEach想要取到值之后 直接跳出循环 可以用 try catch let arr = ...
- bat执行python脚本,执行多条命令
1.新建一个txt文档,输入以下命令 @echo offcmd /k python F:\Pycharm_Projection\Test\test2.py 2.将txt文档保存为.bat格式,然后双击 ...
- Django之权限
关于rbac: (1) 创建表关系: class User(models.Model): name=models.CharField(max_length=32) pwd=models.CharFie ...
- PHP 【五】
函数 如要在页面加载时执行脚本,可以把它放到函数里 函数是通过调用函数来执行的 可在页面的任何位置调用函数 <?phpfunction functionName(){ // 要执行的代码} ...
- CIA402状态转换图
CIA402状态转换如下图所示: 要想改变参数并使其生效,需要先将状态转换到ready,然后修改要配置的参数,再使其运行(operation enabled). 要发送的报文顺序基本如下: 1) ...
- 【原创】大数据基础之Azkaban(1)简介、源代码解析
Azkaban3.45 一 简介 1 官网 https://azkaban.github.io/ Azkaban was implemented at LinkedIn to solve the pr ...
- CodeSmith Generator 7.0.2的激活流程
学过三层的人应该认识CodeSmith Generator吧,今天我就跟大家一起探讨下CodeSmith Generator 7.0.2的激活,这最新版本破解的难度也是超越以往......具体看这篇日 ...
- 4337: BJOI2015 树的同构
题解: 树的同构的判定 有根树从根开始进行树hash 先把儿子的f进行排序 $f[i]=\sum_{j=1}^{k} { f[j]*prime[j]} +num[i]$(我没有仔细想这样是不是树是唯一 ...
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
目标:减少SQL查询数据,避免使用一条SQL语句解决复杂问题 反模式:视图使用一步操作,单个SQL语句解决复杂问题 使用一个查询来获得所有结果的最常见后果就是产生了一个笛卡尔积.导致查询性能降低. 如 ...
- Redis数据结构之quicklist
本文及后续文章,Redis版本均是v3.2.8 我们在使用Redis对外暴露的list数据结构时,给我们带来极大的便利性.其底层实现所依赖的内部数据结构就是quicklist. 我们先来回忆下list ...