zoukankan      html  css  js  c++  java
  • (七) Docker 部署 MySql8.0 一主一从 高可用集群

    参考并感谢

    下载mysql镜像(不带tag标签则表示下载latest版本)

    docker pull mysql/mysql-server
    

    配置my.cnf 文件

    my.cnf文件参考nginx的临时方案,从容器中拷贝出来

    # 主库
    [mysqld]
    log-bin=mysql-bin    # [必须]启用二进制日志
    server-id=1          # [必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配
    # 从库
    [mysqld]
    log-bin=mysql-bin    # [必须]启用二进制日志
    server-id=2          # [必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配
    

    启动 mysql 主库

    docker run -d 
    -p 3306:3306 
    --privileged=true 
    -e MYSQL_ROOT_PASSWORD="Mypwd@123456" 
    --name mysql3306 
    --mount type=bind,source=/var/docker/configs/mysql/3306/my.cnf,target=/etc/my.cnf 
    --mount type=bind,source=/var/docker/datas/mysql/3306,target=/var/lib/mysql 
    --restart always 
    mysql/mysql-server:latest 
    

    启动 mysql 从库

    docker run -d 
    -p 3307:3306 
    --privileged=true 
    -e MYSQL_ROOT_PASSWORD="Mypwd@123456" 
    --name mysql3307 
    --mount type=bind,source=/var/docker/configs/mysql/3307/my.cnf,target=/etc/my.cnf 
    --mount type=bind,source=/var/docker/datas/mysql/3307,target=/var/lib/mysql 
    --restart always 
    mysql/mysql-server:latest 
    

    开放mysql端口并立即生效

    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --zone=public --add-port=3307/tcp --permanent
    firewall-cmd --reload
    

    登录主库

    docker exec -it mysql3306 bash
    mysql -u root -p
    Mypwd@123456
    # 主库创建同步用户
    CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Mypwd@123456';
    # 主库给同步用户授权
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    # 主库创建用户并配置读写权限
    CREATE USER 'madmars'@'%' IDENTIFIED WITH mysql_native_password BY 'Mypwd@123456';
    GRANT ALL PRIVILEGES ON *.* TO 'madmars'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    # 查询主库状态,并记录 File 的值和 Position 的值
    SHOW MASTER STATUS;
    

    登录从库

    docker exec -it mysql3307 bash
    mysql -u root -p
    Mypwd@123456
    # 配置slave (master_log_file 和 master_log_pos 是主库的file和position值)
    change master to
    master_host='172.17.0.1',
    master_user='repl',
    master_log_file='mysql-bin.000003',
    master_log_pos=1345,
    master_port=3306,
    master_password='Mypwd@123456';
    # 启动salve
    START SLAVE;
    # 查看slave状态
    SHOW SLAVE STATUSG;
    # 从库用户配置只读权限
    CREATE USER 'madmarsreadonly'@'%' IDENTIFIED WITH mysql_native_password BY 'Mypwd@123456';
    GRANT SELECT ON *.* TO 'madmarsreadonly'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

    PS:

    • 启动容器之前,需要创建好对应的宿主机的文件目录,宿主机缺少文件会导致容器启动失败
    • docker环境部署,如果需要数据库持久化,必须要增加 privileged=true

    《(七) Docker 部署 MySql8.0 一主一从 高可用集群》CSDN地址:https://blog.csdn.net/madmarszff/article/details/100904288

    《(七) Docker 部署 MySql8.0 一主一从 高可用集群》博客园地址:https://www.cnblogs.com/godzff/p/11530713.html

    《(七) Docker 部署 MySql8.0 一主一从 高可用集群》简书地址:

  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/godzff/p/11530713.html
Copyright © 2011-2022 走看看