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日

相关文章

  • 用MyEclipse配置DataBase Explorer(图示)

    下面介绍使用MyEclipse配置DataBase Explorer的完整攻略。 步骤一:打开MyEclipse 首先,打开MyEclipse,在其主界面中点击窗口顶部的“Window”选项,选择 “Open Perspective” -> “Database Development”。 步骤二:新建数据库连接 在左侧的“Database Connec…

    database 2023年5月22日
    00
  • linux下使用cmake编译安装mysql的详细教程

    以下是“linux下使用cmake编译安装mysql的详细教程”的完整攻略。 安装依赖项 在编译过程之前,请先确保您的系统上已经安装了以下依赖项: sudo apt-get install build-essential cmake libncurses5-dev libssl-dev libboost-dev 下载源码 从MySQL 官网上下载源码,将其解…

    database 2023年5月22日
    00
  • c#操作Redis的5种基本类型汇总(转载)

    前言 在我们的项目中,通常会把数据存储到关系型数据库中,比如Oracle,SQL Server,Mysql等,但是关系型数据库对于并发的支持并不是很强大,这样就会造成系统的性能不佳,而且存储的数据多为结构化数据,对于非结构数据(比如文本)和半结构化数据(比如JSon) 就显得不够灵活,而非关系型数据库则很好的弥补了这两点, 我们通常把读操作频繁的数据写入Re…

    Redis 2023年4月12日
    00
  • MySQL修改用户(RENAME USER)

    MySQL是一款用于处理关系型数据库的开源软件。在MySQL中,我们通过“用户”来限制对于数据库的访问权限。在实际的工作中,由于各种原因,我们可能需要修改MySQL用户的账号名或密码等信息。本文将介绍如何在MySQL中修改用户的方法。 RENAME USER语法 MySQL提供了RENAME USER语句来修改用户的账号名。语句的一般语法如下: RENAME…

    MySQL 2023年3月10日
    00
  • Windows7下如何在命令行使用MySQL

    在Windows 7下使用MySQL命令行,需要以下步骤: 步骤一:安装MySQL 下载MySQL Windows版安装程序安装包,从MySQL官网下载对应版本的安装程序: https://dev.mysql.com/downloads/installer/ 打开安装程序并选择Custom类型安装,选择需要安装的MySQL版本,以及要安装的MySQL工具和驱…

    database 2023年5月22日
    00
  • Windows Server 2008 架设 Web 服务器教程(图文详解)

    接下来请你详细讲解“Windows Server 2008 架设 Web 服务器教程(图文详解)”的完整攻略。 Windows Server 2008 架设 Web 服务器教程 准备工作 安装 Windows Server 2008 系统。 安装 IIS 网络服务。 配置 IIS 网络服务 打开 IIS 管理器,选中“网站”节点,右键单击,选择“添加网站”。…

    database 2023年5月22日
    00
  • 聊聊Docker不适合跑 MySQL 的N个原因

    下面是关于“聊聊Docker不适合跑MySQL的N个原因”的完整攻略。 1.概述 Docker 极大地简化了应用程序的部署和管理过程,但是在运行 MySQL 这类数据库服务时,Docker 可能并不是最好的选择。在这篇文档中,我们将讨论 Docker 不适合跑 MySQL 的 N 个原因。 2.Docker 部署 MySQL 的问题 2.1. 数据持久化的问…

    database 2023年5月22日
    00
  • sql format()函数的用法及简单实例

    当我们在开发web应用时,在处理sql查询语句时,往往需要在查询语句中动态地加入一些变量,这些变量来自于用户的输入或系统计算。为了防止sql注入攻击和保持查询语句的可读性,我们通常需要使用特定的sql处理函数来将变量与sql字符串进行拼接。 SQL中的format()函数可以方便地实现将变量与字符串拼接的功能。该函数的基本语法如下: FORMAT( form…

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