大型网站为了缓解大量的并发访问,可以在网站实现分布式负载均衡,但这是远远不够的。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,大量的数据库连接操作可能导致数据库的崩溃,如果发生数据丢失事故,后果更是不堪设想。这时候,我们会考虑如何减少数据库的压力,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached;如果资金丰厚的话,我们也可以架设服务器集群,来分担主数据库的压力。今天我们利用MySQL主从配置,可以实现读写分离,从而减轻数据库的压力。
概述:搭设一台Master服务器(CentOS6系统,ip:10.139.8.39),搭设一台Slave服务器(CentOS6系统,ip:10.139.8.40)
原理:主服务器(Master)负责网站NonQuery操作,从服务器负责Query操作,用户可以根据网站功能模特性块固定访问Slave服务器,或者自己写个池或队列,自由为请求分配从服务器连接。主从服务器利用MySQL的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。
具体实现:
1、在主从服务器上都装上MySQL数据库;
2、配置Master主服务器:
(1)找到MySQL安装文件夹修改my.cnf文件。我们只要启动二进制日志log-bin就可以了。
在[mysqld]下面增加下面几行,然后重启MySQL数据库。
[mysqld]
log-bin=mysql-bin
server-id=1 //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号
(2)
在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。
mysql>create user repl; //创建新用户
//repl用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为mysql。说明一下192.168.0.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.0.0-192.168.0.255的Server都可以以repl用户登陆主服务器。当然你也可以指定固定Ip。
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'mysql';
(3) 查看日志:
3、Slave从服务器(Ubuntu)
(1)找到MySQL安装文件夹修改my.cnf文件,并在[mysqld]下面增加下面几行,并重启MySQL服务。
[mysqld]
server-id=2
(2)连接master:
mysql>CHANGE MASTER TO
>MASTER_HOST='10.139.8.39',
>MASTER_USER='repl',
>MASTER_PASSWORD='Rep@1234',
>MASTER_LOG_FILE='mysql-bin.000004',
>MASTER_LOG_POS=730;
(3)启动Slave
mysql>start slave;
(4)查看是否连接成功
mysql>show slave status \G;
至此所有配置都完成了,这时候我们可以在MasterMySQL中进行测试了,因为我们监视的是Master MySQL所有操作日志,所以,任何改变主服务器数据库的操作,都会同步到从服务器上。