1.背景介绍
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是 不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached,如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力。Ok切入今天微博主题,利用MySQL主从配置,实现读写分离,减轻数据库压力。这种方式,在如今很多网站里都有使用,也不是什么新鲜事情,今天总结一下,方便大家学习参考一下。
2.搭建环境
搭设一台Master服务器(win7系统,Ip:120.95.132.174),搭设两台Slave服务器(虚拟机——一台Ubuntu:120.95.132.228,一台 Window7)
3.主从复制原理
主服务器(Master)负责网站NonQuery操作,从服务器负责Query操作,用户可以根据网站功能模特性块固定访问Slave服务器,或者自己写个池或队列,自由为请求分配从服务器连接。主从服务器利用MySQL的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。
4.具体实现
在主从服务器上都装上MySQL数据库,windows系统安装的是mysql 5.7免安装版,Ubuntu可以选择免安装版和自动安装的版本,本人采用apt-get成功安装和配置mysql。安装步骤如下所示:
Ubuntu上安装MySQL非常简单只需要几条命令就可以完成。
- sudo apt-get install mysql-server
- apt-get isntall mysql-client
- sudo apt-get install libmysqlclient-dev//不必须
- apt-get install vim//Ubuntu中修改文档内容没有Vim,最好把Vim 装上,,不然估计会抓狂。Ubuntu中修改文档内容没有Vim,最好把Vim 装上,,不然估计会抓狂。
4.1 配置Master主服务器
(1)在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。
mysql>create user 'repl'@'120.95.132.%' IDENTIFIED BY 'mysql'; //创建新用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'120.95.132.%' ;
/*建议继续执行以下脚本验证效果*/
mysql> select user,host,password from mysql.user;//来自host这个地方的人,可以使用master机器上的一个user的账号
mysql>show grants for 'repl'@'120.95.132.%';//查看当前账户权限
/*如果没有授权,重新授权*/
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'120.95.132.%'
(2)找到MySQL安装文件夹修改my.Ini文件。 在[mysqld]下面增加下面几行代码:
server-id=1 //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号
log-bin=master-bin
log-bin-index=master-bin.index
(3)查看日志
mysql> SHOW MASTER STATUS;
(4)重启master服务
4.2 配置Slave服务器(Windows)
(1)找到MySQL安装文件夹修改my.ini文件,在[mysqld]下面增加下面几行代码
[mysqld]
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
(2)连接Master
mysql>change master to master_host='120.95.132.174', master_port=3306,master_user='repl',master_password='mysql', master_log_file='master-bin.000001',master_log_pos=0;
(3)重启MYSQL服务
(4)启动Slave:mysql>start slave;
4.3 配置Slave服务器(Ubuntu)
(1)找到MySQL安装文件夹修改my.cnf文件
sudo vi /etc/mysql/my.cnf
添加内容:
[mysqld]
port=3306
server_id=3
relay_log_index=slave-relay-bin.index
relay_log=slave-relay-bin
重启mysql服务
一、 启动方式
1、使用 service 启动:service mysql start
2、使用 mysqld 脚本启动:/etc/inint.d/mysql start
3、使用 safe_mysqld 启动:safe_mysql&
二、停止
1、使用 service 启动:service mysql stop
2、使用 mysqld 脚本启动:/etc/inint.d/mysql stop
3、mysqladmin shutdown
三、重启
1、使用 service 启动:service mysql restart
(2)连接master
change master to master_host='120.95.132.174', master_port=3306,master_user='repl',master_password='mysql', master_log_file='master-bin.000001',master_log_pos=0;
(3)启动slavestart slave
OK所有配置都完成了,这时候大家可以在Master Mysql 中进行测试了,因为我们监视的时Master mysql 所有操作日志,所以,你的任何改变主服务器数据库的操作,都会同步到从服务器上。创建个数据库,表试试吧。。
参考博文:
https://www.cnblogs.com/hellotracy/articles/5183057.html
https://www.cnblogs.com/alvin_xp/p/4162249.html