美文网首页工作生活
docker 下 实现MySQL主从复制

docker 下 实现MySQL主从复制

作者: 金_鹏 | 来源:发表于2019-07-01 13:34 被阅读0次

    说明:

    数据库是否适合容器化,目前来说还是一个比较有争议的话题,但是在开发过程中,主从数据库的实现,在资源有限的条件下,使用docker来部署数据库是确实有需要的,所以记录下过程

    一. MySql原理:

    1. 主数据库进行增删改操作后,相应操作记录的语句(比如 create database test)会记录到binlog日志文件中(binlog日志文件一般和数据库data文件夹在一起
    2. 从数据库会请求主数据库的binlog日志文件,获取到新的操作语句,然后在自己的从数据库上自动执行相同的操作语句,进而实现主从的同步。

    二. 主从数据库复制过程

    1. Master开启bin-log功能,binlog日志主要记录数据库的增删改的操作,
    2. 需要开启三个线程,主数据库Master:开启I/O线程,;从数据库Slave:I/O线程,SQL线程
    3. 从数据库 Slave start;通过I/O线程连接Master,并且请求某个Bin-log,position 之后的内容
    4. 主数据库Master服务器收到从数据库Slave I/O 线程发过来的日志请求信息,然后主数据库Master I/O线程将bin-log内容,position返回给从数据库据Slave I/O线程
    5. 从数据库Slave收到bin-log日志内容,将Bin-log日志写入到relay-log中继日志,创建一个master.info文件,该文件记录master IP,用户名,密码,master bin-log名称,bin-log position
    6. 从数据库 Slave 已经开启了sql线程,由sql线程实时监测relay-log日志内容是否有更新,如果有更新,解析文件中的sql语句,并在从数据库Slave中执行相同的操作语句

    三. 主从复制的实现

    1). 配置主数据库Master

    1. 创建主数据库容器
    docker run -p 3380:3306 --name MasterSql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
    
    1. 进入主数据库Master容器,修改mysql配置文件,设置bind-address和server-id,以及开启bin-log
    # 进入主数据库容器
    docker exec -it MasterSql /bin/bash
    
    # 修改mysql配置文件
    vim /etc/my.cnf
    
    # 在[mysql]下添加如下内容
    server-id = 105  # 实际上值可以随便添加
    log-bin   # 开启bin-log
    
    # 重启数据库
    systemctl restart mysqld
    
    1. 创建用户从数据库slave机器上获取主master机器上binlog文件的账号(即主从复制账号)
    grant replication slave on . to 'USER'@'%' identified by 'USERPWD';
    
    1. 查看主数据库Master状态,并记录下binlog日志文件名以及position
    # 登录mysql执行查询语句
    show master status;
    
    image.png

    2). 配置从数据库Slave

    1. 创建从数据库容器
    docker run -p 3381:3306 --name SlaveSql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
    
    1. 同样修改从数据库配置文件
    # 进入从数据库容器
    docker exec -it SlaveSql /bin/bash
    # 添加从数据库serverid
    server-id=106
    # 重启数据库
    systemctl restart mysqld
    
    1. 导入出数据库内容,保持一致

    2. 设置从数据库Slave监听的主数据库Master

      (注: docker 下 通过" docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id)"来查询主数据库下的IP

    # 进入从数据库下执行sql
    change master to master_host='主数据库ip' ,  
    master_port=3380,  # 
    master_user='Master上设置的账户', 
    master_password='Master上设置的密码', 
    master_log_file='Master上mysql-binID',
    master_log_pos=Master上的position
    
    1. 开启Slave
    # 在从数据库下执行sql语句
    start Slave;
    
    1. 验证数据库的主从状态(Slave_IO_Running和Slave_SQL_Running为YES即成功)
    # 在从数据库下执行sql语句
    show Slave status;
    
    image.png

    四. 检验是否成功

    主数据库Master下,任意修改内容,检查下从数据库Slave是否同步

    相关文章

      网友评论

        本文标题:docker 下 实现MySQL主从复制

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