大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据 业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是 不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached,如果资 金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力。Ok切入今天微博主题,利用MySQL主从配置,实现读写分离,减轻数据库压力。
概述:搭设一台Master服务器(win7系统,Ip:192.168.1.4),搭设两台Slave服务器(虚拟机——两台CentOS 192.168.248.128,192.168.248.129)
从数据库版本一定要高于等于主数据库的版本
原理:主服务器(Master)负责网站NonQuery操作,从服务器负责Query操作,用户可以根据网站功能模特性块固定访问Slave服务 器,或者自己写个池或队列,自由为请求分配从服务器连接。主从服务器利用MySQL的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器 响应获取同步数据库。
1、配置Master主服务器
(1)在Master MySQL上创建一个用户‘yxue’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。
mysql>create user yxue; //创建新用户
//yxue用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为root。说明一下192.168.1.%,这个配置是指明yxue用户所在服务器,这里%是通配符,表示192.168.1.0-192.168.1.255的Server都可以以yxue用户登陆主服务器。当然你也可以指定固定Ip。
mysql> GRANT REPLICATION SLAVE ON *.* TO 'yxue'@'192.168.1.%' IDENTIFIED BY 'root';
//使修改生效
mysql>FLUSH PRIVILEGES;
(2)找到MySQL安装文件夹修改my.Ini文件。mysql中有好几种日志方式,这不是今天的重点。我们只要启动二进制日志log-bin就ok。
在[mysqld]下面增加下面几行代码
server-id=1 #设置服务器id,为1表示主服务器
log-bin=master-bin #启动MySQ二进制日志系统
log-bin-index=master-bin.index
binlog-do-db=cjia_db #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-ignore-db=mysql #不同步mysql系统数据库
(3)重启MySQL服务 , 查看日志
mysql> SHOW MASTER STATUS \G;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 1285 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注意:这里记住File的值:master-bin.000001和Position的值:1285,后面会用到。
2、Slave从服务器(CentOS)
(1)找到MySQL安装文件夹修改etc/my.cnf文件,vim my.cnf,在[mysqld]部分添加下面内容
server-id=2 #其值为2,表示为从数据库
log-bin=mysql-bin #启动MySQ二进制日志系统replicate-do-db=cjia_db #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
replicate-ignore-db=mysql #不同步mysql系统数据库
:wq! #保存退出
(2)重启MySQL.注意:MySQL 5.1.7版本之后,已经不支持把master配置属性写入my.cnf配置文件中了,只需要把同步的数据库和要忽略的数据库写入即可。
(3)运行下列命令
mysql -uroot -p #进入MySQL控制台,输入密码进入。
slave stop; #停止slave同步进程
CHANGE MASTER TO MASTER_HOST='192.168.1.4',MASTER_PORT=3306,MASTER_USER='yxue',MASTER_PASSWORD='root',MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=1285; #执行同步语句
slave start; #开启slave同步进程
(4)SHOW SLAVE STATUS \G; #查看slave同步信息
注意查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上这两个参数的值为Yes,即说明配置成功!
(5)重启MySQL.