MySQL主从复制

1、主从复制介绍
1)基本原理

slave会从master读取bin-log来进行数据同步
MySQL复制过程分成三步:
1)master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events。
2)slave将master的binary log events拷贝到它的中继日志(relay log)。
3)slave重做中继日志中的事件,将改变应用到自己的数据库中。MySQL复制是异步且串行化的。
总结一张图(网上盗的)
在这里插入图片描述

2)基本原则

1、每个slave只有一个master
2、每个slave只能有一个唯一的服务器ID
3、每个master可以有多个salve

2、主从复制配置

我使用腾讯云的云数据库作为主机,自己的linux作为从机
MySQL版本一致且后台以服务运行,主从都配置在[mysqld]节点下,都是小写

1)主机修改my.ini配置文件

1、确认主机服务器唯一ID
server-id=1,这里的序号随意,不一定要是1。
查看server_id,也可能是server-id

show variables like '%server_id%';

在这里插入图片描述
2、启用二进制日志
查看是否已经开启

show variables like '%log_bin%';

在这里插入图片描述
3、read-only=0
主机,读写都可以
4、启用错误日志(可选)
log-err=自己本地的路径/mysqlerr
5、根目录(可选)
basedir=自己本地路径
6、临时目录(可选)
tmpdir=自己本地路径
7、数据目录(可选)
datadir=自己本地路径/Data
8、设置不需要复制的数据库(可选)
binlog-ignore-db=mysql
如果不开启,代表以后新创建的数据库都要复制。
9、设置需要复制的数据库(可选)
binlog-do-db=需要复制的主数据库名字

2)从机修改my.cnf配置文件

1、确认从机服务器唯一ID
2、启用二进制日志(可选)
重启主机和从机

3、建立主从关系
1)主机建立账户授权slave
grant replication slave on *.* to 'zhangsan'@'从机数据库ip' identified by '123456';
flush privileges; 

从机数据库ip可以是%,意思是所有ip都可以登陆。
查询master的状态

show master status;

表示,从机要从二进制文件mysql-bin.000005的第64162055位置开始复制。
在这里插入图片描述
记录File和Position的值,接下来就不用管主机了。

2)从机配置需要复制的主机

从机执行

change master to
master_host = '主机ip',
master_port = 端口号,
master_user = 'zhangsan',
master_password = '123456',
master_log_file = '之前的File',
master_log_pos = 之前的Position值;

例如

change master to
master_host = 'cdb-6lyf7c.cd.tencentcdb.com',
master_port = 3306,
master_user = 'zhangsan',
master_password = '123456',
master_log_file = 'mysql-bin.000005',
master_log_pos = 64162055;

执行

start slave;
show slave status\G

当出现这两个参数都是Yes,则说明主从配置成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在这里插入图片描述

3)常见错误

如果出现这种情况Slave_IO_Running: NO
在这里插入图片描述
不着急,先停用slave

stop slave;

查看MySQL的日志,找到错误

vim /var/log/mysqld.log 

在这里插入图片描述
可以看到GTID_MODE主机和从机不一致。解决方法
先查看主机

show variables like '%gtid%';

在这里插入图片描述
可以去查看下从机的,这里我直接通过my.cnf打开从机的这两个选项。
vim /etc/my.cnf
添加
enforce_gtid_consistency=on
gtid_mode=on
保存,重启从机MySQL。
再次执行,这里需要重新查看下主机的File和Position

change master to
master_host = 'cdb-6lyf7c.cd.tencentcdb.com',
master_port = 3306,
master_user = 'zhangsan',
master_password = '123456',
master_log_file = 'mysql-bin.000005',
master_log_pos = 64162055;
start slave;
show slave status\G

可以看到一切OK了。
在这里插入图片描述
如果执行change master to出现这个报错,先得把slave停用先。
在这里插入图片描述

4、测试

主机创建数据库和表

create database test;
use test;
create table dog(name varchar(10));

从机查看在这里插入图片描述
在这里插入图片描述
一切OK

5、总结

最后,配置主从并不难,我这里使用的是腾讯云,不能打开my.conf这样的配置文件进行修改MySQL配置,所以都是从机修改,最后也可以达到目的。
遇到问题的时候,记得打开日志查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值