首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP是否具有从一个数据库服务器故障转移到另一个数据库服务器的内置机制?

问PHP是否具有从一个数据库服务器故障转移到另一个数据库服务器的内置机制?
EN

Stack Overflow用户
提问于 2008-10-10 14:18:54
回答 4查看 2.4K关注 0票数 5

我发现了这个:

http://www.evolt.org/failover-database-connection-with-php-mysql

和类似的例子。但是有没有更好的方法呢?

我的想法类似于MS SQL Native Client中的Automatic Failover Client。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-10 14:29:40

传统的做法是在系统级别处理故障转移策略;这样,所有应用程序都可以享受到一个健壮的环境。

我想参考一下MySQL failover strategy和MySQL proxy。后者描述了一个可以执行负载平衡和故障转移的MySQL实用程序,而且似乎很容易设置。

这不是问题的答案,但它是处理故障转移的更常见的解决方案。

票数 8
EN

Stack Overflow用户

发布于 2008-10-10 15:21:14

在PHP中没有内置的东西来处理这个问题。你必须自己写代码。

最好的方法是抽象您的数据库访问,并创建一个可以封装故障转移逻辑的类。

下面是一些现成的代码:

代码语言:javascript
复制
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');

附言:我在这里留下了相当多的东西,它不能一字不差地使用。

PPS:我最好使用现有的数据库抽象库(Zend_Db、MDB2等)并实现它们的接口,而不是创建自己的即席解决方案

票数 3
EN

Stack Overflow用户

发布于 2008-10-10 14:28:37

不,它没有内置这个。我认为一个简单的方法是使用MySQL Proxy。否则,但是应用程序中的逻辑(if (fails) { connect to another }),但在性能方面并不是很好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/191528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档