大型网站为了缓解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached,如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力。Ok切入今天的主题,利用MySQL主从配置,实现读写分离,减轻数据库压力。这种方式,在如今很多网站里都有使用,也不是什么新鲜事情,今天总结一下,方便大家学习参考一下。
概述:搭设一台Master服务器(虚拟机一台,centos系统,Ip:192.168.20.78),搭设一台Slave服务器(虚拟机一台,centos系统,Ip:192.168.20.161)
原理:主服务器(Master)负责网站NonQuery操作,从服务器负责Query操作,用户可以根据网站功能模特性块固定访问Slave服务器,或者自己写个池或队列,自由为请求分配从服务器连接。主从服务器利用MySQL的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。
1、在主从服务器上都装上MySQL数据库,版本最好保持一致
2、配置主服务器
(1)在master MySQL上创建一个用户‘repl‘,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。
mysql -uroot -p
mysql>create user repl; #创建新用户
mysql> GRANT REPLICATION SLAVE ON . TO ‘repl‘@‘192.168.20.%‘ IDENTIFIED BY ‘mysql‘; #repl用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为mysql。说明一下192.168.20.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.20.0-192.168.20.255的Server都可以以repl用户登陆主服务器。当然你也可以指定固定Ip。
mysql> flush privileges; #刷新权限
(2)找到MySQL安装文件夹修改my.cnf文件。mysql中有好几种日志方式,这不是今天的重点。我们只要启动二进制日志log-bin就ok。
vim /etc/my.cnf
在[mysqld]下面增加下面几行代码
server-id=1 #设置server-id
log-bin=master-bin #开启二进制日志
(3)查看master状态,记录二进制文件名(mysql-bin.000005)和位置(120)
3、配置从服务器
(1)修改MySQL配置
vim /etc/my.cnf
在[mysqld]下面增加
server-id=2 #设置server-id,必须唯一
(2)重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置)
mysql> CHANGE MASTER TO
-> MASTER_HOST=‘192.168.20.78‘,
-> MASTER_USER=‘rep1‘,
-> MASTER_PASSWORD=‘mysql‘,
-> MASTER_LOG_FILE=‘mysql-bin.000005‘,
-> MASTER_LOG_POS=120;
(3)启动slave同步进程
mysql>start slave;
(4)查看slave状态
当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。接下来就可以进行一些验证了,比如在主master数据库的test数据库的一张表中插入一条数据,在slave的test库的相同数据表中查看是否有新增的数据即可验证主从复制功能是否有效,还可以关闭slave(mysql>stop slave;),然后再修改master,看slave是否也相应修改(停止slave后,master的修改不会同步到slave),就可以完成主从复制功能的验证了。
还可以用到的其他相关参数:
master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:
# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game
原文地址:http://blog.51cto.com/13488828/2314366