美文网首页
Docker搭建Mysql服务(主从配置)

Docker搭建Mysql服务(主从配置)

作者: 小小圆公子 | 来源:发表于2019-09-29 07:42 被阅读0次

    本文需要用户已安装Docker服务

    版本信息

    Docker版本:19.03.2
    Mysql版本:8.0.17
    Linux版本:3.10 (Centos7.6)

    拉取Mysql官方镜像

    docker pull mysql:8.0.17
    

    创建Mysql主从服务所需引用外部目录及文件配置

    (1) Master服务

    mkdir -p /data/mysql/master/conf  #my.cnf配置文件存放目录 
    mkdir -p /data/mysql/master/data  #数据存储目录
    vi /data/mysql/master/conf/my.cnf  #编辑mysql配置文件
    

    将如下代码添加到my.cnf文件中

    [mysqld]
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    secure-file-priv= NULL
    
    #注意此处server-id必须唯一
    server-id=1
    log-bin=mysql-bin
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    # Custom config should go here
    !includedir /etc/mysql/conf.d/
    

    (2) Slave服务

    mkdir -p /data/mysql/slave/conf  #my.cnf配置文件存放目录 
    mkdir -p /data/mysql/slave/data  #数据存储目录
    vi /data/mysql/slave/conf/my.cnf  #编辑mysql配置文件
    

    将如下代码添加到my.cnf文件中

    [mysqld]
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    secure-file-priv= NULL
    
    #注意此处server-id必须唯一
    server-id=2
    log-bin=mysql-bin
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    # Custom config should go here
    !includedir /etc/mysql/conf.d/
    

    启动Mysql服务镜像(master)

    docker run -p 3306:3306 --name mysql-master --privileged=true -v /data/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.17
    

    启动命令解释:
    (1)-p 3306:3306 #指定端口号 第一个3306代表宿主机端口号,第二个端口号代表容器端口号
    (2)--name mysql-master #指定容器名称
    (3)--privileged=true #使用该参数,容器内的root拥有真正的root权限。否则,容器内的root只是外部的一个普通用户权限
    (4)-v /data/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/master/data:/var/lib/mysql # -v表示挂载外部目录,冒号前代表所挂载的外部目录,冒号后代表映射的容器内目录
    (5)-e MYSQL_ROOT_PASSWORD=123456 # -e表示传入的环境参数,这里的MYSQL_ROOT_PASSWORD就是Mysql镜像所提供的root用户密码环境参数配置
    (6)-d mysql:8.0.17 # -d 开启Daemon模式(守护进程),后面的mysql:8.0.17就是指定要运行的镜像

    启动Mysql服务镜像(slave)

    docker run -p 3307:3306 --name mysql-slave --privileged=true -v /data/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysql/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.17
    

    查看已启动的容器

    docker ps
    

    可以看到我们上面已经启动的两个mysql容器mysql-master和mysql-slave


    docker.png

    配置mysql-master数据库(主数据库)

    进入mysql-master容器

    docker exec -it mysql-master /bin/bash
    

    登录主库mysql数据库

    mysql -u root -p
    

    在主库上创建同步用户并授权

    CREATE USER 'replicate'@'172.18.0.2' IDENTIFIED BY '123456';  
    GRANT REPLICATION SLAVE ON *.* TO 'replicate'@'172.18.0.2';
    FLUSH PRIVILEGES;
    

    上面代码中'replicate'@'172.18.0.2'的IP地址应为对应容器的IP地址,可通过“docker inspect 容器ID”查看指定容器IP地址
    最后增加远程访问用户 并赋予所有权限,远程访问测试用

    CREATE USER tang IDENTIFIED BY '123456';
    GRANT ALL ON *.* TO 'tang'@'%';
    

    修复远程登录报报 caching_sha2_password异常

    ALTER USER 'tang'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
    ALTER USER 'tang'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    FLUSH PRIVILEGES;
    

    查询master的状态,此处File,Position数据在配置从库时用到

    show master status;
    

    配置mysql-slave数据库(从数据库)

    进入mysql-slave容器

    docker exec -it mysql-slave /bin/bash
    

    登录从库mysql数据库

    mysql -u root -p
    

    配置从服务器Slave:(后面两个数据从主库查询得出)

    change master to master_host='172.18.0.2',master_port=3006,master_user='replicate',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1593;
    start slave;
    

    查询slave的状态,Slave_IO_Running及Slave_SQL_Running进程必须正常运行,即YES状态,否则都是错误的状态

    show slave status\G
    

    最后同样增加远程访问用户 并赋予所有权限,远程访问测试用

    CREATE USER tang IDENTIFIED BY '123456';
    GRANT ALL ON *.* TO 'tang'@'%';
    

    修复远程登录报报 caching_sha2_password异常

    ALTER USER 'tang'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; 
    ALTER USER 'tang'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; 
    FLUSH PRIVILEGES;
    

    至此同步相关配置 已完成,接下来可以测试了,大家可以自己选择工具进行测试,这里就不进行赘述了。

    相关文章

      网友评论

          本文标题:Docker搭建Mysql服务(主从配置)

          本文链接:https://www.haomeiwen.com/subject/cffmuctx.html