• 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
  • 相关阅读:
    spark3使用hive zstd压缩格式总结
    显示支付结果_WebSocket实现_方案2
    C语言——自定义类型结构体_学习笔记
    react Hooks怎么用
    小程序如何使用自定义组件
    1307_嵌入式设计中的晶振测试小结
    凯美瑞 vs 太空船:Web3 游戏生长的两条路径
    Reactor模型深度解析
    一文解析推特上最常见的加密骗局
    鲲鹏920(ARM64)移植javacpp续
  • 原文地址:https://blog.csdn.net/u010833154/article/details/127654750