• Docker搭建MySQL8主从环境


    1. 拉取mysql镜像

    # 没加版本号默认最新版 latest
    docker pull mysql
    

    2. 创建挂载目录

    mkdir /home/docker/mysql/write
    mkdir /home/docker/mysql/read
    
    # 目录权限设置
    chmod 0777 /home/docker/mysql/write
    chmod 0777 /home/docker/mysql/read
    
    # write 新增mysql.cnf文件
    [mysqld]
    # 唯一id
    server-id = 1
    # 开启logbin
    log-bin = mysql-bin
    # 默认端口
    port = 3307
    
    # read 新增mysql.cnf文件
    [mysqld]
    # 唯一id
    server-id = 2
    # 开启logbin
    log-bin = mysql-bin
    # 默认端口
    port = 3308
    

    3. 创建容器

    # docker run -d -v 宿主机挂载目录:容器文件目录 --name 容器名称 -p 宿主机端口:映射镜像端口 -e 参数=值 镜像名称
    # 三种模式均可,这里是创建读跟写两个数据库
    
    # 默认网络连接模式
    docker run -d -v /home/docker/mysql/write:/etc/mysql/conf.d --name write_mysql -p 3307:3307 -e MYSQL_ROOT_PASSWORD=root mysql
    docker run -d -v /home/docker/mysql/read:/etc/mysql/conf.d --name read_mysql -p 3308:3308 -e MYSQL_ROOT_PASSWORD=root mysql
    
    # 指定网卡、IP运行
    docker run -d -v /home/docker/mysql/write:/etc/mysql/conf.d --name write_mysql -p 3307:3307 -e MYSQL_ROOT_PASSWORD=root --network=docker0 --ip 172.17.0.2 mysql
    docker run -d -v /home/docker/mysql/read:/etc/mysql/conf.d --name read_mysql -p 3308:3308 -e MYSQL_ROOT_PASSWORD=root --network=docker0 --ip 172.17.0.3 mysql
    
    # 使用host模式运行(宿主机网段为172开头时建议使用该模式,可以避免因宿主机与docker默认网段相同导致的无法访问容器的问题)
    docker run -d -v /home/docker/mysql/write:/etc/mysql/conf.d --name write_mysql -e MYSQL_ROOT_PASSWORD=root --network=host mysql
    docker run -d -v /home/docker/mysql/read:/etc/mysql/conf.d --name read_mysql -e MYSQL_ROOT_PASSWORD=root --network=host mysql
    

    4. 进入容器,登录MySQL

    # docker exec -it 容器名称 bash
    
    # 分别登陆读、写库
    docker exec -it write_mysql bash
    docker exec -it read_mysql bash
    
    mysql -uroot -proot
    

    5. 更改账户加密方式

    # 'localhost'为本地, ‘%’ 为外部
    # 将加密方式设置为 ‘mysql_native_password’ 可以防止外部登陆时报 'sha2xxxx' 错误
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
    FLUSH PRIVILEGES;
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
    FLUSH PRIVILEGES;
    

    6. 查看主机状态

    show master status;
    
    # 注:需记录主机File与Positon
    

    7. 从机配置

    # 如果有启动从机则需要先停止
    # stop slave;
    
    # 修改主机信息
    change master to master_host='主机IP',master_port=主机端口,master_user='账户',master_password='密码',master_log_file='主机File',master_log_pos=主机Positon;
    

    8. 启动从机

    # 启动
    start slave;
    
    # 查看状态
    show slave statusG
    
    # 这两个配置为: Yes, 表示配置成功
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    

    9. 远程访问权限

    use mysql;
    grant all on *.* to 'root'@'%' with grant option;
    flush privileges;
    
    
  • 相关阅读:
    SPA架构的优点和缺点以及一些思考
    我们为什么要尝试前后端分离
    HTTP协议详解
    前后端分离 与 不分离
    描述一下 cookies,sessionStorage 和 localStorage 的区别
    Express中间件的意思 next()的方法
    Java笔记1Java相关概念和如何实现跨平台
    去掉EditPlus自动备份bak文件
    Java配置环境变量
    Java初学者入门应该掌握的30个概念
  • 原文地址:https://www.cnblogs.com/unrecognized/p/13574827.html
Copyright © 2020-2023  润新知