MySQL数据库双机热备的配置方法详解

 更新时间:2025年11月11日 10:40:02   作者:牛肉胡辣汤  
在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(Master-Slave)是一种常见的解决方案,本文将详细介绍如何配置MySQL的双机热备环境,需要的朋友可以参考下

1. 环境准备

假设我们有两台服务器,分别作为主服务器(Master)和从服务器(Slave):

  • 主服务器(Master):192.168.1.100
  • 从服务器(Slave):192.168.1.101

1.1 安装MySQL

确保两台服务器上都安装了相同版本的MySQL。可以使用以下命令安装MySQL:

sudo apt-get update
sudo apt-get install mysql-server

1.2 配置MySQL

1.2.1 主服务器配置

编辑主服务器的MySQL配置文件​​/etc/mysql/my.cnf​​,添加或修改以下内容:

[mysqld]
server-id=1
log_bin=/var/log/mysql/mysql-bin.log
binlog_do_db=your_database_name
  • ​server-id​​:每个MySQL实例必须有一个唯一的ID。
  • ​log_bin​​:指定二进制日志文件的路径。
  • ​binlog_do_db​​:指定需要同步的数据库名称。

重启MySQL服务以使配置生效:

sudo systemctl restart mysql

1.2.2 从服务器配置

编辑从服务器的MySQL配置文件​​/etc/mysql/my.cnf​​,添加或修改以下内容:

[mysqld]
server-id=2
relay-log=/var/log/mysql/mysql-relay-bin.log
log_bin=/var/log/mysql/mysql-bin.log
  • ​server-id​​:每个MySQL实例必须有一个唯一的ID。
  • ​relay-log​​:指定中继日志文件的路径。
  • ​log_bin​​:指定二进制日志文件的路径。

重启MySQL服务以使配置生效:

sudo systemctl restart mysql

2. 配置主从复制

2.1 创建复制用户

在主服务器上创建一个用于复制的用户,并授予相应的权限:

CREATE USER 'repl'@'192.168.1.101' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101';
FLUSH PRIVILEGES;

2.2 获取主服务器的二进制日志文件和位置

在主服务器上执行以下命令,获取当前二进制日志文件和位置:

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

记录下​​File​​和​​Position​​的值,例如:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 12345    | your_database|                  |
+------------------+----------+--------------+------------------+

2.3 配置从服务器

在从服务器上执行以下命令,配置从服务器连接到主服务器:

CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=12345;

2.4 启动从服务器的复制线程

在从服务器上启动复制线程:

START SLAVE;

2.5 检查复制状态

在从服务器上检查复制状态:

SHOW SLAVE STATUS\G

确保​​Slave_IO_Running​​和​​Slave_SQL_Running​​都为​​Yes​​,表示复制正常运行。

3. 测试主从复制

在主服务器上创建一个测试表并插入一些数据:

CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(100));
INSERT INTO test_table VALUES (1, 'Alice'), (2, 'Bob');

在从服务器上检查数据是否同步:

USE test_db;
SELECT * FROM test_table;

如果数据已经同步到从服务器,说明主从复制配置成功。

MySQL的双机热备(也称为主从复制)是一种常见的高可用性解决方案,通过在两台或多台服务器之间同步数据来提高系统的可靠性和性能。在主从复制中,一台服务器作为主服务器(Master),负责处理所有的写操作;其他服务器作为从服务器(Slave),负责读取数据并复制主服务器的数据变更。

下面是一个基本的MySQL主从复制配置步骤和示例代码:

1. 配置主服务器(Master)

首先,在主服务器上编辑MySQL配置文件​​my.cnf​​或​​my.ini​​,通常位于​​/etc/mysql/​​目录下,添加或修改以下内容:

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=row
  • ​server-id​​:每个MySQL实例必须有一个唯一的ID。
  • ​log-bin​​:启用二进制日志,用于记录所有更改数据库的操作。
  • ​binlog-format​​:设置二进制日志格式为行格式,这有助于更精确地复制数据。

重启MySQL服务以应用更改:

sudo systemctl restart mysql

2. 创建复制用户

在主服务器上创建一个专门用于复制的用户,并赋予相应的权限:

CREATE USER 'replication'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
FLUSH PRIVILEGES;

3. 获取主服务器的状态信息

执行以下命令获取主服务器的当前二进制日志文件名和位置,这些信息将在配置从服务器时使用:

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

输出示例:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      120 |              |                  |
+------------------+----------+--------------+------------------+

记住​​File​​和​​Position​​的值,因为它们将用于配置从服务器。

4. 解锁表

在获取了必要的信息后,解锁表:

UNLOCK TABLES;

5. 配置从服务器(Slave)

编辑从服务器上的MySQL配置文件​​my.cnf​​或​​my.ini​​,添加或修改以下内容:

[mysqld]
server-id=2
relay-log=mysql-relay-bin
log-slave-updates=1
read-only=1
  • ​server-id​​:确保与主服务器不同。
  • ​relay-log​​:指定中继日志文件的名称。
  • ​log-slave-updates​​:允许从服务器将其接收到的更新记录到自己的二进制日志中。
  • ​read-only​​:使从服务器只读,防止意外的数据修改。

重启MySQL服务以应用更改:

sudo systemctl restart mysql

6. 配置从服务器连接主服务器

在从服务器上执行以下SQL命令,配置从服务器连接到主服务器:

CHANGE MASTER TO
MASTER_HOST='master_server_ip',
MASTER_USER='replication',
MASTER_PASSWORD='your_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=120;
  • ​MASTER_HOST​​:主服务器的IP地址。
  • ​MASTER_USER​​:在主服务器上创建的复制用户的用户名。
  • ​MASTER_PASSWORD​​:复制用户的密码。
  • ​MASTER_LOG_FILE​​ 和 ​​MASTER_LOG_POS​​:从主服务器的​​SHOW MASTER STATUS;​​命令中获得的值。

7. 启动从服务器的复制进程

在从服务器上启动复制进程:

START SLAVE;

检查复制状态:

SHOW SLAVE STATUS\G

确保​​Slave_IO_Running​​和​​Slave_SQL_Running​​都显示为​​Yes​​,表示复制正在正常运行。

8. 测试复制

在主服务器上创建一个测试数据库和表,并插入一些数据,然后检查从服务器上是否同步了这些更改。

-- 在主服务器上
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(100));
INSERT INTO test_table VALUES (1, 'Test');
 
-- 在从服务器上
USE test_db;
SELECT * FROM test_table;

如果从服务器上能看到相同的表和数据,说明主从复制配置成功。

MySQL数据库的双机热备(也称为主从复制)是一种常见的高可用性解决方案,它通过在两台或多台服务器之间同步数据来确保系统的可靠性和连续性。主从复制的基本原理是将一台MySQL服务器设置为主服务器(Master),另一台或多台设置为从服务器(Slave)。主服务器上的所有更改都会被记录到二进制日志(Binary Log)中,从服务器则会读取这些日志并应用相应的更改。

以下是配置MySQL主从复制的基本步骤,包括所需的SQL命令和配置文件修改:

1. 配置主服务器

修改主服务器的​​my.cnf​​配置文件

首先,需要编辑主服务器的MySQL配置文件(通常是​​/etc/mysql/my.cnf​​或​​/etc/my.cnf​​),添加或修改以下内容以启用二进制日志和唯一服务器ID:

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=row
  • ​server-id​​:每个MySQL实例必须有一个唯一的标识符。
  • ​log-bin​​:指定二进制日志的前缀名。
  • ​binlog-format​​:设置二进制日志格式,推荐使用​​row​​模式。

重启MySQL服务

保存配置文件后,重启MySQL服务使配置生效:

sudo systemctl restart mysql

创建用于复制的用户

在主服务器上创建一个专门用于复制的MySQL用户,并赋予相应的权限:

CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
  • ​CREATE USER​​:创建新用户。
  • ​GRANT REPLICATION SLAVE​​:授予该用户复制权限。
  • ​FLUSH PRIVILEGES​​:刷新权限表,使更改立即生效。

获取二进制日志位置

在开始复制之前,需要锁定主服务器的数据表,获取当前的二进制日志文件名和位置:

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

2. 配置从服务器

修改从服务器的​​my.cnf​​配置文件

同样地,编辑从服务器的MySQL配置文件,添加或修改以下内容:

[mysqld]
server-id=2
  • ​server-id​​:设置与主服务器不同的唯一标识符。

重启MySQL服务

保存配置文件后,重启MySQL服务:

sudo systemctl restart mysql

配置从服务器连接主服务器

在从服务器上执行以下SQL命令,配置从服务器连接到主服务器,并指定二进制日志文件和位置:

CHANGE MASTER TO
MASTER_HOST='master_host_ip',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=4;
  • ​MASTER_HOST​​:主服务器的IP地址。
  • ​MASTER_USER​​、​​MASTER_PASSWORD​​:用于复制的用户名和密码。
  • ​MASTER_LOG_FILE​​、​​MASTER_LOG_POS​​:从哪个二进制日志文件和位置开始复制。

启动复制进程

启动从服务器的复制进程:

START SLAVE;

3. 验证复制状态

在从服务器上检查复制状态,确保一切正常:

SHOW SLAVE STATUS\G

重点查看以下几个字段:

  • ​Slave_IO_Running​​ 和 ​​Slave_SQL_Running​​ 应该都显示为 ​​Yes​​。
  • ​Last_Error​​ 和 ​​Last_IO_Error​​ 应该为空。

如果一切正常,那么主从复制就已经成功配置了。

注意事项

  • 确保主从服务器之间的网络连接畅通。
  • 定期检查复制状态,确保没有延迟或错误。
  • 考虑使用SSL加密复制通道,提高安全性。

以上就是MySQL数据库双机热备的配置方法详解的详细内容,更多关于MySQL双机热备配置的资料请关注脚本之家其它相关文章!

相关文章

  • 图文详解MySQL中两表关联的连接表如何创建索引

    图文详解MySQL中两表关联的连接表如何创建索引

    这篇文章通过图文给大家介绍了关于MySQL中两表关联的连接表如何创建索引的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • MySQL数据库中数值字段类型长度int(11)和Decimal(M,D)详解

    MySQL数据库中数值字段类型长度int(11)和Decimal(M,D)详解

    这篇文章主要介绍了MySQL数据库中数值字段类型长度int(11)和Decimal(M,D)字段详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 前端传参数进行Mybatis调用mysql存储过程执行返回值详解

    前端传参数进行Mybatis调用mysql存储过程执行返回值详解

    这篇文章主要介绍了前端传参数进行Mybatis调用mysql存储过程执行返回值详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • mysql8.0 .ibd文件恢复表结构的实现

    mysql8.0 .ibd文件恢复表结构的实现

    本文主要介绍了mysql8.0 .ibd文件恢复表结构的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • MySQL 性能优化的最佳20多条经验分享

    MySQL 性能优化的最佳20多条经验分享

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。
    2010-07-07
  • Mysql如何获取json字符串/数组的值

    Mysql如何获取json字符串/数组的值

    这篇文章主要介绍了Mysql如何获取json字符串/数组的值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • MySQL索引失效问题及解决方案

    MySQL索引失效问题及解决方案

    这篇文章主要介绍了MySQL索引失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • MySQL将时间戳转换为年月日格式的实现

    MySQL将时间戳转换为年月日格式的实现

    在我们的项目开发过程中,经常需要将时间戳或日期时间字段转换为特定的格式,本文主要介绍了MySQL将时间戳转换为年月日格式的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • MySQL修改安全策略时报错:ERROR 1193 (HY000)的解决办法

    MySQL修改安全策略时报错:ERROR 1193 (HY000)的解决办法

    这篇文章主要给大家介绍了关于MySQL修改安全策略时报错:ERROR 1193 (HY000): Unknown system variable ‘validate_password_policy‘的解决方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • MySQL如何配置my.ini文件

    MySQL如何配置my.ini文件

    文章介绍了如何修改my.ini文件以解决数据库忘记密码或其他基础问题,首先,需要停止数据库服务,然后创建并编辑my.ini文件,设置数据库字符集、缓冲池大小等参数,接着,删除旧的data文件夹并重新生成,配置my.ini文件时要注意命名规范
    2025-01-01

最新评论