美文网首页Amazing Arch
一、docker搭建mysql主从复制

一、docker搭建mysql主从复制

作者: 爱泡脚的CXY | 来源:发表于2019-02-24 15:35 被阅读52次

    docker技术已经很成熟了,近期有系统学习docker的计划,现在学习的docker知识比较混乱,都是想到什么去百度搜一下并没有系统的学习过,前几天看了个mysql主从搭建的视频,本人用docker做了下mysql的主从复制。故在此记录下
    注:MASTER 代表主数据库
    SLAVE 代表从数据库

    一、准备:一台linux服务器(centos,debain都可以,个人推荐deabin)

    二、安装docker,这里不详细说了

    三、拉取mysql镜像,这里用的版本为mysql5.7

    使用镜像加速:docker pull registry.docker-cn.com/library/mysql:5.7

    四、创建文件夹

    (1)、MASTER数据库使用:mkdir -p /usr/local/docker/mysql-master/conf /usr/local/docker/mysql-master/data
            SLAVE数据库使用:mkdir -p /usr/local/docker/mysql-slave-01/conf /usr/local/docker/mysql-slave-01/data
    

    五、新建mysql的配置文件my.cnf

        MASTER: vim /usr/local/docker/mysql-master/conf/my.cnf
        写入配置:
    

    [mysqld]
    server-id=1 ## 同一局域网内注意要唯一
    log-bin=master-bin ## 开启二进制日志功能,可以随便取(关键)
    log-bin-index=master-bin.index ##同上
    user=mysql
    character-set-server=utf8
    default_authentication_plugin=mysql_native_password
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8

       SLAVE: vim /usr/local/docker/mysql-slave-01/conf/my.cnf
        写入配置:
    

    [mysqld]
    server-id=2 ## 同一局域网内注意要唯一
    log-bin=slave01-bin ## 开启二进制日志功能,以备SLAVE作为其它SLAVE的Master时使用
    log-bin-index=slave01-bin.index ## 同上
    relay-log=slave-relay-bin ## SLAVE配置
    relay-log-index=relay-bin.index
    user=mysql
    character-set-server=utf8
    default_authentication_plugin=mysql_native_password
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8

    六、启动数据库,挂载外部数据

    MASTER:
    docker run -d --privileged=true --name mysql5.7-master -p 23306:3306 -v /usr/local/docker/mysql-master/data:/var/lib/mysql -v /usr/local/docker/mysql-master/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 registry.docker-cn.com/library/mysql:5.7
    SLAVE:
    docker run -d --privileged=true --name mysql5.7-slave-01 -p 23307:3306 -v /usr/local/docker/mysql-slave-01/data:/var/lib/mysql -v /usr/local/docker/mysql-slave-01/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 registry.docker-cn.com/library/mysql:5.7

    七、配置MASTER

    可以进入docker内部登录上msql执行,也可用工具,本人使用navicate
    MASTER需要新建用户,让SLAVE使用
    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'slave'@'%';
    其中的%可以换成从数据库的ip地址
    执行查看MASTER状态的sql:SHOW MASTER STATUS;

    image.png
    记下:File:master-bin.000003和Position:609
    至此,MASTER完毕

    八、配置SLAVE

    change master to master_host='192.168.56.101',master_port=23306, master_user='slave', master_password='123456',master_log_file='master-bin.000003', master_log_pos= 609, master_connect_retry=30;
    命令说明:

    master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip

    master_port:Master的端口号,指的是容器的端口号

    master_user:用于数据同步的用户

    master_password:用于同步的用户的密码

    master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

    master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

    master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
    执行:start slave;开启主从同步
    执行sql:show slave status;查看SLAVE状态

    image.png
    SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。

    如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,我们可以根据 Last_IO_Error查看错误原因。
    现在在主数据库添加点东西看下从库是否可以正常复制了。
    完毕,希望能帮到大家!!!

    相关文章

      网友评论

        本文标题:一、docker搭建mysql主从复制

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