Mysql的主从复制与读写分离

Mysql主从复制(master-slave)与读写分离(mysql-proxy)
Mysql是通过主从复制的方式来同步数据的,再通过读写分离来提升数据库的并发负载能力
MySQL 支持单向、异步复制
复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引 以跟踪日志循环。这些日志可以记录发送到从服务器的更新
当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。 从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新
• 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到
从服务器作为份。
• 通 过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的
客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负
荷。但 修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同
步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。
• 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务
器。在备份过程中主服务器可以继续处理更新。
MySQL 提供了数据库的同步功能,这对我们实现数据库的冗灾、备份、恢复、负载均

衡等都是有极大帮助

Mysql的主从复制与读写分离

本机之前以使用过源码编译的mysql

 

一.mysql的主从复制

Mysql的主从复制:根据从服务器读取主服务器的binlog,根据binlog的记录更新数据库

主数据库服务器:172.25.15.1

从数据库服务器:172.25.15.2

 

在主服务器上,启动Mysql   /etc/init.d/mysql  start

登录   mysql  -uroot  -pwestos

授权给从服务器    grant replication  slave  on  *.*to [email protected]  identified  by  ‘westos’;

 

 

 

在从服务器上,配置从服务器

启动Mysql服务,然后登录

执行:change master tomaster_host=172.25.15.1, master_user=cyw,master_password=westos,master_log_file=mysql-bin.000005,master_log_pos=261;

正确执行后启动slave同步教程   start slave;

主从同步检查    show slave  status\G

 

如果主服务器上已存在应用数据,进行主从复制,需要做以下处理:

主数据库进行锁表操作,让数据不再进行写入动作   FLUSH TABLES WITH READ LOCK;

查看主数据库状态   show master  status;

记录下FILE及position的值  

取消主数据库锁定   UNLOCK TABLES;

 

 

二.Mysql的读写分离

Mysql的读写分离:在主服务器上写,在从服务器上读,让主数据库处理事物性查询,让从服务器处理select查询

可以基于程序代码实现,也可以基于中间代理层实现

中间代理有两个代表性程序:mysql-proxy   amoeba

 

 

通过代码程序实现读写分离在现实中对代码改动较大,一般考虑使用代理层

Mysql的主从复制与读写分离

主从服务器不变,增加一台主机

Server4做调度器   需要软件包mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
tar  zxf  mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
修改名称mv  mysql-proxy-0.8.5-linux-el6-x86-64bit  /usr/local/
进入cd /usr/local
制作软连接  ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit   mysql-proxy
进入cd mysql-proxy
创建一个目录mkdir  etc
进入cd etc
Vim mysql-proxy.conf

Mysql的主从复制与读写分离

bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/etc/mysql-proxy.conf

修改vim  rw-splitting.lua

Mysql的主从复制与读写分离

在server2和server3两台从机上授权
grant  insert,select,update  on  *.*  to  [email protected]‘172.25.15.%’ identified  by ‘westos’;