返回顶部
首页 > 资讯 > 数据库 >详细介绍MySQL如何开启主从复制实现数据同步
  • 768
分享到

详细介绍MySQL如何开启主从复制实现数据同步

2024-04-02 19:04:59 768人浏览 薄情痞子
摘要

主从复制原理 主从复制线程 主节点    dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events 从节点    I/O T


主从复制原理

详细介绍MySQL如何开启主从复制实现数据同步

主从复制线程

主节点

   dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events

从节点

   I/O Thread:向Master请求二进制日志事件,并保存于中继日志中
   sql Thread:从中继日志中读取日志事件,在本地完成重放

跟复制功能相关的文件

   master.info:用于保存slave连接至master时的相关信息,例如账号、密码、服务器地址等

   relay-log.info:保存在当前slave节点上已经复制的当前二进制日志和本地replay log日志的对应关系

主从复制特点

   异步复制
   主从数据不一致比较常见

复制架构

   Master/Slave,Master/Master,环状复制
   一主多从
   从服务器还可以再有从服务器
   一从多主:适用于多个不同数据库

复制需要考虑二进制日志时间记录格式

   STATEMENT(5.0之前)
   ROW(5.1之后,推荐)
   MIXED

搭建环境准备

主机 IP地址 类型
Centos7.6 192.168.36.101 Master
CentOS7.6 192.168.36.103 Slave
CentOS7.6 192.168.36.104 Slave
搭建之前请先确保Mysql软件包已经安装

一主一从

Master节点修改数据库配置文件

[root@Master ~]#cat /etc/my.cnf
[mysqld]
server_id=1     # 为Master节点设置一个全局唯一的ID号
binlog_fORMat=row       # 基于行复制的数据库语句
log-bin=/data/bin/mysql-bin     # 启用二进制日志

重新启动数据库服务

[root@Master ~]#service mysqld restart
Restarting mysqld (via systemctl):                         [  OK  ]

Master节点上创建带有复制权限的用户账号

MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.36.%' identified by 'centos';
Query OK, 0 rows affected (0.00 sec)

查看Master的日志位置信息

MariaDB [mysql]> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |    912372 |
+------------------+-----------+
1 row in set (0.00 sec)

Slave节点修改配置文件

[root@Slave-1 ~]#cat /etc/my.cnf
[mysqld]
server_id=2         # Slave节点设置全局唯一的ID号
read_only           # 只读

重新启动数据库服务

[root@Slave-1 ~]#systemctl restart mariadb

使用Master创建的复制权限的用户账号进行同步

MariaDB [(none)]> CHANGE MASTER TO
    -> MASTER_HOST='192.168.36.101',
    ->  MASTER_USER='repluser',
    ->  MASTER_PASSWord='centos',
    ->  MASTER_PORT=3306,
    ->  MASTER_LOG_FILE='mysql-bin.000001',
    ->  MASTER_LOG_POS=245;
Query OK, 0 rows affected (0.01 sec)

启动Slave线程

MariaDB [(none)]> slave start;
Query OK, 0 rows affected (0.00 sec)

查看线程是否启动

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.36.101
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 7389
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 7673
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes      # 从节点的IO线程
            Slave_SQL_Running: Yes      # 从节点的SQL线程
....
        Seconds_Behind_Master: 0        # Master与SLave服务器差别延迟
.....
             Master_Server_Id: 1
1 row in set (0.00 sec)

检查数据同步情况

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

主节点中查看数据库的线程

MariaDB [hellodb]> show processlist;
+----+----------+----------------------+---------+-------------+------+------------------------------------------------------------------
| Id | User     | Host                 | db      | Command     | Time | State
+----+----------+----------------------+---------+-------------+------+------------------------------------------------------------------
|  3 | root     | localhost            | hellodb | Query       |    0 | NULL
|  6 | repluser | 192.168.36.103:51516 | NULL    | Binlog Dump |  115 | Master has sent all binlog to slave; waiting for binlog to be upd
+----+----------+----------------------+---------+-------------+------+------------------------------------------------------------------
2 rows in set (0.00 sec)

从节点中查看数据库的线程

MariaDB [(none)]> show processlist;
+----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------------+--
| Id | User        | Host      | db   | Command | Time  | State                                                                       | I
+----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------------+--
|  4 | root        | localhost | NULL | Query   |     0 | NULL                                                                        | s
|  5 | system user |           | NULL | Connect |   159 | Waiting for master to send event                                            | N
|  6 | system user |           | NULL | Connect | 29259 | Slave has read all relay log; waiting for the slave I/O thread to update it | N
+----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------------+--
3 rows in set (0.00 sec)

一主多从:新添加一个从节点

Slave-2 节点安装数据库服务

[root@Slave-2 ~]#yum install -y mariadb-server

修改 Slave-2 节点配置文件

[root@Slave-2 ~]#cat /etc/my.cnf
[mysqld]
server_id=3
read_only
....

重新启动 Slave-2 节点数据库服务

[root@Slave-2 ~]#systemctl restart mariadb

Slave-2 节点配置同步信息

MariaDB [(none)]> CHANGE MASTER TO
    -> MASTER_HOST='192.168.36.101',
    ->  MASTER_USER='repluser',
    ->  MASTER_PASSWORD='centos',
    ->  MASTER_PORT=3306,
    ->  MASTER_LOG_FILE='mysql-bin.000001',
    ->  MASTER_LOG_POS=245;
Query OK, 0 rows affected (0.00 sec)

启用线程

MariaDB [(none)]> slave start;
Query OK, 0 rows affected (0.00 sec)

检查同步情况

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

主主复制:两台服务器互为主从

主机 IP地址 类型
CentOS7.6 192.168.36.101 Master-1
CentOS7.6 192.168.36.103 Master-2

Master-1 修改配置文件

[root@Master-1 data]#cat /etc/my.cnf
[mysqld]
server_id=1
log_bin     # 启用日志

# 为避免ID冲突问题,需要添加下面两行配置:Master-1 为奇数增长,Master-2 为偶数增长
auto_increment_offset=1     # 开始点
auto_increment_increment=2  # 增长幅度
....

Master-2 修改配置文件

[root@Master-2 data]#cat /etc/my.cnf
[mysqld]
server_id=2
log_bin
auto_increment_offset=2
auto_increment_increment=2

重新启动服务

[root@Master-1 ~]#systemctl restart mariadb
[root@Master-2 ~]#systemctl restart mariadb

Master-1 创建权限用户,Master-2 先设置为从服务器进行同步 Master-1 的数据库

MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.36.%' identified by 'centos';
Query OK, 0 rows affected (0.00 sec)

Master-2 同步Master-1

MariaDB [(none)]> CHANGE MASTER TO
    -> MASTER_HOST='192.168.36.101',
    ->  MASTER_USER='repluser',
    ->  MASTER_PASSWORD='centos',
    ->  MASTER_PORT=3306,
    ->  MASTER_LOG_FILE='mysql-bin.000001',
    ->  MASTER_LOG_POS=245;
Query OK, 0 rows affected (0.00 sec)

启用线程

MariaDB [(none)]> slave start;
Query OK, 0 rows affected (0.00 sec)

检查同步情况

MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> select user,password,host from user;
+----------+-------------------------------------------+--------------+
| user     | password                                  | host         |
+----------+-------------------------------------------+--------------+
| root     |                                           | localhost    |
| root     |                                           | 127.0.0.1    |
| root     |                                           | ::1          |
| repluser | *128977E278358FF80A246B5046F51043A2B1FCED | 192.168.36.% |
+----------+-------------------------------------------+--------------+
7 rows in set (0.00 sec)

Master-1 向 Master-2 进行同步

MariaDB [mysql]> CHANGE MASTER TO
    -> MASTER_HOST='192.168.36.103',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='centos',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=245;
Query OK, 0 rows affected (0.05 sec)

Master-1 同步状态

MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.36.103
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 245
               Relay_Log_File: mariadb-relay-bin.000003
                Relay_Log_Pos: 529
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
....
           Master_SSL_Allowed: No
....
             Master_Server_Id: 2
1 row in set (0.01 sec)
此时Master-1、Master-2 实现主主复制功能

半同步复制

   半同步复制的作用是:主服务器宕机后,所有备份服务器主动向同步数据最多的服务器进行数据的同步,以确保数据损失降到最低。

半同步是通过插件功能达成的

Master节点安装semisync_master.so插件
MariaDB [db1]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.07 sec)
启用插件功能
MariaDB [db1]> SET GLOBAL rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)
设置超时时长
MariaDB [db1]> SET GLOBAL rpl_semi_sync_master_timeout=6000;
Query OK, 0 rows affected (0.00 sec)
查看Master插件状态
MariaDB [db1]> show variables like '%semi%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | ON    |
| rpl_semi_sync_master_timeout       | 6000  |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+
4 rows in set (0.00 sec)
Master修改配置文件并重启数据库服务
[root@Master data]#cat /etc/my.cnf
[mysqld]
...
rpl_semi_sync_master_enabled        # 启用插件功能
...

[root@Master data]#systemctl restart mariadb
Slave节点安装semisync_slave.so插件
MariaDB [db1]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.00 sec)
启用slave插件功能
MariaDB [db1]> SET GLOBAL rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)
Slave修改配置文件并重启数据库服务
[root@Slave data]#cat /etc/my.cnf
[mysqld]
...
rpl_semi_sync_slave_enabled        # 启用插件功能
...

[root@Slave data]#systemctl restart mariadb
停止Slave 数据库服务进行测试
MariaDB [(none)]> create database db3;
Query OK, 1 row affected (6.00 sec)     # 由等待时长可以看出,半同步插件已经起到效果
您可能感兴趣的文档:

--结束END--

本文标题: 详细介绍MySQL如何开启主从复制实现数据同步

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

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

猜你喜欢
  • 详细介绍MySQL如何开启主从复制实现数据同步
    主从复制原理 主从复制线程 主节点    dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events 从节点    I/O T...
    99+
    2024-04-02
  • MySQL主从复制详细介绍
    一、主从复制的目的 ​ MySQL内建的复制功能是构建基于MySQL的大规模、高性能应用的基础,复制功能的目的是构建高性能的应用,同时也是高可用性、可扩展性、灾难恢复、备份以及数据仓库等工作的基础。比较常见的用途有以下几种: 数据分布:备份...
    99+
    2023-08-20
    mysql 数据库 服务器
  • MySQL主从复制之GTID模式详细介绍
    目录一、GTID概述二、GTID相较与传统复制的优势三、GTID自身存在哪些限制四、GTID工作原理简单介绍五、如何开启GTID复制六、查看GTID相关参数七、GTID与传统模式建立...
    99+
    2024-04-02
  • 实现↝Mysql数据库主从复制搭建与同步
    实现↝Mysql数据库主从复制搭建与同步 🔻 一、mysql 同步复制有关概述⛳ 前言、何为主从复制⛳ 1.1 mysql支持的复制方式⛳ 1.2 mysql支持的复制类型1....
    99+
    2023-09-17
    数据库 mysql msyql主从复制 linux 运维 服务器 centos
  • MySQL主从复制指定不同库表如何实现同步参数
    本文主要给大家介绍MySQL主从复制指定不同库表如何实现同步参数,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下MySQL主从复制指定不同库表如何实现...
    99+
    2024-04-02
  • 使用Xtarbakcup实现mysql主从同步详细步骤
    下面一起来了解下使用Xtarbakcup实现mysql主从同步详细步骤,相信大家看完肯定会受益匪浅,文字在精不在多,希望使用Xtarbakcup实现mysql主从同步详细步骤这篇短内容是你想要的。一、环境描...
    99+
    2024-04-02
  • mysql中三种复制机制异步复制,半同步复制和并行复制详细介绍
    下面一起来了解下mysql中三种复制机制异步复制,半同步复制和并行复制,相信大家看完肯定会受益匪浅,文字在精不在多,希望mysql中三种复制机制异步复制,半同步复制和并行复制这篇短内容是你想要的。**# 异...
    99+
    2024-04-02
  • MySQL实战之主从数据同步机制
    主从同步的重要性: 解决数据可靠性的问题需要用到主从同步;解决 MySQL 服务高可用要用到主从同步;应对高并发的时候,还是要用到主从同步。 一、MySQL 主从同步流程 当客户端提交一个事务到 MySQL 的集群,直到客户端收到集群返回...
    99+
    2023-09-08
    mysql 数据库 java
  • MySQL中怎么实现主从复制和半同步复制
    这篇文章将为大家详细讲解有关MySQL中怎么实现主从复制和半同步复制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、复制的介绍MySQL支持单向、异步复制...
    99+
    2024-04-02
  • 如何实现mysql主从复制及数据备份恢复
    这篇文章给大家分享的是有关如何实现mysql主从复制及数据备份恢复的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、主从服务器分别作以下操作:  1.1、版本一致 &n...
    99+
    2024-04-02
  • 主从复制2——拥有海量数据主服务器的主从复制模型详细实现;
    基本策略:此时需要在主服务器上先完全备份,还原到从服务器;接着开启主从复制; 如果直接使用主从复制,那么主从服务器的压力很大;主服务器数据全备份操作: [root@master ~]$mysqld...
    99+
    2024-04-02
  • 半同步与异步的MySQL主从复制如何配置
    这篇文章主要介绍了半同步与异步的MySQL主从复制如何配置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、MySQL主从复制原理这里我以M...
    99+
    2024-04-02
  • MySQL数据库主从同步的实现方法
    这篇文章主要讲解了MySQL数据库主从同步的实现方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。安装环境说明系统环境:[root@~]# cat /etc/redhat-re...
    99+
    2024-04-02
  • Mysql 中怎么实现主从数据库同步
    这篇文章给大家介绍Mysql 中怎么实现主从数据库同步,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、主服务器1.1、创建一个复制用户,具有replication slave 权限。...
    99+
    2024-04-02
  • MYSQL数据库如何设置主从同步
    目录1、配置主数据库2、配置从数据库总结MYSQL可以配置1个主数据库多个从数据库 1、配置主数据库 主master : 192.168.1.132 从slave : 192.168...
    99+
    2024-04-02
  • MySQL数据库主从同步实战过程详解
    本文实例讲述了MySQL数据库主从同步实战过程。分享给大家供大家参考,具体如下: 接上一篇:MySQL数据库入门之备份数据库 安装环境说明 系统环境: [root@~]# cat /etc/redhat-rele...
    99+
    2022-05-26
    MySQL 数据库 主从同步
  • MYSQL数据库主从同步设置的实现步骤
    目录为什么要主从同步?主从同步的原理MYSQL数据库进行主从同步创建两个MYSQL数据库初始化,安装主机数据库配置从机测试主从同步为什么要主从同步? 1、读写分离 主从同步分为一个主...
    99+
    2024-04-02
  • MySQL的主从复制是什么?怎么实现MySQL服务器的主从同步?
    MySQL的主从复制是什么?怎么实现MySQL服务器的主从同步?这些问题可能是我们日常工作会见到的。通过这些问题,希望你能收获更多。下面是揭开这些问题的详细内容。MySQL主从复制案例概述在企业网站中,后端...
    99+
    2024-04-02
  • Mariadb数据库主从复制同步配置过程实例
    目录一、环境规划二、mariadb的主从复制介绍1.主从复制简介2.半同步复制介绍3.主从复制原理图三、安装Mariadb1.配置yum仓库2.检查yum仓库3.安装mariadb4.启动mariadb服务5.从节点安装...
    99+
    2022-11-24
    Mariadb主从复制同步配置 Mariadb数据库主从配置
  • 如何进行mysql数据库主从同步中数据库同步配置
    这篇文章给大家介绍如何进行mysql数据库主从同步中数据库同步配置,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。背景: 最近有一个mysql数据库同步的需求,我用了mysql主从同步的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作