Docker配置MySql环境的实现步骤,


目录
  • 一、简单安装
    • 1. 首先从Docker Hub中拉取镜像
    • 2. 启动尝试创建MySQL容器,并设置挂载卷。
    • 3. 查看mysql8这个容器是否启动成功
    • 4. 如果已经成功启动,进入容器中简单测试
      • 4.1 进入容器
      • 4.2 登录mysql中 
      • 4.3 进行简单添加查找测试
  • 二、主从复制安装
    • 2.1 主服务创建配置
      • 1. 主从服务容器创建,并且配置
      • 2. 创建配置文件并设置参数
      • 3. 重启容器使得配置生效
      • 4. 进入容器内,进行主服务中进行设置
    • 2.2 从服务创建配置
      • 1. 从服务容器创建,并且配置
      • 2. 创建配置文件并设置参数
      • 3. 重启容器使得配置生效
      • 4. 进入容器内,进行从服务中进行设置
      • 4.2 配置从服务器,指定主服务器
    • 2.3 安装中的遇到的问题
      • 2.4 配置完成,进行简单测试
        • 1. 在主服务器中创建并添加数据
        • 2. 在从服务器中查询数据,是否同步
        • 3. 测试结果

    一、简单安装

    1. 首先从Docker Hub中拉取镜像

    这里我要安装的是mysql8版本。

    docker pull mysql:8.0.27

    2. 启动尝试创建MySQL容器,并设置挂载卷。

    docker run -p 3306:3306 \
               --name mysql8 \
               --privileged=true \
               -v /app/mysql8/log:/var/log/mysql \
               -v /app/mysql8/data:/var/lib/mysql \
               -v /app/mysql8/conf:/etc/mysql/conf.d \
               -v /app/mysql8/files:/var/lib/mysql-files \
               -e MYSQL_ROOT_PASSWORD=123456 \
               -d mysql:8.0.27
    • --name mysql8: 为容器指定一个名称,这里是 mysql8
    • --privileged=true: 赋予容器更多的权限。在一般情况下,尽量避免使用 --privileged,因为它会赋予容器更多的权限,可能会带来一些安全风险。
    • -v /app/mysql8/log:/var/log/mysql: 将主机上的 /app/mysql8/log 目录映射到容器内的 /var/log/mysql,用于存储MySQL的日志文件。
    • -v /app/mysql8/data:/var/lib/mysql: 将主机上的 /app/mysql8/data 目录映射到容器内的 /var/lib/mysql,用于持久化存储MySQL的数据。
    • -v /app/mysql8/conf:/etc/mysql/conf.d: 将主机上的 /app/mysql8/conf 目录映射到容器内的 /etc/mysql/conf.d,用于提供自定义的MySQL配置文件。
    • -v /app/mysql8/files:/var/lib/mysql-files: 将主机上的 /app/mysql8/files 目录映射到容器内的 /var/lib/mysql-files,用于存储MySQL的文件。
    • -e MYSQL_ROOT_PASSWORD=123456: 设置MySQL root用户的密码为 123456
    • -d: 后台运行容器。

    3. 查看mysql8这个容器是否启动成功

    docker ps

    4. 如果已经成功启动,进入容器中简单测试

    4.1 进入容器

    docker exec -it mysql8 /bin/bash

    4.2 登录mysql中 

    mysql -uroot -p123456

    4.3 进行简单添加查找测试

    CREATE DATABASE mydatabase;
    
    USE mydatabase;
    
    CREATE TABLE users (
        id INT PRIMARY KEY AUTO_INCREMENT,
        username VARCHAR(50) NOT NULL,
        email VARCHAR(100) NOT NULL
    );
    
    INSERT INTO users (username, email) VALUES
    ('john_doe', 'john@example.com'),
    ('jane_smith', 'jane@example.com'),
    ('bob_jones', 'bob@example.com');
    
    SELECT * FROM users; 

    二、主从复制安装

    2.1 主服务创建配置

    1. 主从服务容器创建,并且配置

    ps:这里也默认使用mysql8版本进行安装。

    docker run -p 3307:3306 \
               --name mysql-master \
               --privileged=true \
               -v /app/mysql-master/log:/var/log/mysql \
               -v /app/mysql-master/data:/var/lib/mysql \
               -v /app/mysql-master/conf:/etc/mysql/conf.d \
    		   -v /app/mysql-master/files:/var/lib/mysql-files \
               -e MYSQL_ROOT_PASSWORD=123456 \
               -d mysql:8.0.27
    • docker run: 启动一个新的Docker容器。
    • -p 3307:3306: 将主机的3307端口映射到容器的3306端口,这样可以通过主机的3307端口访问MySQL服务。
    • --name mysql-master: 为容器指定一个名称,这里是 mysql-master
    • --privileged=true: 赋予容器更高的权限。注意,一般情况下最好避免使用 --privileged,因为它可能会引入一些潜在的安全风险。
    • -v /app/mysql-master/log:/var/log/mysql: 将主机上的 /app/mysql-master/log 目录映射到容器内的 /var/log/mysql,用于存储MySQL的日志文件。
    • -v /app/mysql-master/data:/var/lib/mysql: 将主机上的 /app/mysql-master/data 目录映射到容器内的 /var/lib/mysql,用于持久化存储MySQL的数据。
    • -v /app/mysql-master/conf:/etc/mysql/conf.d: 将主机上的 /app/mysql-master/conf 目录映射到容器内的 /etc/mysql/conf.d,用于提供自定义的MySQL配置文件。
    • -v /app/mysql-master/files:/var/lib/mysql-files: 将主机上的 /app/mysql-master/files 目录映射到容器内的 /var/lib/mysql-files,用于存储MySQL的文件。
    • -e MYSQL_ROOT_PASSWORD=123456: 设置MySQL root用户的密码为 123456
    • -d: 以后台模式运行容器。
    • mysql:8.0.27: 使用的MySQL镜像的标签,这里是MySQL 8.0.27版本

    2. 创建配置文件并设置参数

    vim /app/mysql-master/conf/my.cnf
    [mysqld]
    ## 设置server_id, 同一个局域网中需要唯一
    server_id=1001
    ## 指定不需要同步的数据库名称
    binlog-ignore-db=mysql
    ## 开启二进制日志功能
    log-bin=mall-mysql-bin
    ## 设置二进制日志使用内存大小(事务)
    binlog_cache_size=1M
    ## 设置使用的二进制日志格式(mixed,statement,row)
    binlog_format=mixed
    ## 二进制日志过期清理时间。默认值为0,表示不自动清理
    expire_logs_days=7
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062

    ps:在编写配置的时候,参数后不要留有空格,避免不必要的错误!!!

    3. 重启容器使得配置生效

    docker restart mysql-master

    4. 进入容器内,进行主服务中进行设置

    4.1 进入容器

    docker exec -it mysql-master /bin/bash
    mysql -uroot -p123456

    4.2 创建数据同步用户,并给同步用户授权

    create user 'slave'@'%' identified by '123456';
    grant replication slave, replication client on *.* to 'slave'@'%';
    flush privileges;

    4.3 查看所有用户的权限

    SELECT user, host, authentication_string, Grant_priv, Super_priv, Create_priv, Insert_priv, Update_priv, Delete_priv, Select_priv FROM mysql.user;
    

     得到这样得结果

    4.4 查看MySQL主服务器的当前状态,包括二进制日志文件和位置

    show master status;

    参数说明:

    File(文件)

    表示当前正在写入的二进制日志文件的名称

    Position(位置)

    表示在二进制日志文件中的当前写入位置

    Binlog_Do_DB

    一个逗号分隔的数据库列表,表示正在复制的二进制日志事件应用于哪些数据库

    Binlog_Ignore_DB

    一个逗号分隔的数据库列表,表示正在复制的二进制日志事件不应用于哪些数据库

    Executed_Gtid_Set

    表示已经执行的 GTID(全局事务标识符)集合。在MySQL的 GTID 复制中

    2.2 从服务创建配置

    1. 从服务容器创建,并且配置

    docker run -p 3308:3306 \
               --name mysql-slave \
               --privileged=true \
               -v /app/mysql-slave/log:/var/log/mysql \
               -v /app/mysql-slave/data:/var/lib/mysql \
               -v /app/mysql-slave/conf:/etc/mysql/conf.d \
    		   -v /app/mysql-master/files:/var/lib/mysql-files \
               -e MYSQL_ROOT_PASSWORD=123456 \
               -d mysql:8.0.27

    2. 创建配置文件并设置参数

    vim /app/mysql-slave/conf/my.cnf
    [mysqld]
    ## 设置server_id, 同一个局域网内需要唯一
    server_id=1002
    ## 指定不需要同步的数据库名称
    binlog-ignore-db=mysql
    ## 开启二进制日志功能,以备slave作为其它数据库实例的Master时使用
    log-bin=mall-mysql-slave1-bin
    ## 设置二进制日志使用内存大小(事务)
    binlog_cache_size=1M
    ## 设置使用的二进制日志格式(mixed,statement,row)
    binlog_format=mixed
    ## 二进制日志过期清理时间。默认值为0,表示不自动清理
    expire_logs_days=7
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
    ## 如:1062错误是指一些主键重复,1032是因为主从数据库数据不一致
    slave_skip_errors=1062
    ## relay_log配置中继日志
    relay_log=mall-mysql-relay-bin
    ## log_slave_updates表示slave将复制事件写进自己的二进制日志
    log_slave_updates=1
    ## slave设置只读(具有super权限的用户除外)
    read_only=1

    ps:在编写配置的时候,参数后不要留有空格,避免不必要的错误!!!

    3. 重启容器使得配置生效

    docker restart mysql-slave

    4. 进入容器内,进行从服务中进行设置

    4.1 进入容器

    docker exec -it mysql-slave /bin/bash
    mysql -uroot -p123456

    4.2 配置从服务器,指定主服务器

    我这里使用的是 CentOS7,查看服务器地址

    ifconfig

    CHANGE MASTER TO
      MASTER_HOST = '192.168.153.133',       -- 主服务器的 IP 地址
      MASTER_USER = 'slave',                  -- 用于连接主服务器的用户名
      MASTER_PASSWORD = '123456',             -- 用于连接主服务器的密码
      MASTER_PORT = 3307,                     -- 主服务器的端口号
      MASTER_LOG_FILE = 'binlog.000011',      -- 主服务器的二进制日志文件
      MASTER_LOG_POS = 1193,                  -- 主服务器的二进制日志位置
      MASTER_CONNECT_RETRY = 30,              -- 如果连接失败,重试的时间间隔(秒)
      GET_MASTER_PUBLIC_KEY = 1;              -- 启用 SSL 模式,1 表示启用

    4.3 启动 MySQL 主从复制

    start slave;

     4.4 查看 MySQL 主从复制状态

    # \G 可以将横向的结果集表格转换成纵向展示。
    # slave status的字段比较多,纵向展示比友好
    show slave status \G;

    主要查看 Slave_IO_Running 和 Slave_SQL_Running是否为 Yes 状态。

    ps:如果在安装中遇到问题可以查看下面这篇文章  ↓↓↓ ↓↓↓ 

    2.3 安装中的遇到的问题

    如果在安装过程中遇到问题,可以查看这篇文章,这是我遇到的一些问题和解决方案。

    Docker中安装MySql的遇到的问题

    icon-default.png?t=N7T8

    2.4 配置完成,进行简单测试

    1. 在主服务器中创建并添加数据

    CREATE DATABASE IF NOT EXISTS mydatabase;
    
    USE mydatabase;
    
    CREATE TABLE IF NOT EXISTS users (
        id INT PRIMARY KEY AUTO_INCREMENT,
        username VARCHAR(50) NOT NULL,
        email VARCHAR(100) NOT NULL
    );
    
    
    INSERT INTO users (username, email) VALUES
        ('alice_white', 'alice@example.com'),
        ('charlie_brown', 'charlie@example.com'),
        ('emma_jones', 'emma@example.com');
    
    select * from users;
    

    2. 在从服务器中查询数据,是否同步

    show databases;
    
    use mydatabase;
    
    select * from users;
    

    3. 测试结果

    主从服务器数据同步 

    到此这篇关于Docker配置MySql环境的实现步骤的文章就介绍到这了,更多相关Docker配置MySql环境内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

    您可能感兴趣的文章:
    • Docker + Nodejs + Kafka + Redis + MySQL搭建简单秒杀环境
    • Docker搭建 Nginx+PHP+MySQL 环境并部署WordPress实践
    • 详解如何利用docker快速构建MySQL主从复制环境
    • 基于Docker的MySQL主从复制环境搭建的实现步骤
    • Docker 环境运行 Mysql 和开启 Binlog 配置主从同步的设置方法
    • Docker快速搭建PHP+Nginx+Mysql环境及踩坑

    相关内容