利用mysqlnd_ms实现mysql读写分离

引用Laruence博文:


从PHP5.3开始, MySQL team专为PHP开发的MySQL连接库mysqlnd(MySQL native driver for PHP)终于和PHP一起发布了. mysqlnd的主要目的是为了解决长久以来mysql和php的license的问题. 它将作为PHP的源代码的一部分和PHP一起发布.

今天, 我要为大家介绍一个mysqlnd的插件:mysqlnd_ms, 这个插件是由mysqlnd的开发者Andrey Hristov,Ulf Wendel和johannes一起开发的, 目前发布在PECL: mysqlnd_ms

在这个扩展的介绍页面我们可以看到它的功能描述:

The replication and load balancing plugin is a plugin for the mysqlnd library. It can be used with PHP MySQL extensions (ext/mysql, ext/mysqli, PDO_MySQL). if they are compiled to use mysqlnd. The plugin inspects queries to do read-write splitting. Read-only queries are send to configured MySQL replication slave servers all other queries are redirected to the MySQL replication master server. Very little, if any, application changes required, dependent on the usage scenario required.

这个扩展, 主要实现了, 连接保持和切换, 负载均衡和读写分离等, 也就是说, 这个扩展会去分别PHP发给MySQL的query, 如果是”读”的query, 就会把query发送给从库(配置中指明), 并且支持负载均衡; 而如果是”写”的query, 就会把query发送给主库.

不过这个扩展需要搭配mysqlnd一起使用(从PHP5.4 beta1开始, 我们已经把mysqlnd作为mysql, mysqli, pdo的默认链接目标, 当然, 你也可以通过–with-mysql=***来制定你想要链接到libmysql).

============================================


废话不多说,主要还是介绍,mysqlnd_ms

下载地址:http://pecl.php.net/package/mysqlnd_ms

mysqlnd_ms是mysqlnd的一个插件,该插件实现了连接保存和切换、负载均衡、读写分离的功能。要想使用mysqlnd_ms的读写分离功能必须在安装php时使用--with-mysqlnd。mysqlnd实现的功能是可以不需要在php服务器上安装mysql,在php5.3之前编译安装php需要通过--with-mysql=/path/to/mysql指定mysql安装路径


1、先来编译安装mysqlnd_ms模块吧



tar -zxvf mysqlnd_ms-1.5.2.tgz
 cd mysqlnd_ms-1.5.2
 /usr/local/php/bin/phpize
 ./configure --with-php-config=/usr/local/php/bin/php-config
 make && make install
记录下面的路径需要拥有配置php.ini



 Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug
-non-zts-20121212/
 Installing header files: /usr/local/php/include/php/

2、编辑 /usr/local/php/etc/php.ini

 extension = /usr/local/php/lib/php/extensions/no-debug-non-
zts-20121212/mysqlnd_ms.so
 mysqlnd_ms.enable = On
 mysqlnd_ms.config_file = /usr/local/php/etc/mysqlnd_ms_plugin.ini

3、创建mysqlnd_ms_plugin.ini配置文件

"myapp": {
        "master": {
            "master_0": {
                "host": "192.168.6.135",
                "socket": "\/tmp\/mysql.sock"
            }
        "slave": {
            "slave_0": {
                "host": "192.168.6.136",
                "port": "3306"
            "slave_1": {
                "host": "192.168.6.137",
                "port": "3306"
            "filters": {
                "random": {
                    "sticky": "1"
                }
            }
        }
}
1主2从嘛。。。


filters是定义负载均衡访问从服务器的策略,random是随机选择一台服务器,strick参数设置成1是指将一次请求都指向一台服务器,其实共有4种策略,具体详见、

http://php.net/manual/zh/mysqlnd-ms.loadbalancing.php


对了使用方法要说明下,

此时你连接的DB_HOST 就不是localhost 啦,而是上面配置的 myapp

关键词: mysqlnd_ms , mysqlnd_ms使用 , mysqlnd_ms安装

上一篇: MySQL查看数据库大小和表大小的方法
下一篇: mac系统 qq 无法截图的解决方法

目前还没有人评论,您发表点看法?
发表评论

评论内容 (必填):