sqlserver 基于镜像主从_基于Docker搭建MySQL的主从复制

ebe307157c6712cdb36ef2a083be96f9.gif

65852c5a310d784fd7b36b0a16c8e103.png

Docker安装

docker安装请参考我之前的文章:https://lupf.cn/articles/2019/11/23/1574503815568.html 详细的教你如何在centos上安装docker

数据库安装
  • 主从基本信息

    ip端口类型镜像版本容器名称
    192.168.1.2203306主库5.7.13mysql-master01-3306
    192.168.1.2203307从库5.7.13mysql-slave01-3307
  • 创建工作目录

    mkdir -p /usr/local/docker/mysql
    cd /usr/local/docker/mysql
    mkdir 3306 3307
  • 准备my.cnf

    这里准备这个配置文件的主要目的是为了后续方便主从的配置;使用的就是5.7.13版本对应的my.cnf;是预先从容器的/etc/mysql目录中拷贝出来的;如果你使用的不同的mysql镜像版本,可以按以下方式去拷贝出一份对应版本的my.cnf

    # 如果你使用的是其他的版本,可以将5.7.13更换为你所使用的版本
    docker run --name mysql-test -p 6033:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13

    # 查看镜像是否运行成功 下面指令如果可以找到对应的详细信息,说明成功
    docker ps

    # 将容器/etc/mysql/my.cnf文件拷贝到当前目录
    docker cp mysql-test:/etc/mysql/my.cnf /usr/local/docker/mysql

    # 查看是否拷贝成功
    ll /usr/local/docker/mysql

    # 将文件拷贝到各自的工作目录
    cp /usr/local/docker/mysql/my.cnf /usr/local/docker/mysql/3306
    cp /usr/local/docker/mysql/my.cnf /usr/local/docker/mysql/3307
  • 主库

    # 进入3306的工作目录
    cd /usr/local/docker/mysql/3306

    docker run \
    -p 3306:3306 \
    --name mysql-master01-3306 \
    -v $PWD/conf:/etc/mysql/conf.d \
    -v $PWD/my.cnf:/etc/mysql/my.cnf \
    -v $PWD/logs:/logs \
    -v $PWD/data:/var/lib/mysql \
    -v /etc/localtime:/etc/localtime:ro \
    -e TZ=Asia/Shanghai \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql:5.7.13

    6e48229dc7b0b81dcbd82c048afcea24.png

  • 从库

    # 进入3307的工作目录
    cd /usr/local/docker/mysql/3307

    docker run \
    -p 3307:3306 \
    --name mysql-slave01-3307 \
    -v $PWD/conf:/etc/mysql/conf.d \
    -v $PWD/my.cnf:/etc/mysql/my.cnf \
    -v $PWD/logs:/logs \
    -v $PWD/data:/var/lib/mysql \
    -v /etc/localtime:/etc/localtime:ro \
    -e TZ=Asia/Shanghai \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql:5.7.13
  • 配置说明

    • -p

      用于映射端口,如上所示分别将宿主机的3306、3307分别映射到容器master01和slave01的3306端口上

    • --name

      设置容器的名称

    • -v

      设置映射,将宿主机的目录映射到容器的目录;主要用于持久化关键数据,如/data目录就是用来持久化数据库文件的,这样就算是容器被remove掉之后,数据库的持久化文件依然还在,下次使用这个持久化文件启动一个新的容器数据依然还在。

    • -e

      设置参数;MYSQL_ROOT_PASSWORD为数据库的root密码;TZ用来设置时区

    • -d

      以守护进程的方式运行

    • 运行后的效果

      docker ps -a

      5d2012da038ff289d1cc8f9e85cee32a.png

    • navicat连接测试

      1ec9c6ed7794a66c51c49e6b0c54ab6a.png

配置主从
  • 主库配置

    vim /usr/local/docker/mysql/3306/my.cnf

    ## 添加以下配置
    # 集群唯一id
    # 同个局域网内唯一 所以可以使用ip的最后一段用来作为id 如192.168.1.123,那就把id设置为123,方便查找为题
    # 这里由于使用的docker,且在一台机器上面,所以就用1 2来表示,实际使用过程中,没有谁会将主从部署在同一台机器上的
    server-id=1

    # 开启二进制日志功能
    log-bin=mysql-master01-bin

    # 设置要同步的数据库,这里的t_mall为测试同步到数据库名
    # 如果不设置标识全部同步
    # binlog-do-db=t_mall

    # 设置屏蔽系统默认的数据库
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
  • 从库配置

    vim /usr/local/docker/mysql/3307/my.cnf

    # 集群唯一id
    server-id=2

    # 开启二进制日志功能
    log-bin=mysql-slave01-bin

    # 设置同步的库
    #replicate_wild_do_table=t_mall.%

    # 设置忽略的库
    replicate_wild_ignore_table=mysql.%
    replicate_wild_ignore_table=information_schema.%
    replicate_wild_ignore_table=performance_schema.%
  • 重启数据库

    docker restart mysql-master01-3306 mysql-slave01-3306
  • (主库)创建同步用户(建议使用Navicate客户端去连接并创建)

    # 在默认的mysql数据库上创建

    # 创建db_sync用户
    GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%' IDENTIFIED BY 'db_sync';

    # 查看用户
    select * from user

    # 刷新权限
    FLUSH PRIVILEGES;

    # 确认位点
    SHOW master STATUS

    249b049143d303ebe7176bf3b33346a4.png

  • 从库配置

    # 关闭同步
    STOP SLAVE;

    # 配置同步
    CHANGE MASTER TO
    master_host='192.168.1.220',
    master_port=3306,
    master_user='db_sync',
    master_password='db_sync',
    master_log_file='mysql-master01-bin.000003',
    master_log_pos=432;

    # master_host 主库的地址
    # master_port 主库的端口
    # master_user 主库同步使用的用户名
    # master_password 主库同步使用的密码
    # master_log_file binlog的名称
    # master_log_pos log的位点

    # 开启同步
    START SLAVE;

    #查看同步状态
    SHOW SLAVE STATUS;

    6f5dec85442f4eecf75034c4c7f88a45.png

  • 主从测试(主库操作)

    # 创建数据库
    create database test_db;

    # 切换数据库
    use test_db;

    # 创建测试表
    create table test_db(id int(3),name char(10));

    85321bfa1bd3701b0ee8b08cd212e262.png

到这里,MySQL的主从复制就已经搭建完成了,这里是基于Docker的搭建,基于操作系统的安装和使用Docker的本质是没有什么不同的;但是使用Docker对系统的污染较少,所以个人是比较推荐使用Docker搭建

码字不易,感谢您的点赞!关注!评论!!!

其他推荐

基于VirtualBox搭建Linux(CentOS)虚拟机环境(学习必备技能)

基于Docker搭建Nacos集群

基于Docker 5分钟搭建携程Apollo分布式配置中心

基于Docker搭建百度Disconf配置中心

37931e5e4ae8939e2ebf66a81464c7c9.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值