Mysql的主从复制与读写分离
Mysql是通过主从复制的方式来同步数据的,再通过读写分离来提升数据库的并发负载能力
MySQL 支持单向、异步复制
复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引 以跟踪日志循环。这些日志可以记录发送到从服务器的更新
当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。 从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新
• 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到
从服务器作为份。
• 通 过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的
客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负
荷。但 修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同
步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。
• 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务
器。在备份过程中主服务器可以继续处理更新。
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
通过代码程序实现读写分离在现实中对代码改动较大,一般考虑使用代理层
主从服务器不变,增加一台主机
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
bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/etc/mysql-proxy.conf
修改vim rw-splitting.lua
在server2和server3两台从机上授权
grant insert,select,update on *.* to [email protected]‘172.25.15.%’ identified by ‘westos’;