1. 传统主从复制的基本原理:
1)、Mysql Slave端的IO进程连接上Master,向Master请求指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2)、Master接收到来自Slave的IO进程的请求后,负责复制的IO进程根据Slave的请求信息,读取相应日志内容,返回给Slave 的IO进程。并将本次请求读取的bin-log文件名及位置一起返回给Slave端。
3)、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master"我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我";
4)、Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
简单来说就是:
主:I/O进程
从:I/O进程 从服务器通过I/O进程跟主服务器的I/O进程通信将主服务器的BINLOG日志同步过来,并且根据BINLOG日志的内容通过SQL进程往从库写数据。
2.主从复制的环境配置:
环境:centos7u4
master 10.0.0.131
slave 10.0.0.130
修改主机名称 master和slave
域名解析
[root@master ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.131 master
10.0.0.130 slave
关闭selinux和防火墙
# setenforce 0
# systemctl stop firewalld
确保时间一致
ntpdate ntp1.aliyun.com
下载并安装启动Mysql5.7(所有机器都做)
master配置
# vim /etc/my.cnf
[mysqld]
log-bin=/var/lib/mysql/master
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1
授权远程账户
mysql> grant replication slave,super,reload on *.* to slave@'%' identified by '密码';
slave配置
# vim /etc/my.cnf
[mysqld]
log-bin=/var/lib/mysql/slave
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1
重启master和slave上的mysql
修改完配置文件后一定要重启对应服务!
# systemctl restart mysqld
再次配置slave
登录mysql
# mysql -u用户 -p密码
mysql > change master to master_host='master',master_user='slave',master_password='123',master_auto_position=1;
mysql > start slave; //启动slave角色
mysql > show slave status\G //查看状态
执行查看状态命令后返回如下
其中 Slave_IO_Running: Yes
Slave_SQL_Running: Yes 两项结果为yes则为成功
测试实验结果:
在主服务器上写入数据,在从服务器上查看,如果能在从上看到数据,则成功!
同步的数据只能是设置完主从复制之后插入的数据,之前的数据不会被同步
创建库来进行实验
可以看到左边主机master创建一个名为TXT的库,同时在右边从机slave中执行show databases;看到同时生成TXT库
主从复制完成