一:产生原因
与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;