MySQL主从复制(三十五)

这篇具有很好参考价值的文章主要介绍了MySQL主从复制(三十五)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

目录

前言

一、MySQL Replication概述

1.1 MySQL Replication优点:

二、MySQL复制类型

2.1 异步复制(Asynchronous repication)

2.2 全同步复制(Fully synchronous replication)

2.3半同步复制(Semisynchronous replication)

三、MySQL支持的复制方式

3.1 基于SQL语句的复制

3.2 基于行的复制

3.3 混合模式复制

3.4 复制的工作过程: 

四、复制过程的限制

      部署MySQL主从异步复制

总结



前言

         数据库主从复制(Database Master-Slave Replication)是一种常用的数据库复制技术,用于实现数据的备份和故障恢复。主从复制通过将主数据库上的数据变更操作(如插入、更新、删除)复制到一个或多个从数据库中,从而保持主数据库和从数据库之间的数据一致性。


提示:以下是本篇文章正文内容,下面案例可供参考

一、MySQL Replication概述

        MySQL Replication俗称MySQL AB复制、主从复制、主从同步,是MySQL官方推荐的数据同步技术。数据同步基本过程为从数据库会实时去读取主数据库的二进制日志文件,按照日志中记录对从库进行同样的操作,以达到数据同步效果。

1.1 MySQL Replication优点:

  • 通过增加从服务器来提高数据库平台的可靠性。在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器地数量,从而调整数据库平台地高性能。
  • 提高数据安全性,因为数据已复制到从服务器,主数据库异常时,可以将从服务器复制进程终止来达到保护数据完整性地特点。
  • 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而缓解主服务器地性能压力。

二、MySQL复制类型

2.1 异步复制(Asynchronous repication)

        MySQL默认地复制是异步地,主库在执行完客户端提交地事务后会立刻将结果返回给客户端,并不关心从库是否已经接受并处理了事务,这样就会有一个问题,主库如果down掉了,此时主上已经提交地事务可能没有传到从库服务器上,如果此时,强制将从提升为主,可能会导致新主上的数据不完整。默认情况下MySQL5.5/5.6/5.7和mariaDB10.0/10.1的复制功能是异步的。

2.2 全同步复制(Fully synchronous replication)

        指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响,返回客户端的响应速度也会被拖慢。

2.3半同步复制(Semisynchronous replication)

         MySQL由Google贡献的补丁才开始支持半同步复制模式,介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接受到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。当出现超时情况时,源主服务器会暂时切换到异步复制模式,直到至少有一台设置为半同步复制模式的从服务器及时收到信息为止。

半同步复制模式在主服务器和从服务器同时启用,否则主服务器默认使用异步复制模式

三、MySQL支持的复制方式

3.1 基于SQL语句的复制

      在主服务器上执行的SQL语句,在从服务器上执行同样的SQL语句,效率比较高。

3.2 基于行的复制

       主服务器把表的行变化作为事件写入到二进制日志中,主服务器把代表了行变化的事件复制到从服务器中。

3.3 混合模式复制

       先采用基于语句的复制,一旦发现基于语句无法精确复制时,再采用行。

3.4 复制的工作过程: 

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

 

  1. 在每个事务更新完成数据之前,Master会在二进制日志中记录这些数据的语句,当MySQL将事务串行的写入二进制日志完成后,Master通知存储引擎提交事务并将数据写入磁盘
  2. Slave开启一个I/O工作线程,在Master之间建立一个连接,然后开始Binlog dump process,Binlog dump process会从Master的二进制日志中读取操作事件,如果已经跟Master达到一致状态,它会催眠并等待Master产生新的操作事件,I/O线程将这些改变数据的事件写入自己的中继日志。
  3. SQL Slave Thread(SQL工作线程)是处理MySQL Replication过程的最后一步。SQL线程从中继日志读取操作事件,重放其中的事件从而更新Slave服务器的数据,使slave与Master中的数据保持一致,只要该线程与I/O线程保持一致,中继日志通常会在OS的缓存中,所以中继日志的开销很小。

四、复制过程的限制

  • MySQL5.6之前的版本复制操作在slave上执行的是串行化的,也就是Master上的并行更新会导致数据复制延迟
  • 所有MySQL服务器的版本都要高于3.2,还有一个基本的原则就是从服务器的数据库版本可以高于主服务器数据库的版本,但是不可以低于主服务器的数据库版本。

部署MySQL主从异步复制

MySQL Master IP:192.168.10.136

MySQL Slave1 IP:192.168.10.3

MySQL Slave2 IP:192.168.10.4

配置MySQL Master服务器

1、在/etc/my.cnf中修改或者增加如下内容:

[root@localhost ~]# vim /etc/my.cnf

[mysqld]

server-id=1

log-bin=mysql-binlog

log-slave-updates=true

[root@localhost ~]# vim /etc/my.cnf

[mysqld]

server-id=1

log-bin=mysql-binlog

log-slave-updates=true

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

重启MySQL服务器

[root@localhost ~]# systemctl start mariadb

[root@localhost ~]# netstat -lnpt | grep 3306

tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      10073/mysqld

[root@localhost ~]# systemctl start mariadb

[root@localhost ~]# netstat -lnpt | grep 3306

tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      10073/mysqld

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

 

2、创建Replication用户

[root@localhost ~]# mysql -uroot -p123456

MariaDB [(none)]> grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.00 sec)

[root@localhost ~]# mysql -yroot -p123456

MariaDB [(none)]> grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges; 

Query OK, 0 rows affected (0.00 sec)

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

3、获得Master DB的相关信息

MariaDB [(none)]> show master status;

+---------------------+----------+--------------+------------------+

| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+---------------------+----------+--------------+------------------+

| mysql-binlog.000003 |      2245 |              |                  |

+---------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |     2245 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

 4、备份Master原有数据

如果在生产环境中Master服务器已经运行一段时间,或者Master服务器上已经存在数据,为了保证所有数据的一致性,需要先将Master目前已有的数据全部导给Slave服务器。

备份的方法有很多,可以直接备份数据文件,也可以使用mysqldump工具。全新搭建的环境不存在数据备份问题。

[root@mysql-master ~]# mysqldump -uroot --all-databases > /root/alldbbackup.sql

[root@mysql-master ~]# scp /root/ alldbbackup.sql root@192.168.10.3:/root/

[root@mysql-master ~]# scp /root/ alldbbackup.sql root@192.168.10.4:/root/

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

 5、在MySQL Slave上的配置

导入Master的备份脚本

[root@localhost ~]# systemctl start mariadb

[root@localhost ~]# mysql -uroot -p < /root/alldbbackup.sql

 MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

 从库连接主库进行测试,如果连接成功说明主库配置成功

[root@localhost ~]# mysql -u myslave -p123456 -h 192.168.10.136 

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

 修改MySQL配置文件

[root@localhost ~]# vim /etc/my.cnf

[mysqld]

server-id=2

relay-log=relay-log-bin

relay-log-index=slave-relay-bin.index

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

[mysqld]

server-id=2

relay-log=relay-log-bin

relay-log-index=slave-relay-bin.index

修改完后重启数据库

[root@localhost ~]# systemctl restart mariadb

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

 在Slave服务器授权,启动从库,进行主从库数据同步

[root@localhost ~]# mysql
MariaDB [(none)]>  stop slave;

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.10.136',MASTER_USER='myslave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=2245;

MariaDB [(none)]> start slave;

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.200.111
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-binlog.000003
          Read_Master_Log_Pos: 2245
               Relay_Log_File: relay-log-bin.000002
                Relay_Log_Pos: 529
        Relay_Master_Log_File: mysql-binlog.000003
             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: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 2245
              Relay_Log_Space: 821
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

6、测试复制是否成功

在Master服务器上创建一个数据库或者表,到Slave服务器上查看,如果配置成功就可以成功同步。

主库查看当前存在的库

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

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

 从库查看当前存在库

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

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

主库服务器创建库和表:

MariaDB [(none)]> create database sampdb;

Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use sampdb;

Database changed

MariaDB [sampdb]> create table new(name char(20),phone char(20));

Query OK, 0 rows affected (0.01 sec)

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

 从库验证:

MariaDB [(none)]> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sampdb             |

| test               |

+--------------------+

5 rows in set (0.00 sec)

MariaDB [(none)]> use sampdb

MariaDB [sampdb]> show tables;

+------------------+

| Tables_in_sampdb |

+------------------+

| new              |

+------------------+

1 row in set (0.00 sec)

MySQL主从复制(三十五),lq 云计算运维学习,运维,云计算,linux

 说明主从数据库创建成功。


总结

        数据库主从复制是一种常用的数据备份和故障恢复技术,通过将主数据库上的数据变更操作复制到一个或多个从数据库中来保持数据一致性。主从复制的好处包括数据备份、负载均衡、数据分析和全球分布等。主从复制的实现方式有多种,如基于日志的复制、基于行的复制和基于语句的复制等。主流的数据库系统,如MySQL、PostgreSQL和MongoDB等,都支持主从复制,并提供相应的配置和管理工具。文章来源地址https://www.toymoban.com/news/detail-613135.html

到了这里,关于MySQL主从复制(三十五)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql(九)mysql主从复制

    MySQL的内建功能是构建基于MySQL的大规模,高性能应用的基础,这类应用使用所谓的“水平扩展”的架构。我们可以通过为服务器配置一个或多个从库的方式来进行数据同步,复制功能不仅有利于构建高性能的应用,同时也是高可用,可扩展性,灾难恢复,备份以及数据仓库等

    2024年02月09日
    浏览(33)
  • MYSQL8主从复制

    关键点: 主库 创建一个 远程用户 并 授予复制权限 。 在 主库 和 从库 的 my.cnf 配置 服务器唯一id ; 开启 全局事务ID ; 在 my.cnf 文件中启用 二进制日志 记录,并为其分配一个 唯一的服务器 ID 。 关闭 主节点 和 从节点 的mysql服务。 主服务器配置 每个数据库实例的 服务器ID 要

    2024年02月01日
    浏览(55)
  • 【MySQL】主从复制

    MySQL是一款关系型数据库,被广泛应用于各种互联网应用中。随着业务的不断扩大,数据量不断增加,如何让MySQL具有更好的可用性和容灾能力成为了越来越重要的问题。本文将重点介绍MySQL主从复制和高可用性的实现,旨在为MySQL的使用者提供指导和帮助。 MySQL主从复制是指

    2024年02月20日
    浏览(31)
  • MySQL主从复制详解

    随着业务流量的增长,一台MySQL数据库服务器已经满足不了需求了,会负载过重,容易出现宕机的情况,导致数据的丢失。这个时候就需要实现数据库的负载均衡和读写分离,来减少单台MySQL数据库服务器的压力。我们可以通过使用MySQL内置的复制功能来搭建MySQL一主一从或一

    2024年02月10日
    浏览(29)
  • 简单搭建MySQL主从复制

    个人认为,90%的公司的数据体量和并发量压根用不上从服务器,结合Redis,一台性能强劲的云MySQL服务器,做好日常备份。足够了。 一个MySQL主(Master)服务器上的数据自动复制到至少一个的MySQL从(Slave)服务器的过程,利用bin log,主服务器上的数据更改会被自动地同步到从

    2024年03月09日
    浏览(41)
  • Docker mysql 主从复制

    目录 介绍:为什么需要进行mysql的主从复制 主从复制原理: ✨主从环境搭建 主从一般面试问题: 介绍:为什么需要进行mysql的主从复制 在实际的生产中,为了解决Mysql的单点故障已经提高MySQL的整体服务性能,一般都会采用 「主从复制」 。 比如:在复杂的业务系统中,有

    2024年01月17日
    浏览(30)
  • MySQL主从复制环境部署

    通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行 复制的这一过程叫做主从复制。 通过主从复制可以实现后续的读写分离,部署高可用架构等打下基础。 在进行同步前,最好使两边数据库内容保持一致、版本号尽量一致、操作系统

    2024年02月15日
    浏览(31)
  • MySQL主从分离读写复制

    在高负载的生产环境里,把数据库进行读写分离,能显著提高系统的性能。下面对MySQL的进行读写分离。 试验环境 A机:IP:192.168.0.1 mysql版本:mysql-5.6.4,主数据服务器(只写操作) B机:IP:192.168.0.2 mysql版本:mysql-5.6.4,从数据服务器(只读操作) 步骤     1.修改主数据库服务器

    2024年02月09日
    浏览(35)
  • MySQL ----主从复制、分离解析

    向上扩展,垂直扩展 向外扩展,横向扩展 读写分离 复制:每个节点都有相同的数据集,向外扩展,基于二进制日志的单向复制 什么是读写分离? 1、读写分离基本原理 基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作

    2024年02月11日
    浏览(48)
  • Mysql 主从复制、读写分离

    目录 前言 一、主从复制原理 1.1 MySQL的复制类型 1.2 mysql主从复制的工作原理 1.3 MySQL主从复制延迟 1.4 MySQL四种同步方式 1.5 MySQL支持的复制类型 二、 MySQL应用场景 三、主从复制实验 3.1 MySQL主从服务器时间同步 3.1.1 安装ntp、修改配置文件 3.1.2 两台SLAVE服务器配置 3.2 配置主从

    2024年02月16日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包