欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > MySQL:运维管理-主从复制

MySQL:运维管理-主从复制

2025/9/9 11:23:27 来源:https://blog.csdn.net/jhgfvjfggff_fds_f/article/details/142048458  浏览:    关键词:MySQL:运维管理-主从复制

目录

    • 一、主从复制的概述
    • 二、主从复制的工作原理
    • 三、搭建主从复制的结构
      • 3.1 环境准备
      • 3.2 搭建配置(主库配置)
      • 3.3 搭建配置(从库配置)
      • 3.4 测试


在这里插入图片描述

一、主从复制的概述

主从复制是指将主数据库中的DDL和DML操作的二进制文件保存到本地,然后将本地的二进制文件传递到从数据库中,从数据库重新执行二进制文件(重做),从而保证主库和从库的数据一致性。
MySQL支持一台主库向多台从库进行复制,从库也可以当做其他从数据库的主库,实现链状复制。

MySQL主从复制的优点:

  • 当主库出现问题时,可以快速的切换到从数据库。
  • 实现读写分离,主从负责DML,从库负责DDL,降低主库压力。
  • 可以在从库中进行数据备份,以避免在备份期间影响主库服务。

主库叫做Master,从库叫做Slave

二、主从复制的工作原理

在这里插入图片描述

  1. Master主库在提交事务时(DML),会把数据变更记录在二进制日志Binlog中。
  2. 从库通过IOthread读取主库中的二进制日志文件Binlog,写入到从库的中继日志Relay Log。
  3. Slave通过SQLthread读取中继日志并重做日志中的事件,将改变反应到自己的数据库中。

三、搭建主从复制的结构

3.1 环境准备

在这里插入图片描述

  1. 开放指定端口或者直接关闭防火墙
  2. 在两台电脑上都安装好MySQL数据库,并完成基础的初始化做准备工作。

3.2 搭建配置(主库配置)

  1. 修改配置文件/etc/my.cnf
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/soft/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true# mysql服务器ID,保证整个集群环境中的唯一性,默认为1
server-id=1
# 是否只读 1=只读 0=读写
read-only=0
# 忽略的数据,指不需要同步的数据库
# binlog-ignore-db=mysql
# 指定同步的数据库
# binlog-do-db=db01log-bin=mysql-bin # 开启二进制日志server-uuid=85dba00a-e0ef-11e9-b341-000c29812345
  1. 重启MySQL服务器
systemctl restart mysqld
  1. 查看MySQL服务状态
systemctl status mysqld
  1. 登录MySQL,创建远程连接的账号,并赋予主从复制的权限
# 创建itcast用户,并设置密码,该用户可以在任意主机连接该MySQL服务
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'root@123456';
# 为 'itcast'@'%' 分配主从复制的权限
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';
  1. 通过指令,查看二进制坐标
SHOW MASTER STATUS;

字段含义:

  • file:从哪个日志文件开始推送日志
  • position:从哪个位置开始推送日志
  • binlog_ignore_db:指定不需要同步的数据库

3.3 搭建配置(从库配置)

  1. 修改配置文件/etc/my.cnf
# 开启二进制日志
log-bin=mysql-bin 
# mysql服务器uuid
server-uuid=6cd3023d-6ec6-11ef-a4a6-000c29bb681a
# mysql服务器ID,保证整个集群环境中的唯一性,默认为1
server-id=2
# 是否只读 1=只读 0=读写
read-only=1
# 上面的只读只能针对普通用户,如果想要针对超级管理员的话需要设置一下内容
# super-read-only=1
  1. 重启MySQL服务器
systemctl restart mysqld
  1. 查看MySQL服务状态
systemctl status mysqld
  1. 登录MySQL关联主库信息
CHANGE REPLICATION SOURCE TO SOURCE_HOST='XXX.XXX', SOURCE_USER='XXX', SOURCE_PASSWORD='XXX',SOURCE_LOG_FILE='XXX', SOURCE_LOG_POS='XXX';

上述是8.0.23中的语法。如果MySQL的版本是8.0.23之前的版本:

CHANGE MASTER TO MASTER_HOST='XXX.XXX', MASTER_USER='XXX', MASTER_PASSWORD='XXX',MASTER_LOG_FILE='XXX', MASTER_LOG_POS='XXX';
参数名含义8.0.23之前
SOURCE_HOST主库IP地址MASTER_HOST
SOURCE_USER连接主库的用户名MASTER_USER
SOURCE_PASSWORD连接主库的密码MASTER_PASSWORD
SOURCE_LOG_FILEbinlog日志文件名MASTER_LOG_FILE
SOURCE_LOG_POSbinlog日志文件位置MASTER_LOG_POS
  1. 开启同步操作
start replica; # 8.0.22之后的版本
start slave; # 8.0.22之前的版本
  1. 查看主从同步状态
show replica status;  # 8.0.22之后的版本
show slave status;  # 8.0.22之前的版本

在这里插入图片描述

3.4 测试

  1. 在主库中创建数据库创建表
create database db01;
user db01;
create table tb_user(id int(11) primary key not null auto_increment,name varchar(50) not null,sex varchar(1)
) engine=innodb default charset=utf8mb4;insert into tb_user(name, sex) values("Tom", "1"),("Trigger", "0"),("Dawn", "1");
  1. 在从库中查询数据,查看数据是否一致。

如果从库想要同步主库之前的数据,需要将主库中的数据导出为SQL脚本,在从库中执行。
注意:主从数据库一定要配置server-id和server-uuid,并且主从数据库的id、uuid要保持唯一性

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词