MySQL代理重定向读/写

时间:2015-02-12 09:42:02

标签: mysql codeigniter database-replication mysql-proxy

我们有一个系统,我们有一个主/多个奴隶。

目前一切都发生在Master上,而奴隶只是在这里进行备份。

我们使用Codeigniter作为开发平台。

现在我们决定使用Reads的Slave和Write查询的Master。

有人告诉我,如果不修改源代码,这是不可行的,因为代理无法知道查询的类型。

任何想法如何继续这样做而不会对完美工作的系统造成太大的损害......

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

我还在寻找一些东西,几个月前我做了类似的事情,但我添加了3个带有主奴隶mysql服务器的web服务器,第一个启用mod_proxy的web服务器重定向请求读写服务器所有请求都将来到这个服务器,如果发送,放入或删除请求到服务器它将去写服务器,所有获取或正常请求将去读取服务器

在这里你可以找到我使用的mod_proxy设置

http://pastebin.com/a30BRHFq

在这里,您可以阅读有关负载平衡的信息 http://www.rackspace.com/knowledge_center/article/simple-load-balancing-with-apache

仍然在寻找更好的解决方案,而且涉及的硬件更少

答案 2 :(得分:1)

通过CI找出另一个解决方案,在database.php文件中创建两个数据库连接保存mysql服务器作为默认数据库连接和其他连接只写服务器

你可以使用这个基础模型扩展

https://github.com/jamierumbelow/codeigniter-base-model

您需要使用此模型扩展模型,并且需要使用此扩展模型,它具有插入,更新,删除和获取查询之前和之后的回调功能,只需要添加一个自定义方法或回调change_db_group < / p>

//this method in MY_Model    
function change_db_group{
   $this->_database = $this->load->database('writedb', TRUE)
}

没有您的示例模型

class Example_Model extends MY_Model{

  protected $_table = 'example_table';
  protected $before_create = array('change_db_group');
  protected $before_update = array('change_db_group');
  protected $before_delete = array('change_db_group');

}

在执行插入,更新或删除查询之前,将更改数据库连接