Docker 容器部署mysql8.0搭建主从环境

1,009 阅读3分钟

一、搭建准备

  1. 搭建环境需要对docker有个基本的了解,熟练的运用docker的基本命令,如不熟悉,可移步docker基本知识docker基本命令进行一个初步的学习
  2. 版本说明:docker19.0,mysql8.0,不同版本之间的配置可能会有差异

二、开始搭建

  1. 服务搭建

    • 从docker repo查找mysq8.0镜像,并拉去到容器

      docker search 关键字
      docker pull 镜像名:tag 拉去镜像
      
    • 在自己熟悉的位置创建mysql配置文件夹用来存储mysql的配置,并在该目录下创建master和slave文件夹用来分别配置主从数据信息

      #主服务配置目录
      /home/mysql/master
      #从服务配置目录
      /home/mysql/slave
      
    • 分别在master和slave目录下创建一个data文件夹(存储mysql信息)mysqld.cnf文件(存储mysql配置信息)

      data(文件夹)  mysqld.cnf(文件)
      
    • mysqld.cnf配置信息

      1. master配置

        [mysqld]
        pid-file=/var/run/mysqld/mysqld.pid
        socket=/var/run/mysqld/mysqld.sock
        datadir=/var/lib/mysql
        secure_file_priv=/var/lib/mysql
        #Lower_case_table_names=1
        symbolic-links=0
        #服务id主从不能一样
        server-id=1
        #开启日志binlog
        log-bin=mysql-bin
        #不需要主从复制的库
        binlog-ignore-db=mysql
        binlog-ignore-db=information_schema
        binlog-ignore-db=performance_schema
        #需要进行binlog主从复制的库
        binlog-do-db=db-master
        
      2. slave配置

        [mysqld]
        pid-file=/var/run/mysqld/mysqld.pid
        socket=/var/run/mysqld/mysqld.sock
        datadir=/var/lib/mysql
        secure_file_priv=/var/lib/mysql
        #Lower_case_table_names=1
        symbolic-links=0
        #服务id主从不能一样
        server-id=2
        #开启日志文件
        log-bin=mysql-bin
        #不需要进行binlog日志记录的数据库
        replicate_wild_ignore_table=mysql.%
        replicate_wild_ignore_table=information_schema.%
        replicate_wild_ignore_table=performance_schema.%
        #需要进行binlog日志记录的数据库
        replicate_wild_do_table==db-master.%
        
    • 启动master和slve容器

      1. master启动

        docker run -it -d --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v /home/mysql/master/mysqld.cnf:/etc/mysql/my.cnf -v /home/mysql/master/data:/var/lib/mysql mysql
        
      2. slave启动

        docker run -it -d --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -v /home/mysql/slave/mysqld.cnf:/etc/mysql/my.cnf -v /home/mysql/slave/data:/var/lib/mysql mysql
        
    • 问题说明

      通过前面几步,我们的mysql主从服务器已经搭建好了,如果遇到启动不了什么的我们可以查看mysql的启动日志查看具体的报错信息进行一一解决 docker logs mysql-master(容器名称),如果容器正常启动,此时我们可以通过客户端连接我们自己的mysql服务器,连接的时候可能会遇到各种问题,一般关闭防火墙能解决大部分问题。如果遇到拒绝客户端连接的问题,docker基本知识这里面有做了详细的处理可移步查看。

  2. 主从关系搭建

    • 服务搭建完毕,我们需要进一步的设置他们的主从关系,可以选择在服务器端配置,为了方便,也可以在客户端进行配置,为了方便好看,我们选择在客户端进行配置,以下命令只需要在客户端输入sql命令即可,不再需要执行dokcer命令

      image-20210918102916496.png

    • 查看主服务器信息(主服务执行)

      show master status;
      

      image-20210918104349905.png

      Mysql-bin是我们master-slave的binlog日志,也是主从复制的关键文件,这里注意一下即可

    • 从库关联(从服务器执行)

      change master to master_host={你的主数据库ip},master_port={主数据库端口},master_user={用户名},master_password={密码},master_log_file='mysql-bin.000004',master_log_pos=156;
      ​
      #mysql-bin.000004主从复制的日志信息
      
    • 重启slave查看设置状态

      show slave status;
      ​
      #主要看slave_iq_running跟slave_sql_running值,都是yes代表成功;如果slave_sql_running为no,则执行以下sql
      stop slave; 
      SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; 
      start slave;  
      

      image-20210918104313295.png

    • 到此,mysql的主从关系就搭建完毕了,测试只需要在master服务器创建数据库观察slave服务器是否同步即可