Es gibt nichts eingebaut in PHP zu handhaben. Sie müssen den Code selbst schreiben.
Der beste Ansatz wäre, den Datenbankzugriff zu abstrahieren und eine Klasse zu erstellen, die die Failover-Logik kapseln kann.
Hier ist ein Code, aus dem Stehgreif:
interface MySQL_Interface {
public function query($sql);
}
class MySQL_Concrete implements MySQL_Interface {
public function __construct($host, $user, $pass, $dbname) {
$this->_mysql = mysql_connect($host, $user, $pass) or throw Exception("Could not connect to server");
mysql_select_db($db, $this->_mysql) or throw Exception("Could not connect to database");
}
public function query($sql) {
return mysql_query($sql) or throw new Exception("Query failed");
}
}
class MySQL_Failover implements MySQL_Interface {
public function __construct(MySQL_Interface $one, MySQL_Interface $two) {
$this->_one = $one;
$this->_two = $two;
}
public function query($sql) {
try {
return $this->_one->query($sql);
} catch (Exception $e) {
return $this->_two->query($sql);
}
}
}
$db = new MySQL_Failover(
new MySQL_Concrete('host1', 'user', 'pass', 'db'),
new MySQL_Concrete('host2', 'user', 'pass', 'db')
);
$db->query('SELECT * FROM Users');
PS: ich etwas ganz von hier verlassen haben, ist es nicht wörtlich verwendet werden.
PPS: Ich würde wahrscheinlich besser sein, eine bestehende Datenbank-Abstraktions Bibliothek zu verwenden (Zend_Db, MDB2, ect) und deren Schnittstelle zu implementieren, anstatt Ihre eigene Ad-hoc-Lösung zu schaffen
MySQLProxy sieht vielversprechend aus. – Kev