zoukankan      html  css  js  c++  java
  • Docker部署Mysql8.0.20并配置主从复制

    1. Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从)

      Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从)

    2. 前提准备

    # 创建主从数据库文件夹
    mkdir -p /usr/local/mysql/master1/conf
    mkdir -p /usr/local/mysql/master1/data
    mkdir -p /usr/local/mysql/slave1/conf
    mkdir -p /usr/local/mysql/slave1/data
    
    # 初始化主数据库配置文件
    cd /usr/local/mysql/master1/conf
    touch my.cnf
    vi my.cnf
    
    # 粘贴以下内容
    [mysqld]
    datadir = /usr/local/mysql/master1/data
    character-set-server = utf8
    lower-case-table-names = 1
    
    # 主从复制-主机配置
    # 主服务器唯一ID
    server-id = 1
    # 启用二进制日志
    log-bin=mysql-bin
    # 设置logbin格式
    binlog_format = STATEMENT
    
    # 初始化从数据库配置文件
    cd /usr/local/mysql/slave1/conf
    touch my.cnf
    vi my.cnf
    
    # 粘贴以下内容
    [mysqld]
    datadir = /usr/local/mysql/slave1/data
    character-set-server = utf8
    lower-case-table-names = 1
    
    # 主从复制-从机配置
    # 从服务器唯一ID
    server-id = 2
    # 启用中继日志
    relay-log = mysql-relay
    
    # 文件夹授权
    chmod -R 777 /usr/local/mysql
    

    3. Docker部署Mysql8.0.20

    # 拉取镜像
    docker pull mysql:8.0.20
    
    # 查看镜像
    docker images
    
    # 构建主数据库容器
    docker run --name=mysql-master-1 --privileged=true -p 3306:3306 -v /usr/local/mysql/master1/data/:/var/lib/mysql -v /usr/local/mysql/master1/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql/master1/mysql-files/:/var/lib/mysql-files/ -e MYSQL_ROOT_PASSWORD=3edc#EDC -d mysql:8.0.20 --lower_case_table_names=1
    
    # 查询是否启动成功
    docker ps
    
    # 验证是否可以登录
    # 交互式进入容器
    docker exec -it mysql-master-1 /bin/bash
    
    # 登录(使用构建时指定的密码:3edc#EDC)
    mysql -uroot -p
    
    # 退出
    quit
    exit
    
    # 构建从数据库容器
    docker run --name=mysql-slave-1 --privileged=true -p 3307:3306 -v /usr/local/mysql/slave1/data/:/var/lib/mysql -v /usr/local/mysql/slave1/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql/slave1/mysql-files/:/var/lib/mysql-files/ -e  MYSQL_ROOT_PASSWORD=3edc#EDC -d mysql:8.0.20 --lower_case_table_names=1
    
    # 查询是否启动成功
    docker ps
    
    # 验证是否可以登录
    # 交互式进入容器
    docker exec -it mysql-slave-1 /bin/bash
    
    # 登录(使用构建时指定的密码:3edc#EDC)
    mysql -uroot -p
    
    # 退出
    quit
    exit
    
    # 关闭防火墙
    # 查看防火墙状态
    systemctl status firewalld
    
    # 关闭防火墙
    systemctl stop firewalld
    

    4. 配置主从复制

    # 进入主数据库
    mysql -uroot -p -h192.168.10.234 -P3306
    
    - 主数据库创建用户slave并授权
    # 创建用户
    create user 'slave'@'%' identified with mysql_native_password by 'password';
    
    # 授权
    grant replication slave on *.* to 'slave'@'%';
    
    # 刷新权限
    flush privileges;
    
    # 查询server_id值
    show variables like 'server_id';
    
    # 也可临时(重启后失效)指定server_id的值(主从数据库的server_id不能相同)
    set global server_id = 1;
    
    # 查询Master状态,并记录File和Position的值
    show master status;
    
    # 注意:执行完此步骤后退出主数据库,防止再次操作导致File和Position的值发生变化
    
    # 验证slave用户是否可用
    mysql -uslave -p -h192.168.10.234 -P3306
    
    # 进入从数据库
    mysql -uroot -p -h192.168.10.234 -P3307
    
    # 查询server_id值
    show variables like 'server_id';
    
    # 也可临时(重启后失效)指定server_id的值(主从数据库的server_id不能相同)
    set global server_id = 2;
    
    # 若之前设置过同步,请先重置
    stop slave;
    reset slave;
    
    # 设置主数据库
    change master to master_host='192.168.10.234',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;
    
    # 开始同步
    start slave;
    
    # 若出现错误,则停止同步,重置后再次启动
    stop slave;
    reset slave;
    start slave;
    
    # 查询Slave状态
    show slave statusG
    
    # 查看是否配置成功
    # 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。
    

    5. 测试

      通过工具连接主从数据库或者在服务器连接。

    # 在主数据库创建数据库test
    create database test;
    
    # 从数据库查看
    show databases;
    
    # 在主数据库创建表
    use test;
    create table t_user(id int, name varchar(20));
    
    # 插入数据
    insert into t_user values(1, 'C3Stones');
    
    # 在从数据库查看
    use test;
    select * from t_user;
    
    # 其他删改查操作请自行测试
    
  • 相关阅读:
    数字证书学习笔记
    在微服务中使用领域事件
    用Gradle构建Spring Boot项目
    七言 朱雀
    作为分享者
    Spring Framework学习要点摘抄
    Servlet 3.0/3.1 中的异步处理
    Java集合学习笔记
    Java垃圾回收学习笔记
    你究竟有多了解Spring?
  • 原文地址:https://www.cnblogs.com/cao-lei/p/13606945.html
Copyright © 2011-2022 走看看