discuz mysql 读写分离_配置mysql实现读写分离

环境信息:

mysql_master centos6.5_x64 ip:192.168.0.75

mysql_slave    centos6.5_x64 ip:192.168.0.76

mysql_proxy  centos6.5_x64 ip:192.168.0.77

selinux iptables 关闭

mysql_master 和 mysql_slave 做主从复制,过程略过。

可参考:http://www.rootop.org/pages/1503.html

mysql_proxy 代理,将写操作分到mysql_master,读操作分到mysql_slave。

mysql_proxy 配置:

mysql-proxy的读写分离是通过 rw-splitting.lua脚本实现的,因此需要安装lua开发语言。

目前最新版下载:http://www.lua.org/ftp/lua-5.2.3.tar.gz

[root@localhost ~]# yum install -y gcc gcc-c++ libedit libedit-devel libtermcap-devel ncurses-devel libevent-devel readline-devel

[root@localhost ~]# wget -c http://www.lua.org/ftp/lua-5.2.3.tar.gz

[root@localhost ~]# tar zxvf lua-5.2.3.tar.gz

[root@localhost ~]# cd lua-5.2.3

[root@localhost ~]# make linux

[root@localhost ~]# make install

下载mysql_proxy,目前最新版本 mysql-proxy-0.8.4,处于某些因素,推荐采用已经编译好的二进制版本:

[root@localhost ~]# wget -c http://cdn.mysql.com/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit.tar.gz

[root@localhost ~]# tar zxvf mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit.tar.gz

[root@localhost ~]# mv mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit /usr/local/mysql_proxy

复制读写分离脚本:

[root@localhost ~]#mkdir /usr/local/mysql_proxy/scripts

[root@localhost ~]# cp /usr/local/mysql_proxy/share/doc/mysql-proxy/rw-splitting.lua /usr/local/mysql_proxy/scripts

编辑rw-splitting.lua:

[root@localhost ~]# vi /usr/local/mysql_proxy/scripts/rw-splitting.lua

if not proxy.global.config.rwsplit then

proxy.global.config.rwsplit = {

min_idle_connections = 1, #默认为4

max_idle_connections = 1, #默认为8

is_debug = false

}

end

当会话数达到最小为4时,才会进行读写分离。改为1,直接读写分离。

编辑代理配置文件(手动创建):

[root@localhost ~]#vi /usr/local/mysql_proxy/proxy.conf

[mysql-proxy]

admin-username=root

admin-password=root

admin-lua-script=/usr/local/mysql_proxy/lib/mysql-proxy/lua/admin.lua #定义管理脚本路径

proxy-read-only-backend-addresses=192.168.0.76 #读服务器地址,如果有多个的话,以逗号分开。

proxy-backend-addresses=192.168.0.75 #写服务器地址

proxy-lua-script=/usr/local/mysql_proxy/scripts/rw-splitting.lua #读写分离脚本路径

log-file=/var/log/mysql-proxy.log

log-level=debug

daemon=true

keepalive=true #启动两个进程,互相监视,提高可靠性。

[root@localhost mysql_proxy]#chmod 660 /usr/local/mysql_proxy/proxy.conf #改为660权限,否则启动报错。

启动代理:

[root@localhost ~]#/usr/local/mysql_proxy/bin/mysql-proxy -P 192.168.0.77:3306 --defaults-file=/usr/local/mysql_proxy/proxy.conf

代理监听占用4040端口,但是为了方便php连接,通过-P将其代理监听为3306。

[root@localhost ~]# lsof -i:3306

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

mysql-pro 1924 root 10u IPv4 15349 0t0 TCP 192.168.0.77:mysql (LISTEN)

开启mysql主、从的允许远程连接:

mysql>use mysql;

mysql> grant all privileges on *.*to ‘root’@’%’ identified by ‘root’ with grant option;

mysql> flush privileges;

读写分离测试:

想达到测试效果,先停掉mysql slave的复制功能。

我这里windows下装了mysql,通过mysql的-h参数远程连接 mysql-proxy 执行操作。

声明:因为之前配置好mysql主从复制,那么这里直接用 venus 库为测试数据库,venus_tab为测试表名。

首先在主库的 venus 库创建表 venus_tab ,因为主从同步现在已经被手动停止了,所以从库也需要创建 venus_tab 表,语句为:

create table venus_tab(id int,name varchar(40),birthday date);

windows mysql客户端执行:

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -uroot -proot -h192.168.0.77 -e “Insert into venus.venus_tab values(6,’fff’,19991212);”

Warning: Using a password on the command line interface can be insecure.

去主库中查询:

mysql> select * from venus.venus_tab;

+——+——+————+

| id | name | birthday |

+——+——+————+

| 2 | bbb | 1999-12-12 |

| 1 | aaa | 1999-12-12 |

| 3 | ccc | 1999-12-12 |

| 4 | d | 1999-12-12 |

| 5 | eee | 1999-12-12 |

| 6 | fff | 1999-12-12 |

+——+——+————+

6 rows in set (0.00 sec)

发现数据插入。

从mysql proxy查询数据:

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -uroot -proot -h192.168.0.77 -e “select * from venus.venus_tab;”

Warning: Using a password on the command line interface can be insecure.

+——+——+————+

| id | name | birthday |

+——+——+————+

| 2 | bbb | 1999-12-12 |

| 1 | aaa | 1999-12-12 |

| 3 | ccc | 1999-12-12 |

| 4 | d | 1999-12-12 |

+——+——+————+

发现查询没有数据,这是因为主从停掉的原因(去从库查询也没有数据)。

现在用discuz正式测试一下:

编辑主从mysql配置文件,否则客户端查询会出现乱码,添加:

[mysqld]

default-character-set=utf8 #默认编码

init_connect=’SET NAMES utf8′ #连接使用的编码

skip-character-set-client-handshake #忽略客户端字符集

[client]

default-character-set=utf8

启动mysql的主从复制,清空主、从的 venus 库。

在master中解压discuz,开始安装。为了方便,这里直接用设置好同步的venus库。

先指定连接数据库名称为venus,mysql的ip为master的ip,数据会自行同步到slave中。

安装完成后修改数据库ip为mysql proxy的ip,访问没问题。发表新帖,测试通过。

专注于 服务器运维与web架构

E-mail:venus#rootop.org

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值