前言

在docker环境运行mysql容器,需要如何配置实现主从复制?

前期准备,需要安装好docker、docker-compose的运行环境。

一、运行mysql容器

1、创建mysql目录,执行如下命令。

mkdir -p /docker/mysql
cd /docker/mysql

2、编写yaml文件,执行如下命令。version替换成自己的compose版本;数据库密码重新设定新密码。如果需要多台从机则自行添加相应内容。

vim docker-compose.yml
version: '2.2.2'
services:
  mysql-master:
    image: mysql:8.0
    container_name: mysql-master
    command: --server-id=1 --log-bin=mysql-bin --binlog-do-db=mydb --skip-name-resolve
    environment:
      - MYSQL_ROOT_PASSWORD=123456.
    networks:
      - dbnet

  mysql-slave:
    image: mysql:8.0
    container_name: mysql-slave
    command: --server-id=2 --relay-log=relay-bin --log-bin=mysql-bin --replicate-do-db=mydb --skip-name-resolve
    environment:
      - MYSQL_ROOT_PASSWORD=123456.
    networks:
      - dbnet

networks:
  dbnet:
    name: dbnet
    driver: bridge

3、启动服务,执行如下命令。

docker-compose up -d

4、检查服务是否正常启动,执行如下命令。

docker-compose ps -a

正常启动会返回如下内容。

docker里的mysql的运行状态 docker运行mysql容器_docker

5、至此mysql容器已正常运行,接下来进行mysql主机配置。

二、配置mysql主机

1、进入mysql-master容器,执行如下命令。

docker exec -ti mysql-master bash

2、登录mysql,执行如下命令,输入第一步的时候配置的密码。

mysql -u root -p

3、创建用户用于复制,执行如下SQL,需要替换成自己的账号密码。

# 创建账号&密码
CREATE USER 'repl_ayzen'@'%' IDENTIFIED BY 'repl_123456.';
# 给用户授权
GRANT REPLICATION SLAVE ON *.* TO 'repl_ayzen'@'%';
# 刷新权限
FLUSH PRIVILEGES;

4、查看主服务器的二进制日志状态,执行如下SQL。

SHOW MASTER STATUS;

正常会返回如下内容,需要记住File、Position,用于配置从机的时候使用。

docker里的mysql的运行状态 docker运行mysql容器_容器_02

5、至此,主机的配置就已完成,接下来进行mysql从机配置。

三、配置mysql从机

1、进入mysql-slave容器,执行如下命令。

docker exec -ti mysql-slave bash

 2、登录mysql,执行如下命令,输入第一步的时候配置的密码。

mysql -u root -p

3、配置从服务器复制,执行如下SQL。

CHANGE MASTER TO  
MASTER_HOST='mysql-master',  
MASTER_USER='repl_ayzen',  
MASTER_PASSWORD='repl_123456.',  
MASTER_LOG_FILE='mysql-bin.000003',  
MASTER_LOG_POS=868;

因为主从数据库配置的是同一个容器网络,所以HOST可以配置成主机的容器名称。

USER、PASSWORD就是第二步的时候创建的用于复制的账号密码。

FILE、POS就是第二步的时候执行show master status;获取的信息。

4、启动从服务器复制,执行如下SQL。

start slave;

5、检查从服务器的复制状态,执行如下SQL。

show slave status\G;

正常会返回如下内容。

查看 Master_Log_File 和 Read_Master_Log_Pos 的值是否为刚刚配置的值。

查看 Slave_IO_Running 和 Slave_SQL_Running 的值是否都为 Yes。如果是,那么从服务器正在正常地从主服务器复制数据。

docker里的mysql的运行状态 docker运行mysql容器_容器_03

6、至此,从机的配置也已经完成,接下来就是进行测试验证。

四、测试验证

1、进入mysql-master容器,并且登录mysql。

2、创建数据库mydb,执行如下SQL。

create database mydb;

3、创建用户表users,执行如下SQL。

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INT NOT NULL
);

4、给users表插入数据,执行如下SQL。

insert into users(name,age) values('ayzen',18);

5、从宿主机新开一个窗口,进入mysql-slave容器,并且登录mysql。

6、查看数据库mydb是否已同步,执行如下SQL。

show databases;

返回如下内容,包含mydb,说明已正常同步。

docker里的mysql的运行状态 docker运行mysql容器_SQL_04

7、检查users表数据,执行如下SQL。

use mydb;
select * from users;

返回如下内容,说明users已经数据也已经同步到从数据库。

docker里的mysql的运行状态 docker运行mysql容器_容器_05

8、小结,mysql主从复制的配置已完成并且验证OK。

总结

使用docker运行mysql容器并且配置主从复制,简单来说就四个步骤。

1、安装运行mysql容器;

2、配置mysql主机,创建账号,获取状态;

3、配置mysql从机,配置从服务器复制,启动从服务器复制;

4、主从数据库的测试验证;

本人能力有限,还有许多不足之处还望多多指教,谢谢。