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这个地址进行安装 ...
随机推荐
- day 13 - 1 迭代器
迭代器 首先我们查看下列类型拥有的所有方法(会显示很多) print(dir([])) print(dir({})) print(dir('')) print(dir(range(10))) #求下上 ...
- [Harbor]Harbor简要介绍
前一段时间写过一篇文章:[Kubernetes]CentOS7下搭建Harbor仓库,只是知道了如何搭建,但是对于背后的整体架构还不是太清楚,这篇文章就来讲讲. 默认情况下,Harbor运行起来后有如 ...
- python学习第25天
异常处理 什么是异常?什么是错误? 1,程序中难免出现错误. 错误主要分为两种: 1,语法错误 语法错误是根本上的错误,无法通过PYTHON解释器.完全无法执行,是在程序中不应该出现的错误.无法进行异 ...
- JS中 typeof,instanceof类型检测方式
在js中的类型检测目前我所知道的是三种方式,分别有它们的应用场景: 1.typeof:主要用于检测基本类型. typeof undefined;//=> undefined typeof 'a' ...
- 初学python之路-day03
我在前面的文章提到了变量的概念,这里详细介绍下变量的命名.变量名,只能是字母.数字及下划线 "_" 任意组成,而且不能以数字开头.在命名变量时,尽量避免与系统关键词重名,如:'an ...
- python之鼠标的操作
鼠标操作的方法,封装在ActionChains类中 perform:执行ActionChains中的所有存储行为 context_click:右键单击 move_to_element:悬停 doubl ...
- Jenkins的详细安装及使用--windows
操作环境:Windows 一.环境准备 1 安装JDK 本文采用jdk-8u111-windows-x64.exe: 2 配置tomcat 本文采用tomcat8,无需安装,配置JAVA_HOME及J ...
- 将LibreOffice文档转换为豆瓣日记
豆瓣日记的编辑器一直以来都只支持纯文本的,因此无法将原先在LibreOffice中写的带有简单格式的文章导出.由于我在豆瓣主要写一些随笔性的内容,所以它们在LibreOffice中排版时也并未用到什么 ...
- ansible的lookup
lookup路径: /usr/lib/python2.7/site-packages/ansible/plugins/lookup 所有的lookup插件列表cartesian.py dnstxt.p ...
- mysql字段有中英文,数字按照升序/降序 排序
ORDER BY CONVERT(name,SIGNED) ASC, CONVERT(name USING gbk) DESC