一:产生原因

与Nginx有异曲同工之妙,当如今服务器的高并发高访问量时势必对数据库进行频繁的连接,这样数据库将面临崩溃及数据丢失,这样后果不堪设想,如此运用主从复制,实现读写分离也就是改善的方法之一

 

二:原理

开启主库的执行日志功能,然后从库读取主库的日志信息,然后将主库执行过的SQL语句在从库上面执行一遍就做到主从分离,主从数据保持一直,备份数据的功能

简单说就是:两个数据库相连,数据相同一个为主---执行写操作,一个为从---执行读操作

 

三:优点

将读操作和写操作分离到不同的数据库上,避免主服务器出现性能瓶颈

 主服务器进行写操作时,不影响查询应用服务器的查询性能,降低阻塞,提高并发

数据拥有多个容灾副本,提高数据安全性,同时当主服务器故障时,可立即切换到其他服务器,提高系统可用性

 

四:实现

主服务器

一:在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。

1 mysql>create user repl; //创建新用户
2 //repl用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为mysql。说明一下192.168.0.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.0.0-192.168.0.255的Server都可以以repl用户登陆主服务器。当然你也可以指定固定Ip。
3 mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'mysql';

二:找到MySQL安装文件夹修改my.Ini文件。mysql中有好几种日志方式,这不是今天的重点。我们只要启动二进制日志log-bin就ok。

在[mysqld]下面增加下面几行代码

1 server-id=1   //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号
2 log-bin=master-bin
3 log-bin-index=master-bin.index

三:查看日志

mysql> SHOW MASTER STATUS;

重启服务器!

从服务器

一:找到MySQL安装文件夹修改my.ini文件,在[mysqld]下面增加下面几行代码

1 [mysqld]
2 server-id=2
3 relay-log-index=slave-relay-bin.index
4 relay-log=slave-relay-bin


重启MySQL服务

二:连接Master

change master to master_host='192.168.0.104', //Master 服务器Ip
master_port=3306,
master_user='repl',
master_password='mysql', 
master_log_file='master-bin.000001',//Master服务器产生的日志
master_log_pos=0;

(3)启动Slave

start slave;

 

 

4、Slave从服务器(Ubuntu)

(1)找到MySQL安装文件夹修改my.cnf文件,vim my.cnfs
(2) ./support-files/myql.server restart 重启MySQL服务 , ./bin/mysql 进入MySQL命令窗口
(3)连接Master

change master to master_host='192.168.0.104', //Master 服务器Ip
master_port=3306,
master_user='repl',
master_password='mysql', 
master_log_file='master-bin.000001',//Master服务器产生的日志
master_log_pos=0;

(4)启动Slave

start slave;