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日

相关文章

  • 如何保证缓存(redis)与数据库(MySQL)的一致性

    Redis是什么 首先要明白redis是一个数据库,redis是一个内存数据库(后端调用的,缓解sql数据库压力的,像双十一直接大量查询进入数据库,数据库会直接崩溃,所以在数据库前面先拦一下,先在缓存里查询,缓解压力), 所有数据基本上都存在于内存当中, 会定时以追加或者快照的方式刷新到硬盘中. 由于redis是一个内存数据库, 所以读取写入的速度是非常快的…

    Redis 2023年4月12日
    00
  • mysql无法成功启动服务的解决方法(通俗易懂!)

    下面是详细讲解如何解决 MySQL 启动服务失败的问题的完整攻略。 问题描述 当我们在 Windows 系统上安装 MySQL 数据库后,有可能会遇到无法成功启动 MySQL 服务的问题。此时,我们可以按照下面的步骤来解决这个问题。 解决方法 方法一:查看错误日志 首先,在 MySQL 安装目录下找到 data 目录,然后再进入 data 目录下的 host…

    database 2023年5月18日
    00
  • Android中数据库常见操作实例分析

    Android中数据库常见操作实例分析 在Android开发中,常常需要使用数据库进行数据的存储和管理。本文将针对Android中的数据库常见操作进行实例分析,包括创建数据库、创建数据表、插入数据、查询数据、删除数据等操作。 创建数据库 创建数据库的过程需要继承SQLiteOpenHelper类,重写onCreate()和onUpgrade()方法。 pub…

    database 2023年5月21日
    00
  • ASP.NET Core 使用Redis 存储Session 实现共享 Session

      1.添加nuget程序包: Microsoft.Extensions.Caching.Redis 2.在appsettings.json中添加Redis配置: “ConnectionRedis”: { “Connection”: “127.0.0.1:6379,allowAdmin=true,password=123456,defaultdatabase…

    Redis 2023年4月11日
    00
  • WEB服务器

    WEB服务器是一种能够接收来自客户端的HTTP请求并返回HTTP响应的计算机程序或设备。下面是WEB服务器的完整攻略: 什么是WEB服务器 WEB服务器是一种运行特定软件的计算机程序或设备,它能够接收来自客户端的HTTP请求、并返回HTTP响应。WEB服务器可以托管网站、网页、应用程序和其他数据,以便在互联网上供其他人访问。 WEB服务器最常用的HTTP服务…

    database 2023年5月22日
    00
  • MYSQL5.6.33数据库主从(Master/Slave)同步安装与配置详解(Master-Linux Slave-windows7)

    以下是详细讲解“MYSQL5.6.33数据库主从(Master/Slave)同步安装与配置详解(Master-Linux Slave-windows7)”的完整攻略。 概述 MySQL主从复制是一种基于二进制日志的复制方式,通过主库将产生的二进制日志传输到从库,在从库上重新执行来实现数据同步。这种方式可以减轻主库的负担并提高可用性。 环境要求 MySQL5.…

    database 2023年5月22日
    00
  • CentOS下Redis数据库的基本安装与配置教程

    CentOS下Redis数据库的基本安装与配置教程 1. 安装Redis 在CentOS系统下安装Redis是十分简单的。只需使用系统默认的yum包管理工具即可完成。 打开终端并输入以下命令以更新yum: bash sudo yum update 安装redis: bash sudo yum install redis 安装完成后,可通过以下命令检查Redi…

    database 2023年5月22日
    00
  • 详解MySQL的约束

    在 MySQL 中,约束是指对表中数据的一种约束,能够帮助数据库管理员更好地管理数据库,并且能够确保数据库中数据的正确性和有效性。 例如,在数据表中存放年龄的值时,如果存入 200、300 这些无效的值就毫无意义了。因此,使用约束来限定表中的数据范围是很有必要的。 在 MySQL 中,支持以下几种约束: 1. 主键约束(Primary Key Constra…

    MySQL 2023年3月9日
    00
合作推广
合作推广
分享本页
返回顶部