mysqli::disable_reads_from_master(), master, slave, как задать список слейвов?

AndreyKl

Новичок
mysqli::disable_reads_from_master(), master, slave, как задать список слейвов?

Доброго времени суток.

Я уже задавал подобный вопрос, но ответа не было(да и вопрос был более туманным чем сейчас), посему, модераторы, пожалуйста, не переносите топик в mysql-php. Тут вроде народу побольше, может быть кто подскажет.

Ситуация. База не вытягивает нагрузки. Есть возможность добавить сервер. Мне показалось что самый простой путь - настроить репликацию mysql и тем самым распределить нагрузку. Я настроил репликацию mysql master-slave (дело не шибко хитрое оказалось). Настроил и проверил. Репликация работает.

Осталось дело за малым. Есть код

PHP:
<?php

$db = new mysqli( '127.0.0.1', 'root', 'secr', 'base' );

$q = "SELECT s_email FROM Account";

if( $db->enable_rpl_parse() ) {
  echo "<br>rpl parser enabled<br>";
}
if( $db->disable_reads_from_master() ) {
  echo '<br>reads from master disabled<br>';
}


$stmt = $db->prepare( $q );
$stmt->execute();

$stmt->bind_result( $email );
echo '<table>';
while( $stmt->fetch() ) {
  echo "<tr><td>$email</td></tw>";
}
echo '</table>';


?>
Но он не обращается к слейву (смотрю по счётчику селектов на слейве). Видимо, это нормально, потому что не задано ни одного слейва (можно предположить что *_rpl_parse задействует какой-то автоматический механизм определения слейвов, но увы, я ничего этого не увидел). Вопрос, собственно: как задать слейв? Допустим, у меня слейв на 192.168.0.41...

Я не знаю что думать.

Приходит в голову лишь сделать несколько соединений и читать в нужный момент с нужного. Вроде такого:

PHP:
$slaves = array();

function get_round_robin_slave() {//просто пример..
global $slaves;
return $slave[0];
}

$master = new mysqli( '127.0.0.1', 'root', 'secr', 'base' );
$slaves[0] = new mysqli( '192.168.0.41', 'root', 'secr', 'base' );

$q = "SELECT s_email FROM Account";
$s = get_round_robin_slave();

$stmt = $s->prepare( $q );
$stmt->execute();

$stmt->bind_result( $email );
echo '<table>';
while( $stmt->fetch() ) {
  echo "<tr><td>$email</td></tw>";
}
echo '</table>';
Но мне думается должен быть способ использовать функции (dis|en)able_reads_from_master. Никто не посоветует? В мануале пусто. Гугл молчит.. видимо спрашивать не умею.

Спасибо.
 
Сверху