本文以 MySQL 为例

主从复制

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

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

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

  • 主库出现问题,可以快速切换到从库提供服务。
  • 实现读写分离,降低主库的访问压力。
  • 可以在从库中执行备份,以避免备份期间影响主库服务。

原理

MySQL主从复制的核心就是二进制日志,具体的过程如下:

从上图来看,复制分成三步:

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

搭建

准备好两台服务器之后,在两台服务器中分别安装好MySQL,并完成基础的初始化准备工作(安装、密码配置等操作)。

例如下图中所示,其中:

192.168.200.200 作为主服务器

192.168.200.201 作为从服务器

两服务器均为 Linux 系统。

开放3306端口

firewall-cmd --zone=public --add-port=3306/tcp -permanent

使配置立即生效

firewall-cmd -reload

关闭防火墙

systemctl stop firewalld

关闭防火墙开机自启

systemctl disable firewalld

日常学习建议直接关闭防火墙即可

主库配置

配置文件 /etc/my.cnf。

# mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 232-1,默认为1
server-id=1 # 是否只读,1 代表只读,0 代表读写
read-only=0 # 忽略的数据,指不需要同步的数据库
# binlog-ignore-db=mysql # 指定同步的数据库
# binlog-do-db=db01

重启MySQL服务器

systemctl restart mysqld

登录mysql,创建远程连接的账号,并授予主从复制权限。

创建myuser用户,并设置密码,该用户可在任意主机连接该MySQL服务

CREATE USER 'myuser'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';

为'myuser'@'%'用户分配主从复制权限

GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

查看二进制日志位置

SHOW master status;

字段含义说明:

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

从库配置

配置文件 /etc/my.cnf。

# mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可
server-id=2 # 是否只读,1 代表只读,0 代表读写
read-only=1

重新启动MySQL服务

systemctl restart mysqld

登录mysql,设置主库配置

CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.200.200', SOURCE_USER='itcast', SOURCE_PASSWORD='Root@123456', SOURCE_LOG_FILE='binlog.000004', SOURCE_LOG_POS=663;

上述是8.0.23中的语法。如果mysql是8.0.23之前的版本,执行如下SQL:

CHANGE MASTER TO MASTER_HOST='192.168.200.200', MASTER_USER='itcast', MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000004', MASTER_LOG_POS=663;

参数名 含义 8.0.23之前
SOURCE_HOST 主库IP地址 MASTER_HOST
SOURCE_USER 连接主库的用户名 MASTER_USER
SOURCE_PASSWORD 连接主库的密码 MASTER_PASSWORD
SOURCE_LOG_FILE binlog日志文件名 MASTER_LOG_FILE
SOURCE_LOG_POS binlog日志文件位置 MASTER_LOG_POS

开启同步操作

start replica; # 8.0.22之后

start slave; # 8.0.22之前

查看主从同步状态

show replica status; # 8.0.22之后

show slave status; # 8.0.22之前

测试

在主库 192.168.200.200 上创建数据库、表,并插入数据:

CREATE DATABASE db01;

USE 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(id, name, sex)
VALUES(NULL, 'Tom', '1'),
(NULL, 'Trigger', '0'),
(NULL, 'Dawn', '1');

在从库 192.168.200.201 中查询数据,验证主从是否同步。

《SQL与数据库基础》20. 主从复制的更多相关文章

  1. Sql Server数据库基础

    --------------------------------------第一章  Sql Server数据库基础------------------------------------------ ...

  2. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  3. SQL Server 数据库基础笔记分享(上)

    前言 本文是个人学习SQL Server 数据库时的以往笔记的整理,内容主要是对数据库的基本增删改查的SQL语句操作和约束,视图,存储过程,触发器的基本了解. 注:内容比较基础,适合入门者对SQL S ...

  4. sql Servers数据库基础

    1. 数据库约束包含:     ·非空约束     ·主键约束(PK) primary key constraint 唯一且不为空     ·唯一约束(UQ) unique constraint 唯一 ...

  5. SQL Server 数据库基础笔记分享(下)

    前言 本文是个人学习SQL Server 数据库时的以往笔记的整理,内容主要是对数据库的基本增删改查的SQL语句操作和约束,视图,存储过程,触发器的基本了解. 注:内容比较基础,适合入门者对SQL S ...

  6. DBA常用SQL之数据库基础信息

    第一部分: 1. 查看oracle最大连接数 sql>show parameter processes #最大连接数 2. 修改最大连接数 sql>alter system set pro ...

  7. sql server 数据库基础知识(二)

    CASE函数用法1:单值判断,相当于switch caseCASE expression WHEN value1 THEN returnvalue1 WHEN value2 THEN returnva ...

  8. sql server 数据库基础知识(一)

    主键(PrimaryKey):主键就是一个表中每个数据行的唯一标识.不会有重复值的列才能当主键.一个表可以没有主键,但是会非常难以处理,因此没有特殊理由表都要设定主键.SQLServer中生成GUID ...

  9. SQL Server 数据库基础编程

    Ø Go批处理语句 用于同时执行多个语句 Ø 使用.切换数据库 use master go     Ø 创建.删除数据库   方法1.   --判断是否存在该数据库,存在就删除 if (exists ...

  10. 【2017-03-09】SQL Server 数据库基础、四种约束

    一.数据库和内存的区别 数据库:一些存储在硬盘上的数据文件 内存:计算机临时存储的一些数据 二.常用数据库 .Net - SQL Server PHP - MySql Java - Oreacl 三. ...

随机推荐

  1. vue全家桶进阶之路49:Vue3 环境变量

    vue3 环境变量 在Vue3中,可以通过环境变量来管理应用程序中的配置.这些配置可以包括后端API的URL.API key.跟踪ID等等.在不同的开发.测试.生产环境中使用不同的配置是非常有用的.V ...

  2. Tensorflow 2下载网址

    Tensorflow2: 官网:https://tensorflow.google.cn/ 一个核心开源库,可以帮助您开发和训练机器学习模型.您可以通过直接在浏览器中运行 Colab 笔记本来快速上手 ...

  3. c#构建具有用户认证与管理的socks5代理服务端

    Socks 协议是一种代理 (Proxy) 协议, 例如我们所熟知的 Shdowsocks 便是 Socks 协议的一个典型应用程序, Socks 协议有多个版本, 目前最新的版本为 5, 其协议标准 ...

  4. 虚拟机linux系统密码忘记了该怎么办?

    当你的linux系统的密码忘记了该怎么办? 首先不要慌,重启电脑,开机的时候 出现这个页面的时候点击e然后出现这个页面 把里面的ro修改为 rw 修改为rw之后在这一行语句的最后面输入enforcin ...

  5. Netty实战(二)

    一.环境准备 Netty需要的运行环境很简单,只有2个. JDK 1.8+ Apache Maven 3.3.9+ 二.Netty 客户端/服务器概览 如图,展示了一个我们将要编写的 Echo 客户端 ...

  6. 有关ODOO的ORM操作

    1.查询操作 sale_id = self.env['sale.order'].search([]) env将对象实例化,search进行搜索,可以根据需求添加搜索条件 search_count([] ...

  7. 一步步教你如何搭建K8S集群

    一.环境配置 三台CentOS7虚拟机,默认配置,内存2GB.处理器2核心. 先更新下系统 1 sudo yum update 2 sudo yum upgrade 二.安装并启动 docker 1 ...

  8. Python潮流周刊#4:Python 2023 语言峰会

    你好,我是猫哥.这里记录每周值得分享的 Python 及通用技术内容,本期是特别加更版,聚焦于 Python 官方 2023 年语言峰会的系列博客. 博客原文:https://pythoncat.to ...

  9. vs2022的一些调试技巧——远程调试&线程检查&性能检查

    visual studio一直都是.net/c#开发人员最受欢迎的编译器,除了强大的代码提示和项目模板,还拥有大量的调试工具,这一期我们介绍下code freeze阶段的一些调试技巧.包括测试环境/生 ...

  10. 可能是最简单最通透的Comparable和Comparator接口返回值理解

    先说 Comparator 接口,这个理解了,下一个就理解了 一.Comparator 的用法(暂不考虑0,因为0不处理) 返回-1,1交换不交换位置,如果撇开比较器的两个参数和jdk默认顺序来说,存 ...