MySQL主从复制的原理及配置方法(比较详细)

MySQL主从复制的原理及配置方法

1. 原理

MySQL主从复制是一种数据备份和数据读写分离的解决方案,能够实现多台MySQL服务器之间的数据同步。主从复制主要由一个主库和多个从库组成,主库将数据更新操作通过二进制日志(Binary Log)记录下来,从库通过读取主库的二进制日志实现数据的同步。

主从复制的原理大致如下:

  1. 首先需要在主库上启用二进制日志(Binary Log),将所有的数据更新操作记录到二进制日志中。
  2. 当从库连接到主库时,主库会将所有的二进制日志文件名和位置信息传给从库。
  3. 从库通过解析主库传输过来的二进制日志,将其中的更新操作复制到本地的数据文件中。
  4. 当主库有数据更新时,从库会从主库获取最新的二进制日志并解析,然后将其中的更新操作更新到本地的数据文件中。

主从复制的好处在于,从库可以通过读取本地的数据文件提供读操作,降低主库的压力,提高MySQL服务器的性能和可用性。

2. 配置方法

下面我们来讲解如何在MySQL服务器上配置主从复制。假设主库的IP地址为192.168.1.10,从库的IP地址为192.168.1.20。

2.1. 在主库上配置

  1. 编辑主库的my.cnf配置文件,启用二进制日志

在my.cnf中加入以下内容:

[mysqld]
log-bin=mysql-bin
server-id=1

其中log-bin设置二进制日志的文件名前缀,server-id设置服务器唯一ID号,该号在整个复制环境中必须唯一。

  1. 重启MySQL服务器,使配置生效
systemctl restart mysql
  1. 创建用户名为repl的用户并授权复制操作
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.20' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;

其中repl为用户名,192.168.1.20为从库IP地址,password为密码,需要替换成实际值。

  1. 查看主库状态并记录Binary Log文件名和位置信息
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |     107  |              |                  |
+------------------+----------+--------------+------------------+

记录File和Position的值,这两个值在从库连接主库时会用到。

2.2. 在从库上配置

  1. 编辑从库的my.cnf配置文件

在my.cnf中加入以下内容:

[mysqld]
server-id=2

其中server-id为服务器唯一ID号,该号在整个复制环境中必须唯一。

  1. 重启MySQL服务器,使配置生效
systemctl restart mysql
  1. 连接主库并设置主从同步
mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.1.10',
    -> MASTER_USER='repl',
    -> MASTER_PASSWORD='password',
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=107;
mysql> START SLAVE;

其中MASTER_HOST为主库IP地址,MASTER_USER为主库授权的帐号名,MASTER_PASSWORD为密码,MASTER_LOG_FILE和MASTER_LOG_POS为从主库记录的二进制日志文件名和位置,需要从主库记录的结果中复制。

  1. 查看从库状态
mysql> SHOW SLAVE STATUS\G

如果看到如下信息,说明主从同步已经成功:

           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes

3. 示范

以下是两个示例,演示了在Ubuntu 18.04系统上配置MySQL主从复制。

示例一:在主机上配置

  1. 安装MySQL服务器(假设已经安装了)
sudo apt-get install mysql-server
  1. 启用二进制日志

在/etc/mysql/mysql.conf.d/mysqld.cnf文件中添加以下内容:

[mysqld]
log-bin=mysql-bin
server-id=1
  1. 重启MySQL服务器
sudo systemctl restart mysql
  1. 授权复制操作
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.20' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
  1. 查看主库状态并记录Binary Log文件名和位置信息
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |     107  |              |                  |
+------------------+----------+--------------+------------------+
  1. 配置防火墙开放3306端口
sudo ufw allow 3306/tcp

示例二:在从机上配置

  1. 安装MySQL服务器
sudo apt-get install mysql-server
  1. 加入冗杂的配置main.cnf
sudo vim /etc/mysql/mysql.conf.d/main.cnf
  1. 添加server-id=2
[mysqld]
server-id=2
  1. 重启MySQL服务器
sudo systemctl restart mysql
  1. 连接主库并设置主从同步
mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.1.10',
    -> MASTER_USER='repl',
    -> MASTER_PASSWORD='password',
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=107;
mysql> START SLAVE;
  1. 查看从库状态
mysql> SHOW SLAVE STATUS\G

如果看到如下信息,说明主从同步已经成功:

           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL主从复制的原理及配置方法(比较详细) - Python技术站

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

相关文章

  • MySQL学习(七):Innodb存储引擎索引的实现原理详解

    MySQL学习(七):Innodb存储引擎索引的实现原理详解 索引的概念 索引是一种数据结构,它可以帮助我们快速的定位特定数据。在数据库中,我们可以通过创建合适的索引来提高多种操作的效率,比如查询、排序、连接、聚合等。 Innodb存储引擎 Innodb是MySQL自带的一种存储引擎,它支持事务、行级锁等高级特性,因此被广泛应用在各种复杂应用场景中。 索引的…

    database 2023年5月22日
    00
  • SQL Server系统函数介绍

    SQL Server系统函数介绍 SQL Server系统函数是SQL Server数据库管理系统提供的一系列内置函数,它们可以用来处理各种数据类型,执行各种数学和字符串计算等操作。本文将介绍一些常用的SQL Server系统函数。 数据类型转换函数 CAST CAST函数可以将某种数据类型转换为另一种数据类型。例如,我们可以将一个字符串转换为整数: SEL…

    database 2023年5月21日
    00
  • Redis 的 GEO 特性将在 Redis 3.2 版本释出

    Redis 的 GEO 特性将在 Redis 3.2 版本释出, 这个功能可以将用户给定的地理位置信息储存起来, 并对这些信息进行操作。 本文将对 Redis 的 GEO 特性进行介绍, 说明这个特性相关命令的用户, 并在最后说明如何使用这些命令去实现“查找附近的人”以及“摇一摇”这两个功能。   版本要求 因为 Redis 目前的稳定版本为 Redis 3…

    Redis 2023年4月11日
    00
  • MySQL给数据库表添加字段

    MySQL 给数据库表添加字段的方法: ALTER TABLE 语句 ALTER TABLE 语句可以在数据表中添加、修改或删除字段。 添加字段: 语法:ALTER TABLE table_name ADD column_name column_definition; 例: ALTER TABLE student ADD age INT(3); 在 stud…

    MySQL 2023年3月9日
    00
  • 面试题锦集:1、数据库三大范式,2、mysql索引类型及作用,3、事务的特性和隔离级别

    目录 面试题集锦 一、数据库三大范式 二、mysql有哪些索引类型及作用 三、事务的特性和隔离级别 1、事务的四大特性 2、事务的隔离级别 3、什么是脏读、不可重复度、幻读 4、解决办法 面试题集锦 一、数据库三大范式 第一范式(1NF): 指数据库中表的每一列都是不可分割的最小单位 # 分割前: 地址 安徽省合肥市蜀山区 # 分割后: 省 | 市 | 区 …

    MySQL 2023年4月8日
    00
  • 如何使用Python实现按照日期范围查询数据库数据?

    以下是使用Python实现按照日期范围查询数据库数据的完整攻略。 按照日期范围查询简介 按照日期范围查询是指在数据库中查询一时间范围内的数据。在Python中,可以使用pymysql库实现按照日期范围查询数据库数据。 步骤1:连接到数据库 在Python中,可以使用pymysql库连接到MySQL数据库。以下是连接到MySQL数据库的基本语法: import…

    python 2023年5月12日
    00
  • nacos无法连接mysql的解决方法

    下面是关于“nacos无法连接mysql的解决方法”的完整攻略: 问题描述 在使用Nacos时,mysql 数据库可能出现连接失败的情况。此时,无法正常使用 Nacos 服务。 解决方法 在解决此问题之前,需要先明确一下可能出现的原因,有以下几点: 数据库配置信息有误 mysql数据库未运行或未成功启动 mysql数据库出现了其他问题 为了解决以上问题,我们…

    database 2023年5月22日
    00
  • 彻底杀掉redis挖矿程序及其守护进程wnTKYg

    今天又遇到了一件烦心的事,前几天刚解决服务器内存跑满的问题,今天又碰到了神奇而又久违的redis挖矿程序。 查询了一下挖矿,就是有人借助redis漏洞借用别人的服务器进行挖矿。 上次做电子商城项目时,开发过程中环境用的阿里云服务器,中途碰到了俄罗斯的ip成功黑了我的服务器,好在文件访问权限有限制,对方仅给我home目录加了密。后来,实在担心留有其它隐藏程序,…

    Redis 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部