Docker实战-mysql主从备份
安装docker环境
docker官网 https://www.docker.com/products/docker-desktop
根据你的系统下载安装包
ps: 安装docker windos版本 系统必须为win10x64位专业版,支持Hyper-V
-
开启Hyper-V
-
打开控制面板->程序和功能
-
打开启用或关闭windows功能并启用Hyper-V
-
-
配置docker镜像加速器
- 获取阿里云镜像加速器
-
右键右下角托盘菜单中的小鲸鱼图标,点击Settings配置
-
在配置面板的侧边栏中选择Demon
-
Registry mirrors中添加 加速器地址
-
apply保存配置,重启docker
下载mysql5.7镜像
docker pull mysql:5.7
查看下载的镜像docker images
下图可以看到我安装了nginx、php和mysql的镜像,这里你们只用安装一个mysql就可以了
创建容器
使用docker run
命令创建一个容器
参数说明:
--name 容器别名
-d 后台运行容器并返回容器id
-p 端口映射,格式: -p 本机端口:容器端口 例: -p 33306:3306将本机的33306分配给容器的3306端口
-e 设置环境变量
--link 连接其他容器 格式: --link 容器名称:容器别名 例: --link mysql1:mysqltest 连接--name=mysql1的容器
修改mysql的配置
查看镜像文档
https://hub.docker.com/_/mysql/
在文档中查看如何修改mysql的配置
查看容器支持的配置选项
docker run -it --rm 镜像名称及版本号 --verbose --help
docker run -it --rm mysql:5.7 --verbose --help
创建mysql容器
-- server-id=1 修改mysql的配置文件,标识数据库的唯一编号
--log-bin=mysql-bin=mysql-bin 启动二进制日志并设置二进制日志文件的名字
创建主库
docker run --name master -d -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 --server-id=1 --log-bin=mysql-bin
创建从库1
docker run --name mysql1 -d -p 33307:3306 -e MYSQL_ROOT_PASSWORD=123456 --link master:mysqlmaster mysql:5.7 --server-id=2 --log-bin=mysql-bin
创建从库2
docker run --name mysql2 -d -p 33308:3306 -e MYSQL_ROOT_PASSWORD=123456 --link master:mysqlmaster mysql:5.7 --server-id=3 --log-bin=mysql-bin
配置mysql主从复制
1.通过工具navicat
给主库创建一个从库复制时用的账号
从库需要用这个账号来连接主库服务器并读取二进制日志文件实现数据同步
GRANT replication slave ON *.* TO '用户名'@'允许连接的主机ip' IDENTIFIED BY '密码';
GRANT replication slave ON *.* TO 'slave'@'%' IDENTIFIED BY '123456'; # %代表任意主机
获取主库的日志文件及当前日志所记录的位置
show master status
获取到这两个参数后就不要再操作主库了
打开从库执行sql配置主库信息
master_host 正常情况下这里应该写主库ip,但是我们是在docker中,就填写在创建这个从库容器时--link所连接的主库容器的别名
stop slave; #停止主从复制
change master to
master_host="mysqlmaster",
master_user="slave",#主库的用户名
master_password="123456",#主库的密码
master_log_file="mysql-bin.000003",#二进制日志文件
master_log_pos=430;#当前日志所记录的位置
start slave; #开始主从复制
查看是否配置成功
show slave status
都为Yes就成功了
再去主库中创建一个数据库试试
2.通过进入容器
a.找到主库容器ID,进入主库容器控制台 docker exec -it container id /bin/bash
b.进入mysql命令行,mysql -uroot -p123456 ,输入如下命令:
创建这个用户,让从库通过该用户进行复制日志
创建一个用户:create user ‘zhuyu’@‘%’ identified by ‘123456’;
用户赋予权限:grant all privileges on *.* to ‘zhuyu’@‘%’ with grant option;
赋予复制权限:grant replication slave on *.* to ‘zhuyu’@‘%’ with grant option;
使刚刚的命令生效:flush privileges;
查看主库日志文件:show master status; 记住File与Position的值,从库要用
c.进入从库容器mysql命令行,和上面一样的命令,连接主库
连接主库:change master to master_host='192.168.0.115',master_user=‘zhuyu’,master_password='123456',master_log_file='master-bin.000004',master_log_pos=1118;
开启从库:start slave;
查看从库状态:show slave status\G
如果连接配置错误要重新更改,可以使用 stop slave; reset slave;
看到下图红色线条部分的两个 Yes,则说明主从库搭建成功
使用 mysql 客户端连接主库,创建一个数据库,再连接从库查看该数据库是否同步过来了,我这边成功同步了
上一篇: 工具与效率与健康