您的位置:首页 > 运维架构 > Docker

3.Docker双主热备搭建MySQL

2019-12-31 07:10 1666 查看

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

  • 1 前言
  • 2 环境准备
  • 3 安装 3.1 配置master1的my.cnf
  • 3.2 配置master2的my.cnf
  • 3.3 启动容器
  • 3.4 配置master信息 3.4.1查询master1、master2的File、Position
  • 3.4.2 在maste1和master互相配置对方为自己的master
  • 3.5 测试双主热备
  •  

    1 前言

    请先参考2.Docker主从复制搭建MySQL了解MySQL主从复制搭建,双主热备其实就是互为主从,相互实时同步

    双主热备与主从搭建步骤基本一致,在my.cnf配置略有区别,还要在两个机器上设置对方为自己的master。

    2 环境准备

    mysql master1:192.168.64.20

    mysql master2:   192.168.64.21

    3 安装

    3.1 配置master1的my.cnf

    > mkdir -p /data/mysql

    > mkdir conf data logs

    > cd /data/mysql

    > chmod -R 777 logs

    > cd /data/mysq/conf

    > touch my.cnf

    > vim my.cnf

    my.cnf如下:红色设置就是跟主从模式配置的区别

    [mysqld]
    port=3306
    #[必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配
    server-id=20
    #主键自增长偏移起始量,主2设置2,主3设置成3,主n设置成n
    auto_increment_offset=1
    #主键自增长步长量,2个主就设置成2,3个主就设置成3,n个主就设置成n
    auto_increment_increment=2
    #[必须]启用二进制日志
    log-bin=mysql-bin
    #将复制事件写入binlog,一台服务器既做主库又做从库此选项必须要开启
    log-slave-updates=true
    #主库binlog模式:row,从库不需要设置
    binlog_format=ROW
    #只保留最近30天的binlog日志
    expire_logs_days=30
    #设置日志文件得最大值,超过该值则另启文件记录日志
    max_binlog_size = 500M
    #设置日志文件缓存大小
    max_connections=16384
    # 字符集
    character-set-server=utf8mb4
    # 存储引擎
    default-storage-engine=INNODB
    group_concat_max_len=102400
    #开启慢查询:
    slow_query_log=ON
    #慢查询时间,单位秒
    long_query_time=1
    slow_query_log_file=/var/log/mysql/mysql-slow.log
    #全局日志
    general_log=ON
    general_log_file=/var/log/mysql/mysql-general.log
    #错误日志
    log_error=/var/log/mysql/mysql-error.log

    3.2 配置master2的my.cnf

    > mkdir -p /data/mysql

    > mkdir conf data logs

    > cd /data/mysql

    > chmod -R 777 logs

    > cd /data/mysq/conf

    > touch my.cnf

    > vim my.cnf

    my.cnf如下:红色配置就是跟master1的区别

    [mysqld]
    port=3306
    #[必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配
    server-id=21
    #主键自增长偏移起始量,主2设置2,主3设置成3,主n设置成n
    auto_increment_offset=2
    #主键自增长步长量,2个主就设置成2,3个主就设置成3,n个主就设置成n
    auto_increment_increment=2
    #[必须]启用二进制日志
    log-bin=mysql-bin
    #将复制事件写入binlog,一台服务器既做主库又做从库此选项必须要开启
    log-slave-updates=true
    #主库binlog模式:row,从库不需要设置
    binlog_format=ROW
    #只保留最近30天的binlog日志
    expire_logs_days=30
    #设置日志文件得最大值,超过该值则另启文件记录日志
    max_binlog_size = 500M
    #设置日志文件缓存大小
    max_connections=16384
    # 字符集
    character-set-server=utf8mb4
    # 存储引擎
    default-storage-engine=INNODB
    group_concat_max_len=102400
    #开启慢查询:
    slow_query_log=ON
    #慢查询时间,单位秒
    long_query_time=1
    slow_query_log_file=/var/log/mysql/mysql-slow.log
    #全局日志
    general_log=ON
    general_log_file=/var/log/mysql/mysql-general.log
    #错误日志
    log_error=/var/log/mysql/mysql-error.log

    3.3 启动容器

    master1机器启动容器:

    > docker run --name mysql-5.7.27 --network=host -e MYSQL_ROOT_PASSWORD=123456 --privileged=true -v /data/mysql/conf:/etc/mysql -v /data/mysql/logs:/var/log/mysql -v /data/mysql/data:/var/lib/mysql -d mysql:5.7.27

    进入data查看binlog是否生成

    > cd /data/mysq/data

     

    master2机器启动容器:

    > docker run --name mysql-5.7.27 --network=host -e MYSQL_ROOT_PASSWORD=123456 --privileged=true -v /data/mysql/conf:/etc/mysql -v /data/mysql/logs:/var/log/mysql -v /data/mysql/data:/var/lib/mysql -d mysql:5.7.27

    检查mysql容器是否启动成功,没有成功则检查my.cnf和docker run启动参数,删除mysql容器重新启动

    3.4 配置master信息

    3.4.1查询master1、master2的File、Position

    分别进入master1、master2机器的mysql运行下面sql,记录master的File、Position的值,待会在master2库配置中要用到

    mysql>show master status;

    master1:

    master2:

     

    3.4.2 在maste1和master互相配置对方为自己的master

    在master1设置master2为自己的maste:

    mysql>change master to
    master_host='192.168.64.21',
    master_user='root',
    master_log_file='mysql-bin.000003',
    master_log_pos=154,
    master_port=3306,
    master_password='123456';
    mysql> start slave;

    在master2设置master1为自己的maste:

    mysql>change master to
    master_host='192.168.64.20',
    master_user='root',
    master_log_file='mysql-bin.000005',
    master_log_pos=154,
    master_port=3306,
    master_password='442611344';
    mysql> start slave;

    如果不小心配置错, 输入 mysql> stop slave; 然后重新录入一遍后在start slave就可以了

    检查主从连接状态:

    mysql> show slave status\G;

    这两个必须是 Yes 为 No 或者 connect 说明没有连接上
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    3.5 测试双主热备

    在master1库上建库、建表、插入sql,然后到master2库查看是否同步成功

    create database db01 default character set utf8mb4 collate utf8mb4_general_ci;

    use db01;
    create table `tb01` (
    `id` int(11) not null auto_increment,
    `name` varchar(255) default null,
    `phone` varchar(255) default null,
    primary key (`id`)
    ) engine=innodb auto_increment=1 default charset=utf8mb4;

    insert into tb01(name, phone) values('name_1', 'phone_1');
    insert into tb01(name, phone) values('name_2', 'phone_2');
    insert into tb01(name, phone) values('name_3', 'phone_3');

    在master2查看是否同步成功后操作表数据,然后查看master1是否同步成功

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签:  Docker MySQL