1, 简介
读写分离: 当业务量上来时, 往往一台单机的 MySQL 数据库不能满足性能需求, 这时候就需要配置主从库读写分离来解决性能瓶颈. 简单的来说, 就是原先一台数据库既读又写, 现在改成一台写和 1 台以上读.
1.1, 环境准备
3 台 Windows server 2012(理论上 Windows server 2003+ 都行)
- MySQL 5.6
- MySQL-proxy-0.8.5-Windows-x86-32bit https://downloads.mysql.com/archives/proxy/
- navicat for MySQL (如果你对命令行比较熟, 忽略这个)
1.2, 分配 IP
主数据库: 192.168.103.207
从数据库: 192.168.103.208
中间件服务器: 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 一样, 可以设置多个
从数据库配置配置的 mysqld 节点下加入
- [mysqld]
- log-bin=MySQL-bin #从库会基于此 log-bin 来做复制
- replicate-do-db=mytest #用于读写分离的具体数据库, 这里我创建了 mytest 作测试
注: 在对从数据库配置的时候, 需要在文件内找到找到 server-id, 将它改成和主库不一样的编号, 例如
主库
server-id=1
从库
server-id=2
多个从库时, 可以递增填写
3, 配置主数据库
开启主数据库服务, 创建用来测试读写分离的数据库
对用户授权使其用于复制主库数据
- grant
- replication slave on
- *.* to
- 'slave123'@'192.168.103.%'
- identified by
- '123456';
用户名: slave123
密码: 123456
然后查询主数据库状态, 并记录下 File 和 Position 字段的值
- MySQL> show master status;
- +------------------+----------+--------------+--------------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +------------------+----------+--------------+--------------------------+-------------------+
- | MySQL-bin.000001 | 2073 | mytest | MySQL,information_schema | |
- +------------------+----------+--------------+--------------------------+-------------------+
- 1 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=3307,
- master_user='slave123',
- master_password='123456',
- master_log_file='mysql-bin.000001',
- master_log_pos=2073;
注: 这里的 master_log_file 和 master_log_pos 就是配置主数据库查询到的 File 和 Position
启动从库
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.5-Windows-x86-32bit/lib/MySQL-proxy/lua/admin.lua
- proxy-backend-addresses=192.168.103.207:3307
- proxy-read-only-backend-addresses=192.168.103.208:3307
- proxy-lua-script=C:/MySQL-proxy-0.8.5-Windows-x86-32bit/share/doc/MySQL-proxy/rw-splitting.lua
- log-file=C:/MySQL-proxy-0.8.5-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:6217 --defaults-file="C:\mysql-proxy-0.8.5-windows-x86-32bit\bin\mysql-proxy.conf"
也放在 MySQL-proxy-0.8.5-Windows-x86-32bit 的 bin 目录中, 双击运行
接下来, 用你的客户端工具连接 192.168.103.203:6217(6217 这个端口随便设置, 跟上面的 bat 里面一致就行), 测试是否可以能正常连接, 如果能连接, 但是不能显示读写分离的数据库, 那一般是权限设置问题
来源: https://www.cnblogs.com/wyt007/p/10762300.html