同步机制

Mysql服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。

环境搭建

本文使用docker-machine创建了2个docker虚拟机,首先需要确保本机已经安装了docker和docker-machine的环境

  1. 创建2个docker-machine的vm机器
docker-machine create --driver virtualbox master1
docker-machine create --driver virtualbox slave1

这里master主服务机器的ip为192.168.99.101,slave从服务机器的ip为192.168.99.100

  1. 配置主服务

    • 连接master主机器
    docker-machine ssh master1
    
    • 主服务设置
    mkdir mysql
    cd mysql
    mkdir conf
    cd conf
    touch my.cnf
    vi my.cnf
    
    • 主服务my.cnf配置
    [mysqld]
    server_id=1
    log-bin=mysql-bin
    binlog-do-db=test
    
    • 创建用来同步的用户和权限
    create user 'mytest'@'%' identified by '123456';
    grant replication slave on *.* to 'mytest'@'%' identified by '123456';
    flush privileges;
    show master status;
    

  2. 复制从服务

    • 连接slave从机器
    docker-machine ssh slave1
    
    • 从服务设置
    mkdir mysql
    cd mysql
    mkdir conf
    cd conf
    touch my.cnf
    vi my.cnf
    
    • 从服务my.cnf配置
    [mysqld]
    server_id=1
    log-bin=mysql-bin
    replicate-do-db=test
    
    • 主从设置
    change master to master_host='192.168.99.101',master_user='mytest',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=1032;
    

    启动从服务:

    start slave;
    

    查看从服务状态:

    show slave status \G;
    

    这里Slave_IO_RunningSlave_SQL_Running都是yes就ok了

测试

此时我们在master主服务上面修改test库的任何数据,slave上都会同步过来

可以看到,所有的举动都是一毛一样