MariaDB 主从同步配置

news2024/10/6 22:34:21

1 服务器结构

角色ip地址安装教程
主节点192.168.31.102CentOS-7 安装 MariaDB-10.8
从节点192.168.31.103

2 原理:

原理:
(1)master服务器将数据的改变记录到二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;

(2)slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件

(3)同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。

也就是说:

  • 从库会生成两个线程,一个I/O线程,一个SQL线程;

  • I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;

  • 主库会生成一个log dump线程,用来给从库I/O线程传binlog;

  • SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;

简言之可分为下面几个步骤:

  1. 主库的更新事件会被写到bin log日志中。
  2. 从库启用slave服务,发起连接,连接到主库。
  3. 从库创建一个I/O线程,从主库读取bin log日志的内容并写入到relay log日志中。
  4. 从库创建一个SQL线程,从relay log里面读取内容,将更新内容写入到从库。

3. 编辑MySQL主服务器上的/etc/my.cnf,

[mysqld]
# 启用二进制日志
log-bin=didiok-mysql-bin
# 服务器唯一ID,一般为了方便可取IP最后一段 
server-id=102
# 选择 ROW 模式
binlog-format=ROW 
  • log-bin :MySQL的bin-log的名字
  • server-id : MySQL实例中全局唯一,并且大于0。

4.在MySQL主节点上创建用于备份的账号

重启 MariaDB 之后,进入 MariaDB,创建新账号:

#此时创建了名为repl的用户,密码为password,% 表示任意地址都可远程登录。
mariadb> CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
#给repl用户授权同步复制权限(REPLICATION SLAVE)
mariadb> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
mariadb> flush privileges;

查询master的状态

mariadb> show master status;

5.编辑 MySQL 从服务器上的 /etc/my.cnf,

[mysqld]
server-id=103

server-id : MySQL实例中全局唯一,并且大于0。与主服务器上的 server-id 区分开。

修改UUID:

使用命令 find / -name auto.cnf 找到auto.cnf文件,修改里面的uuid值,保证各个主从的uuid不一样,重启数据库即可

或者直接删除UUID文件,即auto.cnf ,重新启动服务。

如果找不到可以忽略。

6. MySQL主节点上新增数据

新建数据库didiok,并在数据库中创建表users,并在 users表中新增一条数据:

在这里插入图片描述

7.MySQL主节点上加锁,阻止所有的写入操作

mariadb> FLUSH TABLES WITH READ LOCK;

8.MySQL主节点上,查看bin-log的文件名和位置

mariadb> SHOW MASTER STATUS;

对于上文中的fileposition 的值要记录一下,后面要用到。

9.MySQL主节点上dump所有数据

mysqldump --all-databases --master-data > dbdump.db -uroot -p

mysqldump 方式的优点是可以进行部分复制,如在配置文件中定义 replicate-do-table=db1.*,则用这种方法可以只复制db1库而忽略其它复制事件。缺点是由于mysqldump会生成主库转储数据的SQL语句,实际是一种逻辑备份方式所以速度较慢,不适用于大库。

10.MySQL主节点进行解锁,解锁后,主节点上可以写入数据

mariadb> UNLOCK TABLES;

11.MySQL从节点上导入之前dump的数据

主节点上执行:

# 主库复制数据到从库
find / -name dbdump.db
cd /root 
scp dbdump.db root@192.168.31.103:/root/  #从库的数据文件路径

从节点上执行:

mysql < dbdump.db -uroot -p

在这里插入图片描述

之后查看从节点上数据库中是否有users表,表中是否有数据:

在这里插入图片描述

12.MySQL从节点上配置主从连接信息

命令格式:

mariadb> CHANGE MASTER TO
    -> MASTER_HOST='master_host_name',
    -> MASTER_PORT=port_num,
    -> MASTER_USER='replication_user_name',
    -> MASTER_PASSWORD='replication_password',
    -> MASTER_LOG_FILE='recorded_log_file_name',
    -> MASTER_LOG_POS=recorded_log_position;

实际执行命令如下

CHANGE MASTER TO  MASTER_HOST='192.168.31.102', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='123456', MASTER_LOG_FILE='didiok-mysql-bin.000001', MASTER_LOG_POS=890;
  • MASTER_HOST: MySQL主的地址
  • MASTER_PORT: MySQL主节点的端口(无引号)
  • MASTER_USER: 备份账户的用户名
  • MASTER_PASSWORD: 备份账户的密码
  • MASTER_LOG_FILE:bin-log的文件名
  • MASTER_LOG_POS: bin-log的位置(数字型),是show master status 中看到的position的值

bin-log的文件名和位置 是 步骤 8 中的 show master status 得到的。

13.MySQL从节点上开启同步

mariadb> START SLAVE;

查看MySQL从节点的状态

mariadb> show slave status \G

在这里插入图片描述

查看Slave_IO_RunningSlave_SQL_Running是否成功,只有 这两个状态 都是 YES才可以复制。

14 验证是否同步成功

在主数据上操作,从数据库中查看,截图如下:

在这里插入图片描述

在这里插入图片描述

附:

============== MariaDB 主节点上可能的 /etc/my.cnf 配置如下 =============

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
server_id = 102    #  一组主从组里的每个id必须是唯一值。推荐用ip位数
log-bin=mysql-bin # 二进制日志,后面指定存放位置。如果只是指定名字,默认存放在/var/lib/mysql下 如果修改的话需要在修改之后赋mysql账号文件夹权限
lower_case_table_names=1 # 不区分大小写
binlog-format=ROW    # 二进制日志文件格式
log-slave-updates=True    # slave更新是否记入日志
sync-master-info=1    # 值为1确保信息不会丢失
slave-parallel-threads=3 #同时启动多少个复制线程,最多与要复制的数据库数量相等即可
binlog-checksum=CRC32    # 效验码
master-verify-checksum=1    # 启动主服务器效验
slave-sql-verify-checksum=1   # 启动从服务器效验
bind-address = 192.168.31.102    # 监听本机网卡ip
expire_logs_days = 5 # 配置定时清理
binlog-ignore-db=mysql # 设置不要复制的数据库
binlog-ignore-db=infomation_schema
binlog-do-db=blade # 设置需要复制的数据库

============== MariaDB 从节点上可能的 /etc/my.cnf 配置如下 =============

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
server_id=103
log-bin=mysql-bin #log-bin是二进制文件
relay_log=relay-bin    # 中继日志, 后面指定存放位置。如果只是指定名字,默认存放在/var/lib/mysql下
lower_case_table_names=1

微信公众号如下,欢迎关注:
微信公众号

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

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

相关文章

【连续介质力学】张量场

张量场 张量场表示张量 T ( x ⃗ , t ) T(\vec x, t) T(x ,t)在空间 x ⃗ \vec x x 和时间 t t t中如何变化&#xff0c;将张量场视为可微函数 如果一个张量场不依赖于时间&#xff0c;则此张量场称为定常场&#xff0c;例如 T T ( x ⃗ ) T T(\vec x) TT(x )&#xff1b;相…

如此优秀的低代码平台,佬们一起来体验一把!

前言&#xff1a;低代码平台是一种新兴的应用开发技术&#xff0c;将可视化建模、自动生成代码和开发者编写的代码结合在一起&#xff0c;使应用程序的开发变得更加快速、简单且高效。低代码平台的基本思想是通过消除繁琐的手动编码工作&#xff0c;来让开发者更好地专注于业务…

基于 Spring Boot + MyBatis Plus + Vue Element 实现的后台管理系统 + 微信小程序

管理后台的 Vue3 版本采用 vue-element-plus-admin &#xff0c;Vue2 版本采用 vue-element-admin 管理后台的移动端采用 uni-app 方案&#xff0c;一份代码多终端适配&#xff0c;同时支持 APP、小程序、H5&#xff01; 后端采用 Spring Boot、MySQL MyBatis Plus、Redis …

UnityVR--组件3--Line Renderer--线性渲染

目录 前言 Line Renderer组件介绍 Trail Renderer组件介绍 使用Line Renderer绘制线段 使用系统工具或自定义工具绘制线段 Trail Renderer简单制作子弹拖尾效果 前言 Line Renderer线性渲染组件用于在3D中渲染线段&#xff0c;如之前在小游戏中做过的激光门伤害&#xff0…

Axure设计—动态条形图(中继器)

本文将教大家如何用AXURE中的中继器动态条形图。 一、效果介绍 如图&#xff1a; 预览地址&#xff1a;https://i7x7i9.axshare.com 下载地址&#xff1a;https://download.csdn.net/download/weixin_43516258/87807039?spm1001.2014.3001.5503 二、功能介绍 简单填写中继…

PyQt5桌面应用开发(17):类结构+QWebEngineView

本文目录 PyQt5桌面应用系列PyQt5学习PyQt5类结构和帮助速查实现与解释最终界面和完整源代码界面完整的代码 总结 PyQt5桌面应用系列 PyQt5桌面应用开发&#xff08;1&#xff09;&#xff1a;需求分析 PyQt5桌面应用开发&#xff08;2&#xff09;&#xff1a;事件循环 PyQt5桌…

Spring 如何处理请求参数和表单数据

当我们开发 Web 应用程序时&#xff0c;处理请求参数和表单数据是必不可少的。Spring MVC 是一个流行的 Java Web 框架&#xff0c;提供了多种方式来处理请求参数和表单数据。本文将介绍 Spring MVC 中处理请求参数和表单数据的常用方式&#xff0c;并提供相应的代码示例。 处…

Redis数据结构-SDS

一、SDS&#xff08;Simple Dynamic String&#xff0c;简单动态字符串&#xff09; Redis没有使用C语言传统的字符串表示方式&#xff08;以’\0’结尾的字符数组&#xff09;&#xff0c;而是自己实现了sds的抽象类型&#xff0c;Redis默认使用sds作为字符串的表示。 set ms…

新视野(2023.5.5-2023.5.12)

一、知识&#xff1a; 媒体账号买卖网站 A5新媒体交易&#xff1a;https://xmt.a5.net/ 新媒虎:https://www.xinmeihu.com/ 二、资讯&#xff1a; GPT最大的竞争对手Claude宣布支持100K的上下文&#xff01;基本上一本中篇小说都能塞进去了&#xff0c;你再不需要ChatPDF这种…

【框架源码】手写Spring框架IOC容器核心流程

要是想要了解Spring IOC底层&#xff0c;首先我们就得先了解什么是IOC。 IOC就是控制反转&#xff0c;把对象创建和对象之间的调用过程交给Spring进行管理。 使用IOC目的就是之前我们创建对象的方式都是用new的方式创建&#xff0c;这个方式有个缺点&#xff0c;被创建对象的…

【halcon资料】取出区域的轮廓上所有转折点

一、说明 在区域运算的时候&#xff0c;有时候需要用图形的顶点来描述&#xff0c;比如&#xff0c;两个图中对象需要对齐&#xff0c;或者仿射变换&#xff0c;于是特征点是需要提取的。本文给出一个提取顶点的示例。 二、算子 1.1 get_region_polygon算子 &#xff08;1&a…

2023互联网Java面试真题1000道(附答案)

前言 2023 跳槽不迷茫&#xff0c;大家可以先收藏再看&#xff0c;后续跳槽都能用上的&#xff01; Java程序员绝大部分工作的时间都是增删改查&#xff0c;很多人觉得这项工作没什么技术含量&#xff0c;任何一件事情都要站在不同的角度去考虑&#xff0c;对于大部分的java程序…

拼多多新阶段,透露出不寻常

一个企业的特质&#xff0c;往往由这个企业的领导人所决定。 企业文化本质上就是领导人文化&#xff0c;领导人的风格会决定这个企业当下的现状。一个成功的大企业&#xff0c;往往需要不同的领导人来接替完成其发展使命。 在创业期&#xff0c;企业领导人需要的是勇气、执行…

统计一个数的二进制中1的个数(三种方法)

那么好了好了&#xff0c;宝子们&#xff0c;今天给大家分享一篇经典例题的三种实现方法&#xff0c;来吧&#xff0c;开始整活&#xff01;⛳️ 一、基础法 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int number_of_one(int n) {int count 0;while(n){if…

一文读懂selenium自动化测试(基于Python)

前言 我们今天来聊聊selenium自动化测试&#xff0c;我们都知道selenium是一款web自动化测试的工具&#xff0c;它应该如何去运用呢?我们接着看下去。 ​1、Selenium简介&#xff1a; 1.1 Selenium&#xff1a; Selenium是一款主要用于Web应用程序自动化测试的工具集合。Sele…

gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2 的编译环境搭建

文章目录 gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2 的编译环境搭建概述实验END gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2 的编译环境搭建 概述 正在迁移Smoothieware_best-for-pnp到MCUXPresso的失败实验中徘徊. 将Smoothieware_best-for-pnp升级到和MCUXPresso相同的…

LeetCode:26. 删除有序数组中的重复项

26. 删除有序数组中的重复项 1&#xff09;题目2&#xff09;代码3&#xff09;结果 1&#xff09;题目 给你一个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应…

可以写进简历的软件测试项目(银行/金融/电商/商城......)

目录 一、引言 二、测试任务 三、测试进度 四、测试资源 五、测试策略 六、测试完成标准 七、风险和约束 八、问题严重程度描述和响应时间规范 九、测试的主要角色和职责 ​有需要实战项目的评论区留言吧&#xff01; 软件测试是使用人工或者自动的手段来运行或者测定…

赛效:如何制作gif动态图

将一张静态图转为动态图的好处是增强照片的表现力和吸引力&#xff0c;通过动态效果和音效等元素来传达更加生动和直观的信息&#xff0c;更容易吸引人们的注意力和兴趣。此外&#xff0c;动态图还可以增强视觉效果&#xff0c;使得图片更加生动和有趣&#xff0c;更容易被人们…

C++系列之类与对象(下)

&#x1f497; &#x1f497; 博客:小怡同学 &#x1f497; &#x1f497; 个人简介:编程小萌新 &#x1f497; &#x1f497; 如果博客对大家有用的话&#xff0c;请点赞关注再收藏 &#x1f31e; 插入和输出流 //流插入不能写成成员函数&#xff0c;因为Date对象默认占用了第…