广告
返回顶部
首页 > 资讯 > 数据库 >实现↝Mysql数据库主从复制搭建与同步
  • 374
分享到

实现↝Mysql数据库主从复制搭建与同步

数据库mysqlmsyql主从复制linux运维服务器centos 2023-09-17 13:09:30 374人浏览 八月长安
摘要

实现↝Mysql数据库主从复制搭建与同步 🔻 一、mysql 同步复制有关概述⛳ 前言、何为主从复制⛳ 1.1 mysql支持的复制方式⛳ 1.2 mysql支持的复制类型1.

实现↝Mysql数据库主从复制搭建与同步

在这里插入图片描述

🔻 一、mysql 同步复制有关概述

⛳ 前言、何为主从复制

一般数据库都是读取压力大于写数据压力,主从复制即为了实现数据库的负载均衡和读写分离。通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,主服务器只负责写,而从服务器只负责读。

如生产环境中,使用Redis数据库作为缓存数据库,用户访问业务数据时,先从缓存数据库查询,如果缓存数据库没有,再从业务数据库读取。
在这里插入图片描述

⛳ 1.1 mysql支持的复制方式

  • 基于语句的复制--Statement(Statement-Based Replication,SBR): 在主服务器上执行的sql语句,在从服务器上执行同样的语句。mysql默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选择基于行的复制,每一条会修改数据的sql都会记录在 binlog 中。

  • 基于行的复制--Row(Row-Based Replication,RBR):把改变的内容复制过去,仅保存哪条记录被修改。而不是把命令在从服务器上执行一遍, 从mysql5.0开始支持。

  • 混合类型的复制--Mixed(Mixed-Based Replication,MBR): 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制,Statement 和 Row 的混合体。

  • 通过alter user root identified by '新密码';

⛳ 1.2 mysql支持的复制类型

1.2.1🍁异步复制

  • mysql数据库默认的复制方式
  • 异步复制指主库以异步的方式同步数据到一个从库或多个从库中。
  • 主节点不会主动推送数据到从节点,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理。
  • 主节点如果掉了,此时主节点上已经提交的事务可能并没有传到从节点上,如果此时,强行将从节点提升为主节点,可能导致新主节点上的数据不完整

1.2.2🍁同步复制

  • 同步复制是mysql主节点特有的复制方式,当主库执行完一个事务,然后所有的从库都复制了该事务并成功执行完才返回成功信息给客户端。

1.2.3🍁半同步复制

  • 介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回成功信息给客户端
  • 只能保证主库的Binlog至少传输到了一个从节点上,否则需要等待直到超时时间,然后切换成异步模式再提交。

1.2.4🍁[图解]-异步复制 / 同步复制 / 半同步复制

在这里插入图片描述

⛳ 1.3 mysql复制解决的问题

  • 数据分布 (Data distribution )—提高数据操作自然并行度,以达到最优的执行效率的目的
  • 负载平衡(load balancing)—主服务器只负责写,而从服务器只负责读
  • 备份(Backups)—灾难恢复,对损坏的数据进行恢复和还原
  • 高可用性和容错行( High availability and failover)—确保 mysql 数据库在故障和异常情况下仍然能够提供可靠的服务

⛳ 1.4 mysql复制是如何工作的

复制整体来说有 3 个步骤:

  • master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events)
  • slavemaster的binary log events拷贝到它的中继日志(relay log)
  • slave重做中继日志中的事件,将改变反映它自己的数据
    在这里插入图片描述

🔻 二、mysql 同步复制搭建

⛳ 2.1 主从节点准备

克隆两台安装好mysql8.0的虚拟机,并修改复制的db-server02(从节点)mySQL Server的UUID。

[root@db-server ~]# vi /var/lib/mysql/auto.cnf####修改UUID[auto]server-uuid=83822642-0030-11ee-a2cc-000c29c2e1ad####重启mysql服务[root@db-server ~]# systemctl restart mysqld
mysql服务器Ip
db-server(主节点)192.168.181.101
db-server02(从节点)192.168.181.102

⛳ 2.2 主节点配置

2.2.1 🍁 创建log-bin二进制日志存储路径

###创建二进制日志存储路径[root@db-server /]# mkdir -p -v /var/log/mysql/mysql-binmkdir: created directory ‘/var/log/mysql/mysql-bin’###赋权mysql用户组合mysql用户[root@db-server ~]# chown -R mysql:mysql /var/log/mysql[root@db-server ~]# chown -R mysql:mysql /var/log/mysql/mysql-bin

在这里插入图片描述

2.2.2 🍁 修改my.cnf配置文件

【必须参数】:

####添加内容[mysqld]#配置唯一的服务器ID,一般使用IP最后一位server-id=1# 设置需要复制的数据库,默认全部记录。比如: binlog-do-db=db_master_slavebinlog-do-db=db_master_slave#开启log-bin二进制日志,指名路径。如: 本地的路/var/log/mysql/mysql-binlog-bin=/var/log/mysql/mysql-bin#设置binlog格式binlog_fORMat=STATEMENT

在这里插入图片描述

【可选参数】:

# 0表示读写 (主机),1表示只读(从机)read-only=0#设置日志文件保留的时长,单位是秒binlog_expire_logs_seconds=6000#控制单个二进制日志大小。此参数的最大和默认值是1GBmax_binlog_size=20#设置不要复制的数据库binlog-ignore-db=test#设置需要复制的数据库,默认全部记录。比如: binlog-do-db=dbtest01binlog-do-db=需要复制的主数据库名字#设置binlog格式binlog_format=STATEMENT

2.2.3 🍁 重启mysql服务,检查是否生效

[root@db-server mysql]# systemctl restart mysqld[root@db-server mysql]# systemctl status mysqld[root@db-server mysql]# mysql -u root -pmysql> show variables like 'server_id';+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 1     |+---------------+-------+1 row in set (0.02 sec)mysql> 
###开启log-bin二进制日志mysql> show variables like 'log_bin';+---------------+-------+| Variable_name | Value |+---------------+-------+| log_bin       | ON    |+---------------+-------+1 row in set (0.00 sec)mysql> 
##skip_networking--tcp/ip协议通信,默认是OFF关闭状态,启用后主从将无法通信mysql> show variables like '%skip_networking%';+-----------------+-------+| Variable_name   | Value |+-----------------+-------+| skip_networking | OFF   |+-----------------+-------+1 row in set (0.00 sec)mysql> 

2.2.4 🍁 主节点创建主从复制账号

  • mysql5.7版本:
mysql> grant replication slave on *.*  to  'slave1'@'%'  identified by 'Zyl@123456';  ###用户地址可以指定从机IP192.168.181.102
  • mysql8.0版本:
mysql> create user 'slave1'@'%' identified by 'Zyl@123456'; Query OK, 0 rows affected (0.02 sec)mysql>grant replication slave on *.*  to  'slave1'@'%';Query OK, 0 rows affected (0.01 sec)mysql>alter user 'slave1'@'%' identified with mysql_native_passWord by 'Zyl@123456'; Query OK, 0 rows affected (0.02 sec)mysql>flush privileges;Query OK, 0 rows affected (0.02 sec)

在这里插入图片描述

2.2.5 🍁 查看主节点的二进制日志的名称

  • File和Position两个参数需要在从库配置中使用。
mysql> show master status;+------------------+----------+-----------------+------------------+-------------------+| File             | Position | Binlog_Do_DB    | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+-----------------+------------------+-------------------+| mysql-bin.000004 |      157 | db_master_slave |                  |                   |+------------------+----------+-----------------+------------------+-------------------+1 row in set (0.00 sec)mysql> 

⛳ 2.3 从节点配置

2.3.1 🍁 修改my.cnf配置文件

【必须参数】:

[mysqld]#配置唯一的服务器ID,一般使用IP最后一位server-id=2###开启中继日志,从主服务器上同步日志文件记录到本地relay-log=relay-log-bin

【可选参数】:

[mysqld]###定义中继日志文件的位置和名称relay-log-index=slave-relay-bin.index

2.3.2 🍁 在从节点配置需要复制的主机

####语法##change master to master_host='主节点IP',master_user='主节点用户名',master_password='用户密码',master_log_file='mysql-bin.具体数字',master_log_pos=具体值;####本环境配置##mysql> change master to master_host='192.168.181.101',master_user='slave1',master_password='Zyl@123456',master_log_file='mysql-bin.000004',master_log_pos=157 ;Query OK, 0 rows affected, 8 warnings (0.06 sec)mysql> 

在这里插入图片描述

2.3.3 🍁 在从节点开启slave同步,查看同步状态

####开启slave同步mysql> start slave;Query OK, 0 rows affected, 1 warning (0.05 sec)####查看同步状态mysql> show slave status\G*************************** 1. row ***************************               Slave_IO_State: Waiting for source to send event                  Master_Host: 192.168.181.101                  Master_User: slave1                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000004          Read_Master_Log_Pos: 157               Relay_Log_File: relay-log-bin.000006                Relay_Log_Pos: 373        Relay_Master_Log_File: mysql-bin.000004             Slave_IO_Running: Yes            Slave_SQL_Running: Yes              Replicate_Do_DB:           Replicate_Ignore_DB:            Replicate_Do_Table:        Replicate_Ignore_Table:       Replicate_Wild_Do_Table:   Replicate_Wild_Ignore_Table: mysql> 

在这里插入图片描述

⛳ 主要看这两个参数,两个参数的值都为Yes,即主从配置搭建成功:

  • Slave_IO_Running:IO线程,负责与主机的io通信
  • Slave_SQL_Running:SQL线程,责自己的slave MySQL进程

如果报错Slave failed to initialize relay_log info structure from the repository,需要清理之前的relay_log,重新启用新的relay_log即可。

reset slave;

⛳ 2.4 主节点创建数据库测试

  • 主节点配置的db_master_slave
####主节点创建数据库db_master_slavemysql> create database db_master_slave;Query OK, 1 row affected (0.01 sec)mysql> use db_master_slaveDatabase changedmysql> ####创建表mysql> CREATE TABLE `tab1`  (    ->   `id` int NOT NULL,    ->   `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,    ->   `class` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,    ->   PRIMARY KEY (`id`) USING BTREE    -> ) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;Query OK, 0 rows affected, 6 warnings (0.02 sec)mysql> ####插入测试数据mysql> INSERT INTO `tab1` VALUES (1001, '曹操', '1班');Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO `tab1` VALUES (1002, '张飞', '1班');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO `tab1` VALUES (1003, '项羽', '3班');Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO `tab1` VALUES (1004, '刘备', '2班');Query OK, 1 row affected (0.00 sec)mysql> 

⛳ 2.5 从节点查看同步数据

2.5.1 🍁 数据测试-主节点插入数据,从节点查看

mysql> show databases;

在这里插入图片描述

###查看tab1表数据mysql> select * from tab1;+------+--------+-------+| id   | name   | class |+------+--------+-------+| 1001 | 曹操   | 1|| 1002 | 张飞   | 1|| 1003 | 项羽   | 3|| 1004 | 刘备   | 2|+------+--------+-------+4 rows in set (0.00 sec)mysql> 

2.5.2 🍁 数据测试-主节点删除数据,从节点查看

在这里插入图片描述
在这里插入图片描述

⛳ 2.6 主从同步关闭和开启

  • 🍁 停止主从服务复制的功能------从机执行
####开启slave同步mysql> start slave;Query OK, 0 rows affected, 1 warning (0.05 sec)####关闭slave同步mysql> stop slave;Query OK, 0 rows affected, 1 warning (0.03 sec)

🔻 三、mysql 同步复制延迟问题

⛳ 3.1 从节点配置主从同步要求

  • 🍁 读库与写库数据一致(最终一致)
  • 🍁 写数据必须写到写库
  • 🍁 读数据不一定必须到读库

主从同步复制的内容是二进制文件,在传输过程中会存在主从延迟的情况,会导致用户在从库读取的数据不是最新数据----->即数据不一致性问题。

⛳ 3.2 如何解决【数据不一致性】问题

  • 🍁 异步复制—master执行操作后直接返回给client结果,不再等待slave反馈同步信息,但这种方式数据一致性最弱。
  • 🍁 半同步复制—只要有一个slave复制了该事务并成功执行完就返回成功信息给client,这种方式提高了数据一致性,但是增加了网络延迟时间,降低了主库写的效率。
  • 组复制(MGR)----mysql 5.7.17 推出的新的数据复制技术,基于Paxos协议复制,很好的弥补了前面两种复制的不足。

在这里插入图片描述

🔻四、总结—温故知新

❓ 了解何为主从复制❓ mysql支持的复制类型之间区别,以及解决的问题❓ mysql主从复制搭建❓ mysql主从复制延迟及解决方案

👈【上一篇】 💖The End💖 点点关注,收藏不迷路💖 【下一篇】👉

来源地址:https://blog.csdn.net/qq_41840843/article/details/131096131

您可能感兴趣的文档:

--结束END--

本文标题: 实现↝Mysql数据库主从复制搭建与同步

本文链接: https://www.lsjlt.com/news/411110.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 实现↝Mysql数据库主从复制搭建与同步
    实现↝Mysql数据库主从复制搭建与同步 🔻 一、mysql 同步复制有关概述⛳ 前言、何为主从复制⛳ 1.1 mysql支持的复制方式⛳ 1.2 mysql支持的复制类型1....
    99+
    2023-09-17
    数据库 mysql msyql主从复制 linux 运维 服务器 centos
  • MySQL主从复制搭建流程分步实现
    目录主从复制主从搭建配置主从复制的命令测试总结主从复制 主从也叫做(AB复制),允许一个服务器从一个服务器数据库(主服务器)的数据复制到一个或者多个mysql数据库服务器。 主从复制的优点有很多,包括横向扩展解决方案,数...
    99+
    2022-11-05
  • MySQL 搭建主从同步实现操作
    目录一、MySQL 8.0 主从同步二、MySQL主从搭建2.1 Master 上的操作2.2 Slave 上的操作一、MySQL 8.0 主从同步 主从同步的流程(原理): mas...
    99+
    2022-11-13
  • MySQL如何搭建主从同步实现操作
    小编给大家分享一下MySQL如何搭建主从同步实现操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、MySQL 8.0 主从同步主从同步的流程(原理):mast...
    99+
    2023-06-29
  • MySQL主从复制指定不同库表如何实现同步参数
    本文主要给大家介绍MySQL主从复制指定不同库表如何实现同步参数,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下MySQL主从复制指定不同库表如何实现...
    99+
    2022-10-18
  • 关于Mysql搭建主从复制功能的步骤实现
    目录1.描述2.开始远程连接3.开启bin-log日志4.重启两台mysql5.授权Ⅰ授权Ⅱ6.配置从服务器7.启动从库的复制功能8.检查从库复制功能状态1.描述 在实际的生产中,为了解决Mysql的单点故障已经提高My...
    99+
    2023-05-23
    Mysql 主从复制 搭建主从复制
  • MySQL数据库主从同步的实现方法
    这篇文章主要讲解了MySQL数据库主从同步的实现方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。安装环境说明系统环境:[root@~]# cat /etc/redhat-re...
    99+
    2022-10-18
  • Mysql 中怎么实现主从数据库同步
    这篇文章给大家介绍Mysql 中怎么实现主从数据库同步,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、主服务器1.1、创建一个复制用户,具有replication slave 权限。...
    99+
    2022-10-18
  • ​MySQL数据库5.6.16.主从复制如何搭建及配置
    下面一起来了解下MySQL数据库5.6.16.主从复制如何搭建及配置,相信大家看完肯定会受益匪浅,文字在精不在多,希望MySQL数据库5.6.16.主从复制如何搭建及配置这篇短内容是你想要的。MySQL数据...
    99+
    2022-10-18
  • MySQL主从搭建(多主一从)的实现思路与步骤
    背景: 由于最近公司项目好像有点受不住并发压力了,优化迫在眉睫。由于当前系统是单数据库系统原因,能优化的地方也尽力优化了但是数据库瓶颈还是严重限制了项目的并发能力。所以就考虑了添加数据库来增大项目并发能力。 思路:...
    99+
    2022-05-24
    mysql主从搭建教程 mysql 主从配置 数据库主从搭建
  • MYSQL数据库主从同步设置的实现步骤
    目录为什么要主从同步?主从同步的原理MYSQL数据库进行主从同步创建两个MYSQL数据库初始化,安装主机数据库配置从机测试主从同步为什么要主从同步? 1、读写分离 主从同步分为一个主...
    99+
    2022-11-13
  • MySQL实战之主从数据同步机制
    主从同步的重要性: 解决数据可靠性的问题需要用到主从同步;解决 MySQL 服务高可用要用到主从同步;应对高并发的时候,还是要用到主从同步。 一、MySQL 主从同步流程 当客户端提交一个事务到 MySQL 的集群,直到客户端收到集群返回...
    99+
    2023-09-08
    mysql 数据库 java
  • MySQL中怎么实现主从复制和半同步复制
    这篇文章将为大家详细讲解有关MySQL中怎么实现主从复制和半同步复制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、复制的介绍MySQL支持单向、异步复制...
    99+
    2022-10-18
  • k8s搭建mysql集群实现主从复制的方法步骤
    目录环境介绍一、部署NFS服务器二、创建PV三、编写mysql的yaml文件四、启动MySQL五、验证MySQL主从复制环境介绍 名称版本操作系统IP备注K8S集群1.20.15Centos7.9192.168.11.2...
    99+
    2023-01-05
    k8s mysql主从 k8s搭建mysql主从
  • 数据库实现主从复制
    MySQL的主从复制,依赖于二进制日志的拉取和sql线程的转换。确认主备关系后,IO线程负责将主库的二进制日志拉取到备库,由SQL线程将二进制日志回读成具体的操作等。主备搭建主库的配置 vi /etc/my.cnf [mysqld] #在...
    99+
    2016-02-20
    数据库实现主从复制 数据库入门 数据库基础教程 数据库 mysql
  • MySQL数据库实现主主同步
    前言 MySQL主主同步实际上是在主从同步的基础上将从数据库也提升成主数据库,让它们可以互相读写数据库,从数据库变成主数据库;主从相互授权连接,读取对方binlog日志并更新到本地数据库的过程,只要对...
    99+
    2023-09-08
    mysql 数据库 服务器
  • Mariadb数据库主从复制同步配置过程实例
    目录一、环境规划二、mariadb的主从复制介绍1.主从复制简介2.半同步复制介绍3.主从复制原理图三、安装Mariadb1.配置yum仓库2.检查yum仓库3.安装mariadb4.启动mariadb服务5.从节点安装...
    99+
    2022-11-24
    Mariadb主从复制同步配置 Mariadb数据库主从配置
  • Mysql数据库主从复制的实现原理
    这篇文章主要介绍“Mysql数据库主从复制的实现原理”,在日常操作中,相信很多人在Mysql数据库主从复制的实现原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql数...
    99+
    2022-10-18
  • 详细介绍MySQL如何开启主从复制实现数据同步
    主从复制原理 主从复制线程 主节点    dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events 从节点    I/O T...
    99+
    2022-10-18
  • MySQL数据库主从复制与读写分离
    目录一.主从复制主从复制三线程主从复制的过程:主从复制的策略:主从复制高延迟二.读写分离读写分离概念读写分离原因与场景总结一.主从复制        主从复制:在实际的生产中,为了解...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作