概述
在开发的时候,所有的数据写入的时候,都往主服务器写入,然后通过mysql底层的主从复制的功能,将数据同步分发到从属服务器上,这种一主多从的方案是最常见的,其中一台服务宕机了,其它的可以当作备用机
除此之外,还有两主多从,多主多从等,都是在这个基础上进行扩展的。
配置
主服务器
首先给主服务器配置,配置后重启服务器:
[mysqld]
port=3310
# 这个每个服务之间不要重复就好
server-id=1000
# 二进制日志名称,不同实例之间,日志文件名称是可以重复的,因为是存储在各自的data目录下
log-bin=mysql-bin
创建一个用户,用于从服务器连接,ip和账号以及密码可以自行设置:
create user 'slave'@'192.168.1.1' identified by 'slave';
然后给这个账号设置权限
grant replication slave on *.* to 'slave'@'192.168.31.156';
flush privileges;
最好我们看下主服务器有没有设置成功,执行完后输出如下记录:
show master status;
file字段是mysql的二进制日志文件,通过一般的文本编辑器是打不开的,默认是在data目录下,可以通过以下sql查看二进制日志的内容:
show binlog events in 'mysql-bin.000001';
这个日志内容,记录了执行过的sql语句,主从复制的原理很简单,从服务器只要从主服务器的出现过的sql记录,执行一遍即可。Pos字段就是每条日志的编号,是唯一的,从小到大排列。
从服务器
对从服务器进行配置:
[mysqld]
port=3311
# 这个每个服务之间不要重复就好
server-id=1001
# 二进制日志名称
log-bin=mysql-bin
指定从服务器指向哪个主服务器:
change master to
master_host = '192.168.1.1'
,master_port=3310
,master_user='slave'
,master_password='slave'
,master_log_file='mysql-bin.000001'
,master_log_pos=951; -- 从951编号后产生的sql日志,都同步复制,可以在主服务器上执行show master status查看位置
开始主从复制
start slave;
查看从服务器的状态
show slave status;
上图是从服务器的一些概要信息,其中有几个字段比较重要:
- Slave_IO_Runing,这个代表是主从是否通信正常
- Slave_SQL_Runing,这个代表是从服务器的sql是否运行正常