使用docker在虚拟机实现mysql数据库的主从复制

构建数据库的数据和配置目录

主库的数据目录

mkdir -p /usr/local/docker_local/mysql_master/data & mkdir -p /usr/local/docker_local/mysql_master/conf

从库的数据目录

mkdir -p /usr/local/docker_local/mysql_slave/data & mkdir -p /usr/local/docker_local/mysql_slave/conf

配置主从库的配置文件

复制docker实例中的配置文件到之前配置的配置目录

使用docker拉取数据库镜像

docker pull mysql

根据镜像运行数据库实例

docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name tem_databse mysql

进入数据库实例

docker exec -it tem_databse /bin/bash

复制配置文件的内容,然后在之前的配置目录生成两个一样的配置文件
实例中配置文件的位置

分别配置主从配置文件

主机配置文件:

[mysqld]
server-id=1                # 全局唯一,取值[1,2^32-1],默认为1
binlog-do-db=test          # 表示需要复制的是哪个库

从机的配置文件:

[mysqld]
server-id=2            # 全局唯一,不能与主库相同
replicate-do-db=test   # 与主库相同,表示对该库进行复制

删除原来的用来复制配置文件的docker实例

docker rm -f tem_database

使用主环境的配置文件分别启动主从数据库

启动主库

docker run -d -p 3306:3306 --privileged=true -v /usr/local/docker_local/mysql_master/conf/my.cnf:/etc/my.cnf -v /usr/local/docker_local/mysql_master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name master  mysql

启动从库

docker run -d -p 3307:3306 --privileged=true -v /usr/local/docker_local/mysql_slave/conf/my.cnf:/etc/my.cnf -v /usr/local/docker_local/mysql_slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name slave  mysql

查看启动成功的两个数据库

docker ps -a

在这里插入图片描述
此处是up,说明启动成功

ps:-v参数用来映射主环境和实例环境的配置的位置,MYSQL_ROOT_PASSWORD配置的是数据库root账号的密码

分别创建数据库,并且进行数据备份

进入主机实例

docke exec -it master /bin/bash

登录数据库

mysql -uroot -proot
create database test;
use test;
CREATE TABLE user(
    id BIGINT PRIMARY KEY,
    name VARCHAR(30) NOT NULL
);

数据备份

如果原本主机中有数据,需要进行数据备份

FLUSH TABLES WITH READ LOCK;

开启主库的另一个终端,使用mysqldump导出:

mysqldump -u root -p --all-databases --master-data > dbdump.db

导出完成后,解除读锁:

UNLOCK TABLES;

查看主机状态

SHOW MASTER STATUS;

在这里插入图片描述
需要把File以及Position记录下来,后面从库的配置需要用到。

创建用户

注意创建用户需要加上mysql_native_password,否则会导致从库一直处于连接状态:

CREATE USER 'repl'@'172.17.0.3' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION slave ON *.* TO 'repl'@'172.17.0.3';

这是从库实例登录主库进行日志读取的,具体的HOST地址请根据从库的地址修改,可以先看后面的从库配置部分。

PS:从库数据配置和以上大同小异,需要注意的是,如果从库的实例和主库的实例是使用同一个镜像生成的,需要修改从库的auto.cnf里面的UUID,使其于主库不同,改完之后重启从库。
配置文件的位置和内容

配置从库,实现主从复制

进入从库

docker exec -it slave /bin/bash && mysql -uroot -proot;

配置主库的连接和同步信息,host账号密码都是之前新建的同步账号的,这里的host就是从库所在实例的host,这里的binlog日志和日志的定位位置,就是之前在主库show master status看到的,数据库每次重启都会生成一个新的binlog日志,所以要对应准确

CHANGE REPLICATION SOURCE TO
source_host='172.17.0.2',                   
source_user='repl',                        
source_password='123456',                  
source_log_file='binlog.000008',            
source_log_pos=157;

配置完成后,查看连接情况
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值