MySQL 主从同步搭建

介绍

MySQL 主从同步是指通过配置 MySQL 的主服务器和从服务器,将主服务器上的数据实时同步到从服务器上。主从同步可以用于提高数据库的读写性能、备份数据、实现高可用等需求。

在本文中,我们将探讨如何搭建 MySQL 的主从同步,并提供相关的代码示例。

环境准备

在开始之前,我们需要准备以下环境:

  • 两台运行 MySQL 的服务器,一台作为主服务器,一台作为从服务器。
  • 安装并配置好 MySQL 数据库。

主从同步原理

在 MySQL 的主从同步中,主服务器负责处理客户端的所有读写请求,并将更改的数据记录到二进制日志(binary log)中。从服务器通过连接到主服务器,获取二进制日志中的数据,并将其应用到自己的数据库中,从而实现数据的同步。

主从同步的流程如下图所示:

stateDiagram
    [*] --> 主服务器
    主服务器 --> 二进制日志
    二进制日志 --> 从服务器
    从服务器 --> 数据库

配置主服务器

首先,我们需要在主服务器上进行一些配置。

  1. 打开主服务器的配置文件 my.cnf,找到 [mysqld] 部分,添加以下配置:
# 开启二进制日志
log-bin=mysql-bin

# 设置唯一标识服务器的 ID
server-id=1
  1. 重启主服务器使配置生效。

  2. 创建一个用于从服务器复制的用户,并授予相应的权限。在 MySQL 命令行界面中执行以下命令:

CREATE USER 'replication'@'从服务器的 IP' IDENTIFIED BY '密码';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'从服务器的 IP';
  1. 获取主服务器的二进制日志的文件名和位置。在 MySQL 命令行界面中执行以下命令:
SHOW MASTER STATUS;

记下结果中的 FilePosition,待会儿会在从服务器上用到。

配置从服务器

接下来,我们需要在从服务器上进行一些配置。

  1. 打开从服务器的配置文件 my.cnf,找到 [mysqld] 部分,添加以下配置:
# 设置唯一标识服务器的 ID
server-id=2
  1. 重启从服务器使配置生效。

  2. 在 MySQL 命令行界面中执行以下命令,配置从服务器连接到主服务器:

CHANGE MASTER TO
    MASTER_HOST = '主服务器的 IP',
    MASTER_USER = 'replication',
    MASTER_PASSWORD = '密码',
    MASTER_LOG_FILE = '主服务器的二进制日志文件名',
    MASTER_LOG_POS = 主服务器的二进制日志位置;
  1. 开始同步从服务器和主服务器的数据:
START SLAVE;
  1. 检查从服务器的状态,确保同步正常:
SHOW SLAVE STATUS \G;

如果 Slave_IO_RunningSlave_SQL_Running 的值都为 Yes,则表示同步成功。

代码示例

以下是一个简单的示例,演示如何使用 Python 连接 MySQL 数据库,并查询数据:

import mysql.connector

# 建立与数据库的连接
cnx = mysql.connector.connect(
    host="localhost",
    user="root",
    password="password",
    database="mydatabase"
)

# 创建游标对象
cursor = cnx.cursor()

# 执行查询语句
query = "SELECT * FROM mytable"
cursor.execute(query)

# 获取结果
result = cursor.fetchall()
for row in result:
    print(row)

# 关闭游标和连接
cursor.close()
cnx.close()

总结

通过本文的介绍,我们了解了 MySQL 主从同步的原理和配置步骤,并提供了相关的代码示例。主从同步可以帮助我们提高数据库的读写性能、备份数据和实现高可用性。希望本文能对你理解和应用主从同步有所帮助。

参考文献

  • [MySQL Replication](