• docker mysql主从搭建


    docker搭建mysql主从复制模式
    1、启动master容器

    docker run -d -p 3306:3306 --privileged=true -v /data/myMaster/log:/var/log/mysql -v /data/myMaster/data:/var/lib/mysql -v /data/myMaster/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root --name myMaster mysql:5.7.40 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    
    • 1

    2、查看

    docker ps
    
    • 1

    这时发现并没有启动,查看docker启动日志

    docker logs 容器名
    
    • 1

    提示如下错误

    2022-11-02 09:21:18+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.40-1.el7 started.
    2022-11-02 09:21:18+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
            command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.YwKPoxWb8z
            mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)
    mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
    
    • 1
    • 2
    • 3
    • 4
    • 5

    意思是不存在这个文件或目录
    因为mysql容器的/etc/mysql目录挂载到宿主机的/data/myMaster/conf目录,由于宿主机的 /data/myMaster/conf是空的,所以找不到/etc/mysql/conf.d中conf.d这个目录,导致容器创建失败。
    怎么办?
    随便启动一个docker mysql,然后将mysql容器中的文件拷贝到宿主机中即可

    docker cp 3d2f998819f2:/etc/mysql/conf.d /data/myMaster/conf/
    docker cp 3d2f998819f2:/etc/mysql/mysql.conf.d /data/myMaster/conf/
    
    • 1
    • 2

    注意:3d2f998819f2是随意启动的新的mysql容器;
    然后在启动myMaster 容器

    docker restart myMaster
    
    • 1

    这时,就可以启动成功了
    3、在/data/myMaster/conf/增加mysql配置文件my.cnf,内容如下:

    [mysqld]
    server_id=1
    log-bin=mall-mysql-bin
    binlog-ignore-db=mysql
    binlog_cache_size=1M
    binlog_format=mixed
    expire_logs_days=7
    slave_skip_errors=1062
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    然后再执行myMaster容器重启,这时,容器启动,
    4、进入myMaster容器

    docker exec -it myMaster bash #进入myMaster容器
    mysql -uroot -p   #登陆mysql
    create user 'slave'@'%' identified by '123456';  #创建用户密码
    grant replication slave,replication client on *.* to 'slave'@'%'; #给用户赋权限
    show master status  #查看master的状态
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    5、启动mySlave容器

    docker run -d -p 3307:3306 --privileged=true -v /data/mySlave/log:/var/log/mysql -v /data/mySlave/data:/var/lib/mysql -v /data/mySlave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root --name mySlave mysql:5.7.40 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    
    • 1

    6、在/data/mySlave/conf下创建my.cnf文件,内容如下

    [mysqld]
    server_id=2
    binlog-ignore-db=mysql
    log-bin=mall-mysql-slave1-bin
    binlog_cache_size=1M
    binlog_format=mixed
    expire_logs_days=7
    slave_skip_errors=1062
    relay_log=mall-mysql-relay-bin
    log_slave_updates=1
    read_only=1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    7、进入mySlave容器的mysql客户端

    docker exec -it mySlave bash #进入myMaster容器
    mysql -uroot -p   #登陆mysql
    change master to master_host='192.168.236.130',master_user='slave',master_password='123456',master_port=3306,master_log_file='mall-mysql-bin.000006',master_log_pos=617,master_connect_retry=30;  #在从mysql上配置主从复制
    
    • 1
    • 2
    • 3

    8、开启主从复制

     start slave;   #开启从mysql
     show slave status \G;  #查看主从同步状态
    
    • 1
    • 2

    在这里插入图片描述
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    表示开始主从同步
    9、实验
    在主mysql这个建表,增加数据,在从服务器上也可以查看到,此时就成功了
    10、my.cnf简介

    #
    [mysqld]
    #设置server_id,同一局域网需要唯一
    server_id=2
    #指定不需要同步的数据库名称
    binlog-ignore-db=mysql
    #开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
    log-bin=mall-mysql-slave1-bin
    #设置二进制日志使用内存大小(事务)
    binlog_cache_size=1M
    #设置使用二进制的格式
    binlog_format=mixed
    #二进制日志过期清理时间,默认为0,表示不清理
    expire_logs_days=7
    #跳过主从复制时遇到的所有错误或指定类型的错误,避免slave端复制中断;如1062指主键重复,1032指主从数据库不一致
    slave_skip_errors=1062
    #relay_log配置中继日志
    relay_log=mall-mysql-relay-bin
    #表示slave将复制事件写进自己的二进制日志
    log_slave_updates=1
    #slave设置为只读(具有super权限的用户除外)
    read_only=1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    11、mysql主从命令解析

    master_host:主数据库的IP地址;
    master_port:主数据库的运行端口
    master_user:在主数据库创建的用于同步数据的用户账号
    master_password:在主数据库创建的用于同步数据的用户密码
    master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
    master_connect_retry:连接失败重试的时间间隔,单位是秒
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    (计算机组成原理)第五章中央处理器-第七节1:多处理器的基本概念
    STM32_驱动蜂鸣器自定义库
    树的直径&
    业务网关之AK中心建设
    程序员为什么要软一点?
    Mysql 零宽空格ZWSP,导致表面同一段一摸一样的sql无法查询出相同结果
    腾讯二面:为什么不建议在 Docker 中跑 MySQL?
    【学习笔记】CF1817F Entangled Substrings(基本子串结构)
    Go语言 接口与类型
    SQLSugar查询返回DataTable
  • 原文地址:https://blog.csdn.net/u010833154/article/details/127654750