03、ShardingSphere实战:基于Docker部署一主多从架构

本文详细讲解如何使用Docker容器部署MySQL 8.0主从复制集群,涵盖从环境准备、容器创建、配置文件修改、主从关系配置到同步验证的全过程,并提供了关键SQL命令和故障排查步骤。

  • 主服务器:容器名atguigu-mysql-master,端口3306
  • 从服务器:容器名atguigu-mysql-slave1,端口3307
  • 从服务器:容器名atguigu-mysql-slave2,端口3308

1、 关闭防火墙;

```java 
#关闭docker
systemctl stop docker
#关闭防火墙
systemctl stop firewalld
#启动docker
systemctl start docker
**2** 安装master数据库  
    
        ```java 
        docker run -d \
        -p 3306:3306 \
        -v /atguigu/mysql/master/conf:/etc/mysql/conf.d \
        -v /atguigu/mysql/master/data:/var/lib/mysql \
        -e MYSQL_ROOT_PASSWORD=123456 \
        --name atguigu-mysql-master \
        mysql:8.0.29
        

3、 创建mysql主服务器文件;

默认情况下MySQL的binlog日志是自动开启的可以通过如下配置定义一些可选配置

vim /atguigu/mysql/master/conf/my.cnf

配置如下内容

```java 
[mysqld]
# 服务器唯一id默认值1
server-id=1
# 设置日志格式默认值ROW
binlog_format=STATEMENT
# 二进制日志名默认binlog
# log-bin=binlog
# 设置需要复制的数据库默认复制全部数据库
#binlog-do-db=mytestdb
# 设置不需要复制的数据库
#binlog-ignore-db=mysql
#binlog-ignore-db=infomation_schema
    
    重启MySQL容器
    
        ```java 
        docker restart atguigu-mysql-master
        

4、 使用命令行登录MySQL主服务器:;

```java 
#进入容器env LANG=C.UTF-8 避免容器中显示中文乱码
docker exec -it atguigu-mysql-master env LANG=C.UTF-8 /bin/bash
#进入容器内的mysql命令行
mysql -uroot -p
#修改默认密码校验方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
**5** 主机中创建slave用户:;  
    
        ```java 
        -- 创建slave用户
        CREATE USER 'atguigu_slave'@'%';
        -- 设置密码
        ALTER USER 'atguigu_slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
        -- 授予复制权限
        GRANT REPLICATION SLAVE ON *.* TO 'atguigu_slave'@'%';
        -- 刷新权限
        FLUSH PRIVILEGES;
        

6、 主机中查询master状态:;
7、 准备从服务器;

可以配置多台从机slave1slave2…,这里以配置slave1为例

8、 在docker中创建并启动MySQL从服务器:端口3307`;

```java 
docker run -d \
-p 3307:3306 \
-v /atguigu/mysql/slave1/conf:/etc/mysql/conf.d \
-v /atguigu/mysql/slave1/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name atguigu-mysql-slave1 \
mysql:8.0.29
**9** 创建MySQL从服务器配置文件:;  
    
    vim /atguigu/mysql/slave1/conf/my.cnf
    
    **配置内容**
    
        ```java 
        [mysqld]
        # 服务器唯一id每台服务器的id必须不同如果配置其他从机注意修改id
        server-id=2
        # 中继日志名默认xxxxxxxxxxxx-relay-bin
        #relay-log=relay-bin
        

10、 使用命令行登录MySQL从服务器:;

```java 
#进入容器
docker exec -it atguigu-mysql-slave1 env LANG=C.UTF-8 /bin/bash
#进入容器内的mysql命令行
mysql -uroot -p
#修改默认密码校验方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
**11** 在从机上配置主从关系:;  
    
    在从服务的mysql上执行下面的sql
    
        ```java 
        CHANGE MASTER TO MASTER_HOST='192.168.139.30', 
        MASTER_USER='atguigu_slave',MASTER_PASSWORD='123456', MASTER_PORT=3306,
        MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=1357; 
        

12、 启动主从同步;

启动从机的复制功能在主服务器上执行SQL

```java 
START SLAVE;
-- 查看状态不需要分号
SHOW SLAVE STATUS\G
**13** 下面两个参数都是Yes则说明主从配置成功  
    
        ```java 
        Slave_IO_Running:Yes
        Slave_SQL_Running:Yes
        

14、 实现主从同步;

在主机中执行以下SQL在从机中查看数据库表和数据是否已经被同步

```java 
CREATE DATABASE db_user;
USE db_user;
CREATE TABLE t_user (
 id BIGINT AUTO_INCREMENT,
 uname VARCHAR(30),
 PRIMARY KEY (id)
);
INSERT INTO t_user(uname) VALUES('zhang3');
INSERT INTO t_user(uname) VALUES(@@hostname);
**15** 停止和重置  
    
        ```java 
        -- 在从机上执行功能说明停止I/O 线程和SQL线程的操作
        stop slave; 
        
        -- 在从机上执行功能说明用于删除SLAVE数据库的relaylog日志文件并重新启用新的relaylog文件
        reset slave;
        
        -- 在主机上执行功能说明删除所有的binglog日志文件并将日志索引文件清空重新开始所有新的日志文件
        -- 用于第一次进行搭建主从库时进行主库binlog初始化工作
        reset master;
        

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: