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

yizhihongxing

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日

相关文章

  • SQL Server全文检索查询浅析

    SQL Server全文检索查询浅析 背景 在实际应用中,往往需要在大量的文本数据中进行精准检索,这就需要使用全文检索技术。SQL Server自带全文检索功能,本文主要介绍如何使用SQL Server进行全文检索查询。 步骤 开启全文检索功能 为了开启全文检索功能,需要确保在SQL Server中启用了全文检索服务,并且在数据库表中添加了全文索引。可以通过…

    database 2023年5月21日
    00
  • MySQL 管理

    MySQL 是一款流行的关系型数据库管理系统,它提供了多种工具和功能来管理数据库。本文将详细讲解 MySQL 管理的完整攻略,帮助读者快速学会如何使用 MySQL。 1. 安装 MySQL 安装 MySQL 是使用它的前提,首先需要下载并安装 MySQL,可以从官方网站上下载适合自己操作系统的版本,安装过程中需要设置 root 用户密码,建议设置一个强密码。…

    database 2023年5月22日
    00
  • 只有mdf文件的数据库附加失败的修复方法分享(置疑、只读)

    这里为大家详细介绍“只有mdf文件的数据库附加失败的修复方法分享(置疑、只读)”。 问题描述 当我们在 SQL Server 管理器中尝试附加一个数据库时,有时会出现以下错误: Msg 5172, Level 16, State 15, Line 1 无法恢复附加数据库,因为该数据库副本与现有数据库冲突。选择的回滚操作无法执行。原因是,在包含初始快照的设备上…

    database 2023年5月21日
    00
  • 详细介绍Linux IO

    详细介绍Linux IO Linux内核IO子系统负责管理计算机系统与外部设备之间的交互(输入输出操作)。接下来,我们将详细介绍Linux IO的相关知识。 IO模型 在Linux中,IO模型可以分为5种具体类型:- 阻塞IO- 非阻塞IO- IO复用- 信号驱动IO- 异步IO 阻塞IO(Blocking IO) 阻塞IO是一种最简单的IO模型。应用程序在…

    database 2023年5月22日
    00
  • python爬虫之基金信息存储

    Python 爬虫之基金信息存储 简介 Python 爬虫是指利用 Python 这个语言和其他相关库,下载并解析互联网上的信息。本篇攻略将会介绍爬取基金信息的过程,并将获得的信息存储在本地文件中。我们会使用 requests 库来获取网页内容,使用 BeautifulSoup 库来解析网页,最后使用 Pandas 库将爬取的信息存储在本地文件中。 准备工作…

    database 2023年5月21日
    00
  • 关于linux(ubuntu 18.04) 中idea操作数据库失败的问题

    关于Linux (Ubuntu 18.04) 中 IntelliJ IDEA 操作数据库失败的问题,可以按照以下步骤进行排查和解决: 确认数据库服务是否开启 使用 IntelliJ IDEA 连接数据库前,需要先确保数据库服务已经开启。以 MySQL 数据库为例,在终端中执行以下命令查看 MySQL 服务是否已经启动: sudo systemctl stat…

    database 2023年5月19日
    00
  • Go语言编程中判断文件是否存在是创建目录的方法

    在Go语言中,判断文件是否存在并创建目录一般可以通过os.Stat函数和os.MkdirAll函数来完成。 检查文件是否存在 可以使用os.Stat函数来检查文件是否存在,如果文件存在则返回nil,否则返回一个错误。 package main import ( "fmt" "os" ) func main() { _,…

    database 2023年5月22日
    00
  • PHP中的Memcache详解

    PHP中的Memcache详解 什么是Memcache? Memcache是一个开源的高性能分布式内存对象缓存系统,用来加速动态Web应用程序的访问速度,减轻数据库负载。通过让常用数据存在内存中,可以大幅度提高Web应用程序的响应速度。 安装 在Linux或macOS系统中,使用命令行工具(如Terminal)输入以下命令来安装Memcache扩展。 sud…

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