文字

Running statements

这个插件可以配合 (mysqli, mysql, 和 PDO_MYSQL) 使用, 他们都是基于 mysqlnd library 工作的。 PECL/mysqlnd_ms 插件是 mysqlnd library 的一部分, 他并不改变这些扩展的 API 或者行为。

当 MySQL 链接打开的时候,插件会在配置文件中根据章节设定匹配 host 参数。 例如,插件配置文件中指定 myapp,那么可以使用 myapp 作为 host 打开 MySQL 链接。

Example #1 插件指定的配置文件 (mysqlnd_ms_plugin.ini)

{
    "myapp": {
        "master": {
            "master_0": {
                "host": "localhost",
                "socket": "\/tmp\/mysql.sock"
            }
        },
        "slave": {
            "slave_0": {
                "host": "192.168.2.27",
                "port": "3306"
            }
        }
    }
}

Example #2 开启一个负载均衡链接

<?php

$mysqli  = new  mysqli ( "myapp" "username" "password" "database" );
$pdo  = new  PDO ( 'mysql:host=myapp;dbname=database' 'username' 'password' );
$mysql  mysql_connect ( "myapp" "username" "password" );
?>

上面的连接范例是负载均衡方式的。插件将发送只读查询给 192.168.2.27 端口 3306。其他的所有查询,将发送给 localhost 指定的 master 服务器。在 Linux 设备中, /tmp/mysql.sock 指定了本机的 MySQL 服务;在 Windows 系统中将使用默认的 TCP/IP 通讯。 插件将使用 usernamepassword 连接任何一个 在 myapp 章节中指定的数据库。在连接以后,将选择 database 设定的数据库作为当前操作数据库。

username, password 和默认数据库将在所有设定的数据库中做统一设定。 换句话说,就是所有的数据库必须使用同样的用户名口令登录。 从 1.1.0 版本以后,这个限制将不再存在,可以针对任何一个服务器通过 username 和 password 进行登录鉴权设定。

插件在不改变查询结构的基础上,提供 读写分离。 下面的范例假定 master 和 slave 之间并没有很大的延迟。

Example #3 Executing statements

<?php

$mysqli  = new  mysqli ( "myapp" "username" "password" "database" );
if (
mysqli_connect_errno ())
  

  
die( sprintf ( "[%d] %s\n" mysqli_connect_errno (),  mysqli_connect_error ()));


if (! $mysqli -> query ( "DROP TABLE IF EXISTS test" )) {
 
printf ( "[%d] %s\n" $mysqli -> errno $mysqli -> error );
}
if (!
$mysqli -> query ( "CREATE TABLE test(id INT)" )) {
 
printf ( "[%d] %s\n" $mysqli -> errno $mysqli -> error );
}
if (!
$mysqli -> query ( "INSERT INTO test(id) VALUES (1)" )) {
 
printf ( "[%d] %s\n" $mysqli -> errno $mysqli -> error );
}


if (!( $res  $mysqli -> query ( "SELECT id FROM test" )) {
 
printf ( "[%d] %s\n" $mysqli -> errno $mysqli -> error );
} else {
 
$row  $res -> fetch_assoc ();
 
$res -> close ();
 
printf ( "Slave returns id = '%s'\n" $row [ 'id' ];
}
$mysqli -> close ();
?>

以上例程的输出类似于:

Slave returns id = '1'
上一篇: 下一篇: