主从复制

复制的基本原理

slave会从master读取binlog来进行数据同步

MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。

三步骤+原理图

mysql 主从 日志清理_mysql

MySQL复制过程分成三步:

1、master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events。

2、slave将master的binary log events 拷贝到它的中继日志(relay log)。

3、slave重做中继日志中的事件,将改变应用到自己的数据库中。MYSQL复制是异步的串行化的。

 

复制的基本原则

1、每个slave只有一个master

2、每个slave只能有一个唯一的服务器ID

3、每个master可以有多个salve

注意:复制的最大问题是 延时

一主一从常见配置

mysql版本一致且后台以服务运行

主从都配置在[mysqld]结点下,都是小写

准备工作

1.主从数据库版本最好一致

2.主从数据库内数据保持一致

主数据库:192.168.40.111  /linux

从数据库:192.168.40.112  /linux

第一步:主机修改my.cnf(或者my.ini)配置文件

找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/mysql/my.cnf,在[mysqld]部分插入如下信息:

#master ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库
binlog-ignore-db=mysql
#设置需要复制的数据库
binlog-do-db=mydb_210515
#设置logbin格式(默认STATEMENT)
binlog_format=STATEMENT

mysql 主从 日志清理_mysql 主从 日志清理_02

第二步:从机修改my.cnf(或者my.ini)配置文件

配置信息如下:

server-id=2
relay-log=mysql-relay

mysql 主从 日志清理_mysql_03

第三步:重启master 和 slave mysql服务

systemctl restart mysqld

注意:不管是windows 还是linux(systemctl stop firewalld) 建议关闭防火墙  

第四步:在master主机上建立账户并授权slave

授权:GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从服务器IP' identified by '密码';

use mysql
GRANT REPLICATION SLAVE ON *.* TO 'slave112'@'%' identified by 'Panghl$0';

 

mysql 主从 日志清理_数据库_04

查询master的状态

show master status;

mysql 主从 日志清理_mysql_05

注意:记录下File和Position的值

执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化!!!

第五步:在slave从机上配置需要复制的主机

修改auto.cnf中的UUID,保证唯一

- 编辑auto.cnf vim /var/lib/mysql/auto.cnf

-- 修改UUID的值 server-uuid=a402ac7f-c392-11ea-ad18-000c2980a208

-- 重启 service mysqld restart

如何重新配置:stop slave; reset master;

配置信息如下:

CHANGE MASTER TO MASTER_HOST='主机IP',
MASTER_USER='主机创建的用户名',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='File名字',
MASTER_LOG_POS=Position数字

mysql 主从 日志清理_二进制日志_06

启动slave从服务器复制功能

start slave;

mysql 主从 日志清理_二进制日志_07

查看主从是否搭建成功

show slave status\G

mysql 主从 日志清理_linux_08

mysql 主从 日志清理_linux_09

在主机新建库、新建表、insert记录,从机复制

create table test(
id int(10) PRIMARY KEY auto_increment,
t_name varchar(20)
)

insert into test values(null,'1');
insert into test values(null,'2');
insert into test values(null,'3');
insert into test values(null,'4');

mysql 主从 日志清理_二进制日志_10

如何停止从服务复制功能:

stop slave;

如何重新配置主从:

stop slave;   reset master;