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这个地址进行安装 ...
随机推荐
- 打印文章 FZOJ 5190
传送门 #include<bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned lon ...
- 删除对象的某个属性 delete
有时候我们可能会遇到需要删除一个对象的某个属性的这种情况,保留剩下的,不想遍历,那我们就可以使用delete操作符, let obj = { a: 1, b: 2, c: 3 } delete obj ...
- 关于NB-IoT的十大问题和答案【转】
转自:https://blog.csdn.net/u011943791/article/details/80287053 今天大白来给各位解答一下关于NB-IoT的十大问题. 问1:NB-IoT模块还 ...
- Atcoder Grand Contest 032
打的第一场Atcoder,已经知道会被虐得很惨,但没有想到竟然只做出一题-- 思维急需提升. A - Limited Insertion 这题还是很签到的. 感觉正着做不好做,我们反着来,把加数变为删 ...
- 小程序获取formid配置模板消息
小程序无限获取formid,发送模板信息 1.发送模板信息需要条件:formid 2.formid产生环境:提交form表单产生,并且只有真机才能出现————安卓一个13位的时间戳(近期使用得时候,安 ...
- SpringBoot配置
多模块Maven项目 .gitignore文件 .idea *.iml targetout log tmp test 父模块pom文件 <?xml version="1.0" ...
- django中静态文件的配置路径
一 先找到配置文件 二 将配置文件添加上(注意名字一定要大写)
- 金蝶k/3 现金流量表编制口诀
现金流量表编制口诀 现金流量表是会计考试中十分令人头疼的内容,丢三落四是现金流量表编制中最容易出现的错误.下面的口诀基本上概括了现金流量表的全部编制过程.口诀的具体内容如何理解,我们在口诀后边详细阐述 ...
- Postman 安装及使用入门教程(我主要使用接口测试)
1.Postman 安装及使用入门教程(我主要使用接口测试)Postman的English官网:https://www.getpostman.com/chrome插件整理的Postman中文使用教程( ...
- .net core2.x - 关于工作单元(UnitOfWork) 模式
概要:在搭建框架,顺手说下写下,关于unitofwork,可能你理解了,可能你还不理解,可能与不可能不是重点,重点是感兴趣就看看吧. 1.工作单元(unitofowork)是什么(后面简写uow)? ...