1、简介

读写分离:当业务量上来时,往往一台单机的mysql数据库不能满足性能需求,这时候就需要配置主从库读写分离来解决性能瓶颈。简单的来说,就是原先一台数据库既读又写,现在改成一台写和1台以上读。

1.1、环境准备

  1. 3台windows server 2012(理论上windows server 2003+ 都行)
  2. mysql 5.6
  3. mysql-proxy-0.8.5-windows-x86-32bit
  4. navicat for mysql (如果你对命令行比较熟,忽略这个)

1.2、分配IP

  1. 主数据库:192.168.103.207
  2. 从数据库:192.168.103.208
  3. 中间件服务器:192.168.103.203

1.3、安装mysql

在[主]192.168.103.207和[从]192.168.103.208两台机子上根据向导模式一步步安装mysql 5.6,这里我选择Server环境,安装后先停止mysql服务

2、配置my.ini

在主从的服务器上分别找到以下路径的my.ini文件

C:\ProgramData\MySQL\MySQL Server 5.6\my.ini

主数据库配置的mysqld节点下加入

[mysqld]
log-bin=mysql-bin #从库会基于此log-bin来做复制
binlog-do-db=mytest #用于读写分离的具体数据库,这里我创建了mytest作测试
binlog_ignore_db=mysql #不用于读写分离的具体数据库
binlog_ignore_db=information_schema #和binlog-do-db一样,可以设置多个

8.0额外增加

#选择row模式
binlog-format=ROW

从数据库配置配置的mysqld节点下加入

[mysqld]
log-bin=mysql-bin #从库会基于此log-bin来做复制
replicate-do-db=mytest #用于读写分离的具体数据库,这里我创建了mytest作测试

8.0额外增加

#选择row模式
binlog-format=ROW

注:在对从数据库配置的时候,需要在文件内找到找到server-id,将它改成和主库不一样的编号,例如

主库

server-id=

从库

server-id=

多个从库时,可以递增填写

3、配置主数据库

开启主数据库服务,创建用来测试读写分离的数据库
对用户授权使其用于复制主库数据

grant
replication slave on
*.* to
'slave123'@'192.168.103.%'
identified by
'';

用户名:slave123
密码:123456

然后查询主数据库状态,并记录下File和Position字段的值

mysql> show master status;
+------------------+----------+--------------+--------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin. | | mytest | mysql,information_schema | |
+------------------+----------+--------------+--------------------------+-------------------+
row in set (0.05 sec)

我的
File:mysql-bin.000001
Position:2073

4、配置从数据库

开启从数据库服务,手动创建测试读写分离的库,这边不会帮你自动创建,同时也创建和主库一样的用户,我这里还是先停止从库

stop slave;

设置它的master

change master to
master_host='192.168.103.207',
master_port=,
master_user='slave123',
master_password='',
master_log_file='mysql-bin.000001',
master_log_pos=;

注:这里的 master_log_filemaster_log_pos就是配置主数据库查询到的FilePosition

启动从库

start slave;

检查是否启动成功

show slave status;

如果Slave_IO_State字段显示 Waiting for master to send event说明成功,当然你也可以在主库表中插入一条数据,看看从库是否有同步,到这里,已经配置好主从同步了。

5、配置Mysql-Proxy

下载 mysql-proxy-0.8.5-windows-x86-32bit 解压到任意位置,它是绿色免安装版的,创建配置文件 mysql-proxy.conf,内容如下

[mysql-proxy]
admin-username=root
admin-password=root
admin-lua-script=C:/mysql-proxy-0.8.-windows-x86-32bit/lib/mysql-proxy/lua/admin.lua
proxy-backend-addresses=192.168.103.207:
proxy-read-only-backend-addresses=192.168.103.208:
proxy-lua-script=C:/mysql-proxy-0.8.-windows-x86-32bit/share/doc/mysql-proxy/rw-splitting.lua
log-file=C:/mysql-proxy-0.8.-windows-x86-32bit/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true

admin-username:用于中间件连接的用户,这里我还是用root偷懒
admin-password:同上用户密码
admin-lua-script:根据存放的文件位置自行调整
proxy-backend-addresses:主库服务器+端口
proxy-read-only-backend-addresses:从库服务器+端口,多个从库用,隔开
proxy-lua-script:根据存放的文件位置自行调整
log-file:日志文件存放位置,如果你指定了一个路径,请确保手动创建了对应的文件夹,否则会报错
log-level:日志级别
daemon:以守护进程方式运行
keepalive:长连接

将上面创建的文件复制到mysql-proxy-0.8.5-windows-x86-32bit的bin目录中
创建install.bat文件,内容如下

"C:\mysql-proxy-0.8.5-windows-x86-32bit\bin\mysql-proxy.exe" -P 192.168.103.203: --defaults-file="C:\mysql-proxy-0.8.5-windows-x86-32bit\bin\mysql-proxy.conf"

也放在mysql-proxy-0.8.5-windows-x86-32bitbin目录中,双击运行
接下来,用你的客户端工具连接 192.168.103.203:6217(6217这个端口随便设置,跟上面的bat里面一致就行),测试是否可以能正常连接,如果能连接,但是不能显示读写分离的数据库,那一般是权限设置问题

Windows中使用Mysql-Proxy实现Mysql读写分离的更多相关文章

  1. MySQL Proxy 实现MySQLDB 读写分离

    一.简述 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载平衡,故障.查询分析 ...

  2. 使用MySQL Proxy和MySQL Replication实现读写分离

    MySQL Replication可以将master的数据复制分布到多个slave上,然后可以利用slave来分担master的读压力.那么对于前台应用来说,就要考虑如何将读的压力分布到多个slave ...

  3. [转载] 使用MySQL Proxy解决MySQL主从同步延迟

    原文地址:http://koda.iteye.com/blog/682547 MySQL的主从同步机制非常方便的解决了高并发读的应用需求,给Web方面开发带来了极大的便利.但这种方式有个比较大的缺陷在 ...

  4. 使用MySQL Proxy解决MySQL主从同步延迟

    MySQL的主从同步机制非常方便的解决了高并发读的应用需求,给Web方面开发带来了极大的便利.但这种方式有个比较大的缺陷在于MySQL的同步机制 是依赖Slave主动向Master发请求来获取数据的, ...

  5. MySql的主从复制以及读写分离详解

    MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...

  6. 基于Mysql-Proxy实现Mysql的主从复制以及读写分离(下)

    基于Mysql-Proxy实现Mysql的主从复制以及读写分离(下) 昨天谈到了Mysql实现主从复制,但由于时间原因并未讲有关读写分离的实现,之所以有读写分离,是为了使数据库拥有双机热备功能,至于双 ...

  7. Mysql 高可用(MHA)-读写分离(Atlas)-分布式架构(Mycat)

    Mysql 高可用(MHA)-读写分离(Atlas) 1. 搭建主从复制(一主两从) 1.1 准备环境 1 主库:10.0.0.51/db01 2 从库:10.0.0.52/db02,10.0.0.5 ...

  8. mysql数据库主从同步读写分离(一)主从同步

    1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做?  不往从服务器去写了 ...

  9. 基于Mysql-Proxy实现Mysql的主从复制以及读写分离(上)

    基于Mysql-Proxy实现Mysql的主从复制以及读写分离(上) 上周BOSS给分配任务让实现一下Mysql数据库的主从复制以及读写分离,然后花了一盏茶的功夫进行了调研,发现主从复制数据库进行一番 ...

  10. MySQL主从复制技术与读写分离技术amoeba应用

    MySQL主从复制技术与读写分离技术amoeba应用 前言:眼下在搭建一个人才站点,估计流量会非常大,须要用到分布式数据库技术,MySQL的主从复制+读写分离技术.读写分离技术有官方的MySQL-pr ...

随机推荐

  1. python爬虫入门(三)XPATH和BeautifulSoup4

    XML和XPATH 用正则处理HTML文档很麻烦,我们可以先将 HTML文件 转换成 XML文档,然后用 XPath 查找 HTML 节点或元素. XML 指可扩展标记语言(EXtensible Ma ...

  2. robot framework之弹出窗口的处理关键字实战

    1.1  弹出窗口的处理关键字 5.8.1 Alert Should Be Present关键字 按F5 查看Alert Should Be Present关键字的说明,如下图

  3. sql中关于存在就不做操作的代码块

    前言: 在开发中,经常会对数据库表进行新增修改操作,那么如果表中的属性信息已然存在啦!就没必要去做重复的操作了... 代码块 BEGIN SELECT "COUNT"(*) int ...

  4. RedisTemplate执行Redis脚本

    对于Redis脚本使用过的同学都知道,这个主要是为了防止竞态条件而用的.因为脚本是顺序执行的.(不用担心效率问题)比如我在工作用,用来设置考试最高分. 如果还没有用过的话,先去看Redis脚本的介绍, ...

  5. Java NIO Scatter / Gather

    原文链接:http://tutorials.jenkov.com/java-nio/scatter-gather.html Java NIO发布时内置了对scatter / gather的支持.sca ...

  6. python 模块与包

    一.模块 1.1 什么是模块 # 什么是模块 # 一组功能的集合,就是模块,在python中一个py文件就一个模块 1.2 为什么要使用模块 # 1.可使代码的结构功能分区更清晰 # 2.可重复使用模 ...

  7. 在Python中用Request库模拟登录(四):哔哩哔哩(有加密,有验证码)

    !已失效! 抓包分析 获取验证码 获取加密公钥 其中hash是变化的,公钥key不变 登录 其中用户名没有被加密,密码被加密. 因为在获取公钥的时候同时返回了一个hash值,推测此hash值与密码加密 ...

  8. Python中标准模块importlib详解

    1 模块简介 Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外,importlib允许程序员创建他们自定 ...

  9. scrapy分布式爬虫scrapy_redis二篇

    =============================================================== Scrapy-Redis分布式爬虫框架 ================ ...

  10. 将外部dwg图纸中指定带属性的块插入到当前图纸中

    static void InsertBlock() { //获取要插入的块名 TCHAR str[40]; acedGetString(Adesk::kFalse, _T("\n请输入要插入 ...