mysql 主从 mix_mysql主从服务器配置

假如一个业务场景,测试后,读写比列为1:20,根据读写比例,合理设置优化方案。

读写比列:

写数据/读数据比例,    insert/update/delete    /  select

从“读写分离”概念推导实现基本要素:

一般来说,读服务器就是指写服务器的数据镜像。

从服务器端看:要有N台从服务器和主服务器保持数据一致。

从客户端看:比如有一条insert语句和一条select语句,

则要区分读/写语句,并且分别请求从/主服务器。

服务器端读写分离的具体技术

1:数据库集群技术

集群由3个概念

(1)sql节点    sql node

(2)数据节点    data node

(3)管理节点    ndb managerment

sql语句发送“1sql节点”,“1sql”节点发往“2数据节点”,再由3管理节点完成数据节点之间的同步。

集群技术相对复杂,至少有3种节点,4台服务器才能完成。

2,数据库复制

写/master(0)      同步        读/slave(1)

3,数据库复制replication的实现原理

(1)主服务器凡运行语句,都产生一个二进制日志 binlog

(2)从服务器不断读取主服务器的binlog

(3)从服务器读取到的binlog,转换为自身可执行的relaylog

(4)执行relaylog

4,实现步骤:

(1)首先确保主服务器打开二进制日志功能

这样,主服务器一旦有数据变化,立即产生二进制日志

(2)从服务器也需要开启二进制日志和relay日志功能

这样可以从主服务器读取binlog,并产生relaylog

(3)在主服务器建立一个从服务器的账号,并授予最高权限

(4)指定从服务器对应的主服务器,开启从服务器

具体实施

假如一台虚拟机xp,和一台linux

(1)在虚拟机xp下安装mysql作为从服务器

(2)在linux下编译mysql,作为主服务器

(3)保证xp与linux的3306端口互通

(4)配置主服务器,打开binlog

mysql>show master status;

Empty set (0.00 sec)

#开启二进制日志

log-bin=mysql-bin

#给服务器起一个唯一的id

serve-id=1

#指定日志格式

binlog-format=mixd/row/statement

重启mysql

mysql>show master status;

会多两个文件:mysql-bin.000001和mysql-bin.index

已经能够充当master服务器

5,配置从服务器打开binlog和relaylog

mysql>show slave status;

Empty set (0.00 sec)

[mysql]

#slave config

log_bin    =mysql-bin

server_id    =2

relay_log    =mysql-relay-bin

log_slave_updates    =1

read_only    =1

重启从服务器

6,在主服务器上创建相应的复制账号

mysql>grant replication slave,replication client

->on *.*

->to repl@'192.168.2.%' identified by '111111';

Query OK, 0 rows affected (0.02 sec)

mysql>flush privileges;

Query OK,0 rows affected (0.00 sec)

7,在从服务器通过语句指定要复制的主服务器(注意,可以一主多从,不可以一从多主)

mysql>change master to

->master_host='192.168.2.99',(主服务器ip)

->master_user='repl',

->master_password='111111',

->master_log_file='mysql-bin.000001',

->master_log_pos=0;

Query OK, 0 rows affected (0.08 sec)

8,启动从服务器功能

->start slave;

9,测试

如何在客户端应用的时候,路由语句

一般用两种方法

(1)直接在PHP的mysql类做判断,最简单,不用额外加软件

比如discuz论坛。

代码:

//下面这个mysql类,不仅仅是一个mysql类,还充当一个sql语句的路由功能。

class mysql{

$dbm=主服务器;

$dbs1=从服务器1;

$dbs2=从服务器2;

public function query(){

在query里面进行语句判断

分别连接不同的mysql服务器

}

}

new mysql

mysql->query();

(2)用集群中间件

比如官方的mysql_proxy,还有国产的中间件amoeba

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值