アジェンダ
mysqlnd と mysqlnd_msとは何か
CentOSでの導入方法
@my_pp とは
株式会社あすか取締役副社長
'97からオープンソースに関わり、MySQL、PostgreSQL、Asteriskなどの
オープンソースに関わる
mysqlndとは
mysql native driver for PHPの略で、mysql専用
PDO_MYSQLより動作は速い
ライセンスはGlvpではなくPHPライセンス
PHP以下でおくられてきたクエリーを、更新か検索かを
判断して自動的にマスタorスレーブに振り分ける
(プログラマはマスタやスレーブについて意識しなくてもよい)
スレーブについては、ランダムロビンで適当に負荷分散できるが、
現状ではフェイルオーバに対応していない
mysqlnd_ms CentOS6.2で検索(Google)
Free Dynamic DNS(DDNS) by POP3,IMAP4,FTP,HTTP-BASIC for Home Server, VPS | MyDNS.JP
インストールしたら、mysqlnd_ms.iniを確認する
/etc/php.d/mysqlnd_ms.ini を以下のようになっているか確認、なっていなけ
れば編集して以下の内容にする。
extension=mysqlnd.so
mysqlnd_ms.enable = 1
mysqlnd_ms.ini_file = "/etc/mysqlnd_ms.json"
当然マスタとスレーブの定義が必要となるので、
mysqlnd_ms.jsonに、マスタとスレーブのサーバを定義する(jsonで)
サンプル実行
<?php // MySQLに接続(zzzはデータベース名) $mysqli = new mysqli("myapp", "user1", "pass1", "zzz"); // 接続できなければエラーメッセージを出力して停止 if (mysqli_connect_errno()) die(sprintf("[%d] %s\n", mysqli_connect_errno(), mysqli_connect_error())); // マスター側にtestテーブルを作成 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); } // ちなみにクエリーログを確認するとCREATE/UPDATEは、マスターで実行されています // SELECT文を発行。これはスレーブ側に振られているはず 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']); } // MySQLとの接続を切る $mysqli->close(); // ちなみにクエリーログを確認するとSELECT文は、スレーブで実行されています ?>
etcの設定ファイルに、以下を設定してログを確認できるようにする
今後の課題