mysql 复制原理与实践应用详解

Mysql 复制原理与实践应用详解

什么是MySQL复制

Mysql 复制是指将一个Mysql服务器上的数据,同步到另一个Mysql服务器上的一个过程,主要用于:
- 分布式集群:多台MySQL服务器组成一个集群,进行负载均衡和故障转移。
- 数据备份:主服务器上的数据可以被同步到备用服务器上,以用于备份或恢复。

MySQL 复制的工作原理

Mysql 复制的工作原理是基于二进制日志(binlog)实现的。binlog 是MySQL服务器上一种记录数据库操作日志的机制。binlog 会记录数据库的DDL、DML操作语句以及事务信息。数据同步主要是通过主库生成binlog, 然后备库根据主库中的binlog进行数据更新。

具体步骤如下:
1. 主库生成binlog,存储到本地的二进制日志文件中(mysql-bin.000001,mysql-bin.000002...)
2. 备库连接主库,启动I/O线程,读取主库的binlog日志保存到本地的relay log文件中。(relay log 是备用服务器生成的中转日志文件)
3. 备库连接主库,启动SQL线程。主库上记录的二进制日志被传给备库后,通过SQL线程在备库上执行,从而完成备库中的数据同步操作。
4. 备库定期心跳检测,判断与主库是否正常连接。当主库发生故障无法连接时,备库会成为主库的角色。

MySQL 复制的配置

MySQL 复制包含主库和从库,主库用于生产binlog,从库通过读取binlog文件,执行主库的操作即可实现数据的同步。因此,需要对主库和从库进行配置。

主库配置步骤

  1. 编辑MySQL服务器配置:my.cnf文件,开启binlog功能
log-bin=mysql-bin  #开启二进制日志
binlog_format=STATEMENT #配置binlog日志格式
server_id=<主库编号> #主库编号要唯一
  1. 创建从库用户,并给予从库复制权限
grant replication slave on *.* to 'slave_user'@'从库IP地址' identified by 'password';
flush privileges;

从库配置步骤

  1. 编辑MySQL服务器配置:my.cnf文件,开启从库在本地放置Binary Log的选项
log-bin=mysql-slave-bin # 开启binlog,用于从库生成中转日志文件。
  1. 配置从库连向主库的信息
change master to master_host='主库IP地址', master_user='slave_user', 
master_password='password', master_port=<主库端口号>, master_log_file= '<主库二进制日志文件名>', 
master_log_pos=<主库二进制日志位置>;
  • master_host : 主库的ip地址
  • master_user : 主库用户名称,该用户必须拥有复制权限
  • master_password : 主库的用户密码
  • master_port : 主库使用的端口号,默认为3306
  • master_log_file : 主库上正在写入二进制日志的文件名
  • master_log_pos : 正在写入的二进制日志文件的位置。

  • 开启从库的复制服务 begin

mysql> start slave;

MySQL复制的应用实践

实践1:主从同步

  1. 配置主库,开启binlog功能,并创建slave_user, 并给予从库复制权限,此处不再赘述。
  2. 配置从库连向主库的信息
change master to master_host='192.168.0.188', master_user='slave_user', 
    master_password='password', master_port=3306, master_log_file= 'mysql-bin.000012', 
    master_log_pos=4952239;

注意: master_log_filemaster_log_pos的值应该和主库上保持一致,用于数据同步。

  1. 开启从库的复制服务
mysql> start slave;

此时可以通过show slave status\G;命令查看从库的状态,确保从库的无错状态:

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.188
   ..........

实践2:主主同步

主主同步是指两个服务器之间的相互备份。实现步骤同上,这里介绍不同之处。
1. 配置主库1开启binlog功能,创建slave_user,并给予从库复制权限,此处不再赘述。
2. 配置主库2与主库1同步,开启binlog功能。
3. 配置主库1从主库2同步,如下:

change master to master_host='主库2的IP地址', master_user='slave_user', 
    master_password='password', master_port=3306, master_log_file= 'mysql-bin.000012', 
    master_log_pos=4952239;

mysql> start slave;

然后在两个库之间进行数据的修改,主库2的数据也会同步到主库1中。

总结

MySQL复制通过binlog文件实现数据同步。需要进行主库和从库的配置,主库开启binlog, 从库连向主库并开启复制服务即可完成数据同步的操作。同时,MySQL复制支持主从同步,以及主主同步,用于完成数据的备份,负载均衡和故障转移等操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql 复制原理与实践应用详解 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • MySQL 案例分析讲解外连接语法

    MySQL 案例分析讲解外连接语法 外连接是 SQL 查询中的一个强大而重要的概念,可以让我们从多个表中获取需要的数据。在 MySQL 中,外连接的语法有多种,本文将讲解其中的几种常用的语法。 左外连接语法(LEFT JOIN) 左外连接会返回左表中所有的数据行,以及右表中符合条件的数据行。如果右表中没有符合条件的数据行,则返回 NULL 值。左外连接的语法…

    database 2023年5月22日
    00
  • Linux系统上Gitlab客户端安装配置全攻略

    Linux系统上Gitlab客户端安装配置全攻略 安装Git客户端 首先需要在Linux系统上安装Git客户端,以Ubuntu为例,在终端中输入以下命令进行安装: sudo apt-get update sudo apt-get install git 安装并配置Gitlab客户端 进入Gitlab官网,注册账号并登录。 在个人首页的右上角,点击“设置”按钮…

    database 2023年5月22日
    00
  • CentOS 7安装Mysql并设置开机自启动的方法

    CentOS 7安装Mysql并设置开机自启动的方法 在CentOS 7上安装Mysql并设置开机自启动,可以按照如下步骤: 1. 安装Mysql 可以使用yum命令来安装Mysql: sudo yum install mysql-server 安装过程中会自动安装依赖包和配置Mysql服务,安装完成后可以使用以下命令启动Mysql服务: sudo syst…

    database 2023年5月22日
    00
  • MySQL 子查询和分组查询

    MySQL 子查询和分组查询是 SQL 语言中非常重要的两个查询方式,本篇攻略将详细讲解这两种查询方法的使用和应用场景。 子查询 子查询也称为内查询,是指在一个 SQL 语句中嵌套了另一个 SELECT 语句,通常用来做为外查询的限定条件。 基本语法 子查询的基本语法如下: SELECT column FROM table WHERE column oper…

    database 2023年5月22日
    00
  • redis源码分析3—结构体—字典

    字典,简单来说就是一种用于保存键值对的抽象数据结构; 注意,字典中每个键都是独一无二的;在redis中,内部的redis的数据库就是使用字典作为底层实现的;     1 字典的实现      在redis中,字典是使用哈希表作为底层实现的,一个hash表里面可以有多个hash表节点,而每个hash表节点就保存了字典中的一个键值对;   hash表定义 tab…

    Redis 2023年4月11日
    00
  • SQL 识别字符串里的数字字符

    要识别字符串里的数字字符,可以使用SQL中的内置字符串函数,比如REGEXP_SUBSTR()、REGEXP_REPLACE()等。 使用REGEXP_SUBSTR()函数 REGEXP_SUBSTR()函数可以从一个字符串中提取满足正则表达式条件的子串,从而识别字符串中的数字字符。 例如,我们要从字符串”abcd12345efg”中识别数字字符,可以使用以…

    database 2023年3月27日
    00
  • MySQL COUNT(*)性能原理详解

    MySQL COUNT(*)性能原理详解 什么是COUNT(*)函数 COUNT()是MySQL中的一个聚合函数,在查询时用于统计满足条件的行数,其中星号()表示统计所有行。它可以用于统计一张表中的行数,或者某个条件下的行数。 COUNT(*)的使用场景 COUNT(*)常常被用来统计数据库中数据的总量、每个分类下的记录数等,常和GROUP BY一起使用。 …

    database 2023年5月22日
    00
  • gem install redis报错的解决方案

    下面是gem install redis报错的解决方案的完整攻略。 问题描述 在使用gem install redis命令安装Redis gem时,可能会遇到以下报错信息: ERROR: Error installing redis: ERROR: Failed to build gem native extension. 解决方案 1. 安装Redis 由…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部