美文网首页
docker mariadb 主从复制

docker mariadb 主从复制

作者: Butif_D | 来源:发表于2022-06-06 16:24 被阅读0次

    1. 创建配置文件

    主节点: master.cnf

    [client]
    # 默认字符集
    default-character-set=utf8mb4
    
    [mysqld]
    # 字符集
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    # 允许最大链接数
    max_connections=4096
    
    # 服务器引擎
    default-storage-engine=InnoDB
    
    # 表名小写
    # lower_case_table_names=1
    
    # 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
    binlog_cache_size=1M
    
    # binlog 格式 row statement mixed
    binlog_format=mixed
    
    # 忽略的数据库binlog
    binlog-ignore-db=mysql,information_schema
    
    # 到期自动删除
    expire_logs_day=7
    
    # 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    # 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062
    
    # 设置server_id,一般设置为IP,注意要唯一
    server-id=1
    
    # bin-log
    log_bin=mariadb-bin
    

    从节点 slave.cnf

    [client]
    # 默认字符集
    default-character-set=utf8mb4
    
    [mysqld]
    # 字符集
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    
    # 服务器引擎
    default-storage-engine=InnoDB
    
    # 表名小写
    # lower_case_table_names=1
    
    # 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
    binlog_cache_size=1M
    
    # binlog 格式 row statement mixed
    binlog_format=mixed
    
    # 忽略的数据库binlog
    binlog-ignore-db=mysql,information_schema
    
    # 到期自动删除
    expire_logs_day=7
    
    # 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    # 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062
    
    # 设置server_id,一般设置为IP,注意要唯一
    server-id=10
    
    # bin-log
    log_bin=slave-mariadb-bin
    
    # 表示slave将复制事件写进自己的二进制日志
    log_slave_updates=1
    
    # 记录同步信息
    relay-log=slave-relay-bin
    
    # 防止改变数据(除了特殊的线程)
    read_only=1
    
    # 同步刷新binlog,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,
    # 而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
    # sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘
    # 1 最安全,但是最慢。 0 最快,但是风险最大
    sync_binlog=0
    
    

    docker-compose 配置文件 docker-compose.yml

    version: "3"
    services: 
      mariadb-master:
        image: mariadb:10.7.1
        container_name: mariadb-master
        restart: always
        ports:
          - "3307:3306"
        environment:
    #密码
          - MARIADB_ROOT_PASSWORD=abcd!234
        volumes:
          - ../master/data:/var/lib/mysql:cached
          - ./master.cnf:/etc/mysql/my.cnf:cached
        security_opt:
          - seccomp:unconfined
        logging: 
          driver: "json-file"
          options: 
            max-size: "500m"
        networks:
          - dev_network
    
      mariadb-slave:
        image: mariadb:10.7.1
        container_name: mariadb-slave
        restart: always
        ports:
          - "3308:3306"
        environment:
    #密码
          - MARIADB_ROOT_PASSWORD=abcd!234
        volumes:
          - ../slave/data:/var/lib/mysql:cached
          - ./slave.cnf:/etc/mysql/my.cnf:cached
        security_opt:
          - seccomp:unconfined
        logging: 
          driver: "json-file"
          options: 
            max-size: "500m"
        networks:
          - dev_network
    
    networks:
      dev_network:
        external:
          name: dev_network
    
    

    2. 创建网络

    docker network create dev_network
    

    3. 启动服务

    docker-compose up -d
    

    4. master 节点配置

    docker exec -it mariadb-master bash
    mysql -uroot -p'abcd!234'
    

    创建同步账号

    create user 'slave'@'%' identified by 'abcd!234';
    

    授权

    grant replication slave on *.* to 'slave'@'%';
    

    刷新权限

    flush privileges;
    
    查看节点信息
    show master status;
    
    image.png

    5. slave节点配置

    docker exec -it mariadb-slave bash
    mysql -uroot -p'abcd!234'
    

    配置连接的节点:

    change master to master_host='mariadb-master',master_port=3306,master_user='slave',master_password='abcd!234',master_log_file='mariadb-bin.000003',
    master_log_pos=1099;
    

    执行 start slave 开始同步
    查看是否成功:show slave status \G;

    image.png

    MySQL数据同步,出现Slave_SQL_Running:no和slave_io_running:no问题的解决方法

    来源@雨田君的记事本

    相关文章

      网友评论

          本文标题:docker mariadb 主从复制

          本文链接:https://www.haomeiwen.com/subject/tiyjmrtx.html