主动复制原理图:主库负责写,从库负责读,从库需要不断获取主库数据更新到从库。(存在延时)
我们知道主库添加数据是要写逻辑日志binlog,从库通过 I/O进程获取主库的binlog文件,然后写入到中转日志文件 Relay log,在从Relay log 中恢复数据。
134 主服务器配置,首先修改 mysql 配置文件 vi /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
设置需要复制的数据库,从库是从接入点开始复制的,主从架构未搭建完成前如果创建数据库,导致搭建好以后备库没有,执行SQL语句就会出现问题,所以在搭建主从复制架构以后,再次执行创建库的语句
binlog-do-db=testdb
#设置logbin格式,日志格式有三种,分别是 satement,row,mined,后面博客中我会详解这三种格式的优缺点
binlog_format=STATEMENT
133 从服务器配置,修改 mysql 配置文件 vi /etc/my.cnf
#从服务器唯一ID
server-id=2
#启用中转日志
relay-log=mysql-relay
主从配置文件生效,重启主从服务器,执行 systemctl restart mysqld
命令,并通过命令systemctl status mysqld
查看服务器状态
主从服务器分别开启3306端口,并关闭防火墙
# 查看防火墙状态
systemctl status firewalld
# 开启防火墙
systemctl start firewalld
# 开启3306端口
firewall-cmd --permanent --zone=public --add-port=3306/tcp
# 重新加载防火墙
firewall-cmd --reload
# 查看防火墙是否启动成功
firewall-cmd --zone=public --query-port=3306/tcp
# 关闭防火墙
systemctl stop firewalld
在134 主服务器授予133 从服务器访问权限
# 登陆134 mysql
mysql -uroot -proot
# 执行授权命令
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
# 查询master的状态
show master status;
133 从机复制134 主机,登陆从机 mysql 执行复制命令
# 停止从服务器复制功能
stop slave;
# 重置主从
reset master;
执行复制命令,命令的参数是我们上图获取到的master 信息
CHANGE MASTER TO MASTER_HOST='192.168.183.134',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=154;
分别执行 启动复制命令start slave;
和查看服务器状态命令 show slave status\G;
134 主服务器创建 testdb 数据库,创建表 user ,并执行插入语句
CREATE DATABASE testdb;
use testdb;
CREATE TABLE user(id INT,NAME VARCHAR(20));
INSERT INTO user VALUES(1,'fengjiaixng');
select * from user;
133 从服务器查看是否复制成功
如果停止复制,则执行 stop slave;
命令,如果重新配置主从 分别执行 stop slave;
和reset master;