主从数据库同步配置详解(MySQL/MariaDB)

news2024/9/27 9:20:56

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、环境准备与安装配置
    • 本地部署
      • MySQL
        • Ubuntu 系统:
        • CentOS 系统:
      • MariaDB
        • Ubuntu 系统:
        • CentOS 系统:
    • 容器部署
      • MySQL
      • MariaDB
  • 二、配置主从库的同步设置
  • 四、测试与维护
  • 总结


前言

在数据库管理中,主从同步是保障数据安全性和提高读写性能的关键技术。通过设置主从架构,可以实现数据的自动备份、负载均衡、甚至高可用性,特别是在业务扩展和容灾恢复中起到重要作用。本文将详细介绍如何配置MariaDB和MySQL的主从数据库同步,并讨论主从复制的原理和应用场景。

原理:
MariaDB和MySQL的主从同步基于二进制日志(binlog)实现。主数据库负责记录所有数据更改操作(插入、更新、删除等)到二进制日志中,而从数据库通过IO线程读取这些日志并应用到自身,从而保持与主数据库的数据一致性。

同步的主要过程包括:
主数据库记录操作:主库将所有数据修改记录到binlog中。
从数据库读取日志:从库通过IO线程将主库的binlog复制到本地。
从数据库应用日志:从库的SQL线程解析并执行日志中的操作,保持数据与主库一致。


一、环境准备与安装配置

确保主从路由器数据库的 MySQL/MariaDB 版本一致。

以下几种方式不均均可以实现数据库主从同步(前提是版本一致):
1、主(本地部署) + 从(本地部署)
2、主(容器部署) + 从(本地部署)
3、主(本地部署) + 从(容器部署)
4、主(容器部署) + 从(容器部署)

本地部署

MySQL

Ubuntu 系统:
# 更新软件包列表
sudo apt update

# 安装指定版本的 MySQL(例如,8.0.28)
sudo apt install mysql-server=8.0.28-1ubuntu20.04

# 锁定版本,避免自动更新
sudo apt-mark hold mysql-server

CentOS 系统:
# 安装指定版本的 MySQL(例如,8.0.28)
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum-config-manager --enable mysql80-community
sudo yum install mysql-community-server-8.0.28-1.el7.x86_64

# 启动 MySQL 服务
sudo systemctl start mysqld

MariaDB

Ubuntu 系统:
# 添加 MariaDB APT 仓库
sudo apt install software-properties-common
sudo add-apt-repository ppa:marialeaders/mariadb-10.5

# 更新软件包列表
sudo apt update

# 安装指定版本的 MariaDB(例如,10.5.9)
sudo apt install mariadb-server=1:10.5.9+maria~focal

# 锁定版本,避免自动更新
sudo apt-mark hold mariadb-server
CentOS 系统:
# 安装指定版本的 MariaDB(例如,10.5)
sudo vi /etc/yum.repos.d/MariaDB.repo
# 文件中添加以下内容:
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7/x86_64
gpgkey=https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xF1656F24C74CD1D8
gpgcheck=1

#然后安装:
sudo yum install MariaDB-server-10.5.9

# 启动 MariaDB 服务
sudo systemctl start mariadb

容器部署

MySQL

# 启动指定版本的 MySQL(例如,8.0.28)
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=your_password -d mysql:8.0.28

MariaDB

# 启动指定版本的 MariaDB(例如,10.5.9)
docker run --name mariadb-container -e MYSQL_ROOT_PASSWORD=your_password -d mariadb:10.5.9


二、配置主从库的同步设置

主数据库:

# 执行数据库初始化(如需)
mysql_secure_installation
# 主服务器创建同步用户
mysql -u root -p
> grant replication slave on *.* to 'replicate'@'从数据库ip' identified by '********';
> flush privileges;

从数据库:

# 执行数据库初始化(如需)
mysql_secure_installation
# replicate用户访问测试
mysql -h 主要数据库ip -u replicate -p
# 如果不能访问,检查主服务器是否开放防火墙端口

主数据库:

systemctl stop mariadb
# 修改数据库配置(这个配置文件可能会在其他路径,按版本找)
vim /etc/my.cnf
[mysqld]
server-id = 1991
log-bin = mysql-bin
binlog-do-db = replicatedb
binlog-ignore-db = mysql

# 重启主服务器数据库:
systemctl restart mariadb

# 锁表(防止写入)
mysql -u root -p
> flush tables with read lock;
> show master status;
# 显示如下,其中 File 和 Position 是关键信息,一会从数据库配置要用
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      1959| replicatedb  | mysql            |
+------------------+----------+--------------+------------------+

# 导出数据
mysqldump -h localhost -u root -p replicatedb > /path/replicatedb-all.sql
# 传给从数据库
scp /path/replicatedb-all.sql 从数据库ip:/path/replicatedb-all.sql

从数据库:

# 导入数据
mysql -u root -p
> create database replicatedb;
> set names utf8mb4;
> source /path/replicatedb-all.sql;
# 检查表结构:
show tables;
# 检查数据:
select * from 导入的表;

# 添加数据库用户,注意与原主数据库的一致(若这个库由指定用户访问,否则可以不用操作这步)
> CREATE USER '操作replicatedb数据库的用户'@'localhost' IDENTIFIED BY '********';
> GRANT ALL ON replicatedb.* TO '操作replicatedb数据库的用户'@'localhost';
> FLUSH PRIVILEGES;

# 修改数据库配置(这个配置文件可能会在其他路径,按版本找)
vim /etc/my.cnf
[mysqld]
server-id = 1992
log-bin = mysql-bin
binlog-do-db = replicatedb
binlog-ignore-db = mysql,information_schema,performance_schema
# 注意:第3个服务器(第2从服务器),server-id应该是1993

# 重启数据库:
systemctl restart mariadb

# 从数据库添加主数据库配置
mysql -u root -p
> stop slave;
> change master to master_host="主数据库ip",master_port=3306, master_user="replicate",master_password="replicate用户密码",master_log_file="mysql-bin.000001",master_log_pos=1959;
> start slave;
# 查看Slave状态:
> show slave status\G
.....
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
.....
# 若这两项为Yes,那基本上成功了

主数据库:

# 数据库解锁
mysql -u root -p
> unlock tables;

四、测试与维护

主数据库

mysql -u root -p
> use replicatedb;
> create table test123 (id int);
> show tables;

从数据库

mysql -u root -p
> use replicatedb;
> show tables;
# 看数据表有没有同步过来

有什么异常直接在从数据库上执行 show slave status\G 就可以看到异常报错了


总结

1、一般系统从数据库是作为读去访问,只在主数据库上写(如果从数据库写了,同步数据异常会有冲突),如果读访问量大的话,可以多做几个从数据库同步,再到上面套一层haproxy之类的代理做个负载均衡去访问。
2、MySQL 8 默认使用 caching_sha2_password 作为身份验证插件,而 MySQL 5.7 使用 mysql_native_password。在主从库不同版本的情况下,需要在 MySQL 8 上设置兼容性。由于加密机制不同,所以非必要不要做跨版本主从数据库同步。
3、在配置和操作过程中,保持两个数据库的时钟同步很重要,以避免因时间差异导致的延迟或错误。
4、如果数据量较大,初次同步时可以通过物理备份或mysqldump创建从库的初始数据,然后再开启binlog同步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2169560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[深度学习]卷积神经网络CNN

1 图像基础知识 import numpy as np import matplotlib.pyplot as plt # 图像数据 #imgnp.zeros((200,200,3)) imgnp.full((200,200,3),255) # 可视化 plt.imshow(img) plt.show() # 图像读取 imgplt.imread(img.jpg) plt.imshow(img) plt.show() 2 CNN概述 卷积层convrelu池…

实战OpenCV之色彩空间转换

基础入门 色彩空间是描述颜色的一种数学模型,它定义了颜色的三个或更多维度,比如:亮度、色相和饱和度等。最著名的色彩空间之一是RGB,它基于人眼对光的感知原理,通过红、绿、蓝三种基本颜色的不同强度组合来表示几乎所…

【HarmonyOS】鸿蒙仿iOS线性渐变实现

【HarmonyOS】仿照IOS中可以通过输入start(0,0),end(1,1)获取角度到.linearGradient,从而实现左上到右下渐变 class Point {x: number 0y: number 0 }Entry Component struct Page…

开源链动 2+1 模式 S2B2C 商城小程序:激活 KOC,开启商业新征程

摘要:本文深入探讨了 KOC 在立体连接中的重要性,以及如何通过开源链动 21 模式 S2B2C 商城小程序发现和找到更多的 KOC。强调了历史积累强关系和快速强化强关系的方法,并阐述了该商城小程序在推动商业发展中的关键作用。 一、引言 在当今竞争…

mysql 内存被打满记录

一:早上收到报警:提示:您的云数据库RDS的1个实例因存储空间满将被锁定,请关注实例的存储空间使用情况,可通过存储扩容或空间清理解除锁定。后续查看错误日志如下:磁盘没有空间了 没有多余的空间写binlog和…

2024年下安徽省事业编考试报名流程(电脑)

2024年下安徽省事业编考试报名流程(电脑)

极狐GitLab 17.4 升级指南

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab https://dl.gitlab.cn/6y2wxugm 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文分享极狐GitLab 17.4 升级…

【JVM】垃圾释放方式:标记-清除、复制算法、标记-整理、分代回收

文章目录 1. 标记-清除2. 复制算法4. 标记-整理4. 分代回收 把标记为垃圾的对象的内存空间进行释放。主要有三种释放方式 1. 标记-清除 把标记为垃圾的对象,直接释放掉(最朴素的做法) 此时就是把标记为垃圾的对象所对应的内存空间直接释放。…

【机器学习】探索LSTM:深度学习领域的强大时间序列处理能力

目录 🍔 LSTM介绍 🍔 LSTM的内部结构图 2.1 LSTM结构分析 2.2 Bi-LSTM介绍 2.3 使用Pytorch构建LSTM模型 2.4 LSTM优缺点 🍔 小结 学习目标 🍀 了解LSTM内部结构及计算公式. 🍀 掌握Pytorch中LSTM工具的使用. &…

反光柱定位算法-雷达强度数据包

反光柱定位算法-雷达强度数据包 反光柱定位算法-雷达强度数据包 作者: 苏凯 系统环境: 系统:ubuntu20.04 ros1版本: noetic 雷达: sick TM581 强度值标定文件: scanIntensities.txt 部署在环境中的反光柱数据…

类和对象(2)

文章目录 🎯引言👓类和对象(2)1.类的默认成员函数2.构造函数2.1构造函数概念 3.析构函数3.1. **析构函数的定义**3.2. **析构函数的特点** 4.拷贝构造函数4.1. **拷贝构造函数的定义** 5.赋值运算符重载5.1运算符重载5.2赋值运算符重载5.3日期类的实现 &…

smtp-server: 535 Error: authentication faile

问题描述: 在linux服务器上使用 mailx发送邮件时提示:smtp-server: 535 Error: authentication faile 原因:没有配置授权码或者授权码不正确 解决办法:配置授权码(以网易邮箱为例) 1. 进入网易邮箱网页版,打开 POP…

数据中心里全速运行的处理器正在浪费能源

数据中心是耗电大户,运营商一直在努力解决的一个关键问题是如何减少能源和资源消耗。人们已经找到了一些巧妙的解决方案,例如使用非饮用水来冷却设备,但一个显而易见的解决方案似乎被忽略了:启用处理器的各种省电功能。 随着需求的…

进程概念以及进程相关函数的使用

1.进程相关概念 1.1 程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁....) 进程,是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系…

Qt-QGroupBox容器类控件(39)

目录 容器类控件 描述 属性 使用 容器类控件 描述 这个是用来分组的,即把控件分组 使⽤ QGroupBox 实现⼀个带有标题的分组框.可以把其他的控件放到⾥⾯作为⼀组.这样看起来能更好看⼀点 属性 title分组框的标题alignment分组框内部内容的对⻬⽅式flat是否是…

微服务nacos解析部署使用全流程

1、什么是Spring Cloud Spring Cloud是一系列框架的集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。…

stm32入门——GPIO输入输出(1)基础理解

最近比较想上进,又不知道要干什么,就来水几篇博客欺骗一下自己。 GPIO全称是:General Purpose Input / Output ,是stm32用于控制输入和输出信号的通用接口。我们用的MCU都有这玩意,比如STM32F103C8T6上有 GPIOA,GPIOB&…

算法葫芦书(笔试面试)

一、特征工程 1.特征归一化:所有特征统一到一个区间内 线性函数归一化(0到1区间)、零均值归一化(均值0,标准差1) 2.类比型特征->数值性特征 序号编码、独热编码、二进制编码(010&#xf…

prd文档编写(to b)

如何编写产品需求文档(PRD) | 人人都是产品经理 (woshipm.com) 一.prd文档编写得目的 PRD文档最为重要的目的就是:协调各个相关角色 PRD就是提高效率的,把各个角色的共识全部写出来,大家都已PRD为最终的工作指导文档…

2:数据结构:列表与元组

目录 2.1 列表的创建与操作 2.1.1 列表的创建 2.1.2 列表的常用操作 2.1.3 列表切片操作 2.2 元组的特点与用法 2.2.1 元组的创建 2.2.2 元组与列表的区别 2.2.3 元组的常用操作 2.3 示例代码与练习 2.3.1 示例代码:列表与元组的基本操作 2.3.2 练习题 文…