首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

mysql读写分开

2012-07-27 
mysql读写分离近来公司做了一个计费系统,每天产生的CDR数据较多,数据读写要求比较高,在此基础上,采用了数

mysql读写分离

近来公司做了一个计费系统,每天产生的CDR数据较多,数据读写要求比较高,在此基础上,采用了数据读写分离策略,来缓解数据库的压力。

应用环境

1、mysql-proxy,采用了开发框架amoeba,mysql-proxy负责管理client实际访问database的路由策略,实现数据的读写分离。

2、数据库集群环境,database集群采用了mysql的master-slave的replication方案。

3、客户端的应用程序,基于c3p0连接mysql-proxy。


结构示意图


mysql读写分开
?

实战

一、搭建mysql的master-slave环境

1、分别在192.168.1.132(master)和192.168.1.128(slave)安装mysql数据库,本实例在CentOS5.3的环境下,mysql数据库为mysql-5.1.51.tar.gz版本。

2、配置master

??? a、修改master的/etc/my.cnf文件,添加

????????? log-bin=mysql-bin????????????????????????????????????????????? #slave会基于此log-bin来做replication
????????? server-id=1??????????????????????????????????????????????????????? #master的标示
????????? binlog-do-db = billing???????????????????????????????????????? #用于master-slave的具体数据库

?

????b、开启mysql的日志文件,方便排错(可选)

????????? log-error=/usr/local/mysql/log/error.log?????????????????????? #错误日志?
????????? log=/usr/local/mysql/log/mysql.log?????????????????????????????? #查询日志
????????? long_query_time=2??????????????????????????????????????????????????????#慢查询日志,指执行超过多久的sql会被log下来,这里是2秒
????????? log-slow-queries=/usr/local/mysql/log/slowquery.log??#将查询返回较慢的语句进行记录

??? c、为slave添加一个replication用户,授权

???????? mysql>grant replication slave on *.* to repl@192.168.1.128 identified by '123456'

??? d、重启mysql服务,查看master的状态

destroy-method="close"> 
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://192.168.1.120:8066/billing" />
<property name="user" value="root" />
<property name="password" value="123abc" />
<property name="minPoolSize" value="1" />
<property name="maxPoolSize" value="1" />
<property name="maxIdleTime" value="1800" />
<property name="acquireIncrement" value="1" />
<property name="maxStatements" value="0" />
<property name="initialPoolSize" value="1" />
<property name="idleConnectionTestPeriod" value="1800" />
<property name="acquireRetryAttempts" value="6" />
<property name="acquireRetryDelay" value="1000" />
<property name="breakAfterAcquireFailure" value="false" />
<property name="testConnectionOnCheckout" value="true" />
<property name="testConnectionOnCheckin" value="false" />
</bean>

?

b、测试插入数据

Hibernate:     select        this_.id as id6_0_,        this_.name as name6_0_,        this_.password as password6_0_     from        tf_user this_

?

查看slave日志文件

写道110513 12:00:11 5 Query SELECT @@session.tx_isolation
5 Query select this_.id as id6_0_, this_.name as name6_0_, this_.password as password6_0_ from tf_user this_

?

综上所述,一个简单的mysql读写分离项目已经完成。

1 楼 oolala 2011-12-13   已经在生产环境了吗?

热点排行