使用Docker部署MySQL主从复制:详细步骤与实践

MySQL主从复制是一种常见的数据库扩展方案,可以提高数据库的读取性能和容灾能力。通过Docker来部署MySQL主从复制,不仅简化了环境的搭建,还能够轻松实现容器化管理。本文将详细介绍如何通过Docker搭建一个简单的MySQL主从复制环境。

一、什么是MySQL主从复制?

MySQL主从复制是一种主数据库与从数据库之间数据同步的机制。主数据库负责处理写操作,而从数据库负责处理读操作。数据会从主库传递到从库,实现数据的一致性。主从复制主要有以下几个应用场景:

  1. 读写分离:提高数据库的并发处理能力。
  2. 容灾备份:保障数据的安全性。
  3. 数据分布:便于地理分布式数据库的部署。

二、环境准备

为了完成本次实验,你需要:

  • Docker(确保已经安装并启动)
  • Docker Compose(用于管理多个容器)
  • 两个MySQL容器:一个作为主库,一个作为从库

1. 准备Docker镜像

首先,确保你已经安装了MySQL的Docker镜像,可以通过以下命令拉取官方的MySQL镜像:

docker pull mysql:latest

2. 创建Docker网络

为了让主从数据库容器能够相互通信,我们需要创建一个自定义的Docker网络:

docker network create mysql-replication

三、编写Docker Compose文件

在本次部署中,我们将使用docker-compose.yml文件来管理MySQL主从容器的配置。创建docker-compose.yml文件,并添加以下内容:

version: '3'
services:
  mysql-master:
    image: mysql:latest
    container_name: mysql-master
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: testdb
      MYSQL_USER: user
      MYSQL_PASSWORD: userpassword
    volumes:
      - ./master_data:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - mysql-replication
    command: --default-authentication-plugin=mysql_native_password --server-id=1 --log-bin=mysql-bin

  mysql-slave:
    image: mysql:latest
    container_name: mysql-slave
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: testdb
      MYSQL_USER: user
      MYSQL_PASSWORD: userpassword
    volumes:
      - ./slave_data:/var/lib/mysql
    ports:
      - "3307:3306"
    networks:
      - mysql-replication
    depends_on:
      - mysql-master
    command: --default-authentication-plugin=mysql_native_password --server-id=2 --relay-log=mysql-relay-bin
networks:
  mysql-replication:
    driver: bridge

四、配置主库与从库

1. 启动容器

通过docker-compose up -d命令启动主库和从库容器。

docker-compose up -d

2. 进入主库配置

进入主库容器,并设置主从复制的用户和权限。

docker exec -it mysql-master bash

登录MySQL:

mysql -u root -p

在MySQL中执行以下SQL命令,创建一个用于复制的用户,并赋予权限:

CREATE USER 'replica'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;

接下来,通过以下命令查看主库的状态,记录下FilePosition信息,这将用于配置从库。

SHOW MASTER STATUS;

3. 配置从库

进入从库容器并配置从库:

docker exec -it mysql-slave bash
mysql -u root -p

在MySQL中执行以下命令,将从库连接到主库,并使用之前在主库中记录的FilePosition信息:

CHANGE MASTER TO
  MASTER_HOST='mysql-master',
  MASTER_USER='replica',
  MASTER_PASSWORD='replica_password',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=1234;

启动从库复制进程:

START SLAVE;

4. 验证主从复制

在从库中执行以下命令,查看从库的状态:

SHOW SLAVE STATUS\G;

确保Slave_IO_RunningSlave_SQL_Running均显示为Yes,表示主从复制正常运行。

五、测试主从复制

在主库中插入一些数据,验证这些数据是否被正确复制到从库中。

-- 在主库中插入数据
USE testdb;
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO users (id, name) VALUES (1, 'Alice'), (2, 'Bob');

-- 在从库中查看数据
SELECT * FROM users;

如果从库中也能够看到相同的数据,则说明主从复制配置成功。

posted @ 2024-09-07 19:28  daligh  阅读(322)  评论(0)    收藏  举报