MySQL主从复制介绍及搭建步骤

本文详细介绍了MySQL的主从复制,包括复制原理、优势及搭建步骤。主从复制能实现数据的实时同步,提升系统可用性和读写分离。在主库上执行更新,从库用于查询,减轻主库压力,并可在从库上进行备份。搭建过程中涉及配置文件修改、权限授权及同步状态检查等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主从复制

一、复制概述

复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行,从而使得从库和主库的数据保持同步

MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。

二、复制原理

MySQL的主从复制原理如下:

  • Master主库在事务提交时,会把数据变更记录在二进制日志文件 Binlog 中保存
  • 主库推送二进制日志文件中的日志事件到从库的中继日志 Relay Log
  • slave从库重新执行中继日志中的事件,将数据同步到自己的服务器
image-20210618170706714

三、复制优势

MySQL主从复制的优点主要包含以下三个方面:

  • 主库出现问题,可以快速切换到从库提供服务

  • 在从库上执行查询操作,在主库上执行更新操作,实现读写分离,降低主库的访问压力

  • 在从库上执行备份,以避免备份期间影响主库的服务

四、搭建步骤

首先关闭主从结构中的防火墙:

image-20210618145141982

1. master

1) 在master 的配置文件 /usr/my.cnf 中,配置如下内容:

#服务ID,保证整个集群环境中唯一
server-id=1

#binlog日志的存储路径和文件名
log-bin=/var/lib/mysql/mysqlbin

#是否只读,1代表只读, 0代表读写
read-only=0

#忽略的数据, 指不需要同步的数据库(系统库无需同步)
binlog-ignore-db=mysql

2) 执行完毕之后,需要重启MySQL:

service mysql restart;

3) 创建同步数据的账户,并且进行授权操作:

#授予jaychou用户在所有数据库的所有表上主从复制的权限
grant replication slave on *.* to 'jaychou'@'192.168.192.131' identified by '密码';

#刷新权限列表
flush privileges;

4) 查看master状态:

show master status;
image-20210618171407964

字段含义:

File : 从哪个日志文件开始推送日志文件 
Position : 从该日志文件的哪个位置开始推送日志
Binlog_Ignore_DB : 指定不需要同步的数据库

2. slave

1) 在 slave 端配置文件中,配置如下内容:

#mysql服务端ID,唯一
server-id=2

#指定binlog日志
log-bin=/var/lib/mysql/mysqlbin

2) 执行完毕之后,需要重启MySQL:

service mysql restart;

3) 执行如下指令 :

#指定当前从库对应的主库的IP地址,用户名,密码,从哪个日志文件开始的哪个位置开始同步推送日志
change master to master_host= '192.168.192.130', master_user='jaychou', master_password='密码', master_log_file='mysqlbin.000001', master_log_pos=413;

4) 开启同步操作:

start slave; #开启同步
show slave status; #查看状态
image-20210618171652389

5) 如果想要停止同步,执行停止同步操作:

stop slave;

3. 验证同步操作

1) 在主库中创建数据库,创建表,并插入数据 :

create database db01;

user db01;

create table user(
    id int(11) not null auto_increment,
    name varchar(50) not null,
    sex varchar(1),
    primary key (id)
)engine=innodb default charset=utf8;

insert into user(id,name,sex) values(null,'Tom','1');
insert into user(id,name,sex) values(null,'Trigger','0');
insert into user(id,name,sex) values(null,'Dawn','1');

2) 在从库中查询数据,进行验证 :

在从库中,可以查看到刚才创建的数据库:

image-20210618171740621

在该数据库中,查询user表中的数据:

image-20210618171812772

也就是说,此时主节点的内容一旦有变更,就会同步到从节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nice2cu_Code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值