[转帖]Symfony Doctrine MySQL Replication_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3316 | 回复: 0   主题: [转帖]Symfony Doctrine MySQL Replication        下一篇 
kyle
注册用户
等级:新兵
经验:31
发帖:58
精华:0
注册:2011-12-6
状态:离线
发送短消息息给kyle 加好友    发送短消息息给kyle 发消息
发表于: IP:您无权察看 2014-12-2 14:45:40 | [全部帖] [楼主帖] 楼主

网站架构加入mysql读写分离,是流行的做法。下面记录一下如何如何让采用symfony框架的产品加入mysql读写分离,我们使用 doctrine实现数据操作。

在database.yml里输入:

all:
master:
class: sfDoctrineDatabase
param:
dsn: ‘mysql:host=localhost;dbname=mydb’
username: master
password: master
option: charset=utf8
slave:
class: sfDoctrineDatabase
param:
dsn: ‘mysql:host=localhost;dbname=mydb’
username: slave
password: slave
option: charset=utf8


master和slave的前后顺序取决于你的具体需求,doctrine数据模型默认读取最后一个,由于一般网站大部分操作都是读操作,所以我们 把slave写在后面了。

具体数据操作代码如下:

//插入
$add = new Tblusers();
$add->username = “username”;
$add->password = “passwd”;
$add->save(Doctrine_Manager::getInstance()->getConnection(‘master’));
//编辑
$query = Doctrine_Query::create(Doctrine_Manager::getInstance()->getConnection(‘master’))
->update(‘Tblusers a’)
->set(‘a.username = ?’,”username”)
->where(‘a.uid = ?’,2)
->execute();
//显示
$rs = Doctrine_Query::create()
->from(‘Tblusers a’)
->where(‘a.username = ?’,”username”)
->fetchArray();
//删除
$del = Doctrine_Query::create(Doctrine_Manager::getInstance()->getConnection(‘master’))
->delete()
->from(‘Tblusers a’)
->where(‘a.username = ?’,”username”)
->execute();


除此以外,Doctrine官方网站上的cookbook还介绍了通过添加自定义类(继承自Doctrine_Query)来实现。

mysql服务器的主从配置,这样可以实现读写分离,也可以在主库挂掉后从备用库中恢复

需要两台机器,安装mysql,两台机器要在相通的局域网内

主机A: 192.168.1.100

从机B:192.168.1.101

可以有多台从机

1、先登录主机 A

mysql>GRANT REPLICATION SLAVE ON *.* TO ‘backup’@’192.168.1.101‘ IDENTIFIED BY ‘123456’;


赋予从机权限,有多台丛机,就执行多次

2、 打开主机A的my.cnf,输入

server-id               = 1    #主机标示,整数
log_bin                 = /var/log/mysql/mysql-bin.log   #确保此文件可写
read-only              =0  #主机,读写都可以
binlog-do-db         =test   #需要备份数据,多个写多行
binlog-ignore-db    =mysql #不需要备份的数据库,多个写多行


3、打开从机B的my.cnf,输入

server-id               = 2
log_bin                 = /var/log/mysql/mysql-bin.log
master-host     =192.168.1.100
master-user     =backup
master-pass     =123456
master-port     =3306
master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
replicate-do-db =test #只复制某个库
replicate-ignore-db=mysql #不复制某个库


4、同步数据库

不用太费事,只把主从库都启动即可自动同步,如果不嫌麻烦的话可以把主库的内容导出成SQL,然后在从库中运行一遍

5、先重启主机A的mysql,再重启从机B的mysql

6、验证

在主机A中,mysql>show master statusG;

在从机B中,mysql>show slave statusG;

能看到大致这些内容

File: mysql-bin.000001
Position: 1374
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql


可以在主机A中,做一些INSERT, UPDATE, DELETE 操作,看看主机B中,是否已经被修改。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论