【保姆级】docker安装MySQL主从复制

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【保姆级】docker安装MySQL主从复制

1.拉取MySQL的镜像


这里拉取的mysql镜像的版本是8.0.25


docker pull mysql:8.0.25


2.新建MySQL主服务器的容器实例,端口为3307

docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-v /mydata/mysql-master/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.25


命令解读:

docker run :创建并运行一个容器

–name : 给容器起一个名字,比如叫做abc

-p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口

-d:后台运行容器

-e:环境变量,如密码什么的

-v:挂载一个数据卷到某个容器内目录,上面分别配置了日志、数据、配置的数据卷


docker使用mysql8镜像时加载指定的外部配置文件和存储目录时,也需要指定 /var/lib/mysql-files的外部目录,不然会报如下的错:


mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)


所以在启动容器时 需要加上-v /mydata/mysql/mysql-files:/var/lib/mysql-files/


3.进入/mydata/mysql-master/conf目录下新建my.cnf


cd /mydata/mysql-master/conf


vim my.cnf


里面编写如下的配置(建议复制):

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062


4.修改完配置后重启master实例


docker restart mysql-master


5.进入mysql-master容器


docker exec -it mysql-master /bin/bash


mysql -uroot -p123456


6.在mysql-master容器实例内创建数据数据同步用户


新建一个数据同步用户:


CREATE USER 'slave'@'%' IDENTIFIED BY '123456';


给这个用户授予权限:


GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';


考虑到我的MySQL8 ,密码密码必须修改为mysql_native_password的plugin才能被连接,不然无法连接。


ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';


到这一步结束后,主机3307就告一段落了。


7.新建从服务器从服务器实例3308


docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-v /mydata/mysql-slave/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.25


8.进入/mydata/mysql-slave/conf目录下新建my.cnf


cd /mydata/mysql-slave/conf


vim my.cnf


编写如下的配置:

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1


9.修改完配置后重启slave实例


docker restart mysql-slave


10.在主数据库中查看主从同步状态


docker exec -it mysql-master /bin/bash


mysql -uroot -p123456


查看主从状态


show master status;


c1e4e06f1d5f4748a4ac8c2d61e29ac9.png


11.进入mysql-slave容器


docker exec -it mysql-slave /bin/bash


mysql -uroot -p123456


12.在从数据库里面配置主从复制


change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=156, master_connect_retry=30;


主从复制命令参数说明:

master_host: 主数据库的IP地址;


master_port:主数据库的运行端口;


master_user:在主数据库创建的用于同步数据的用户账号;


master_password:在主数据库创建的用于同步数据的用户密码;


master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;


master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;


master_connect_retry:连接失败重试的时间间隔,单位为秒。


在从数据库中查看主从同步状态:


show slave status \G


4fbdf9cefbc243069edcef4118c95da5.png


13.在从数据库中开启主从同步


start slave;


查看从数据库状态是否开启同步:


show slave status \G


bb3374f6b7334f97bd7c8fa9bfc35098.png


14.主从复制测试


主机新建数据库,然后新建数据表,插入数据,然后在从数据库里面查看是否同步。

本案例主数据库可以读写数据,从数据库可以同步读取主数据库的数据,从数据库写的数据只存在从数据库中,不会进行同步。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
118 82
|
2月前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
1月前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
207 42
|
1月前
|
关系型数据库 MySQL 数据库
Docker下Mysql8数据备份与恢复
通过以上步骤,您可以在Docker环境下高效地备份和恢复MySQL 8数据库。备份数据时,使用 `mysqldump`工具生成逻辑备份文件,并存储到指定目录;恢复数据时,使用 `mysql`工具从备份文件中读取数据并恢复到数据库。自动化脚本和定时任务的配置可以进一步简化备份和恢复的管理过程。
150 41
|
2月前
|
关系型数据库 MySQL Docker
docker pull mysql:8.0.26提示Error response from daemon: Get “https://registry-1.docker.io/v2/“: EOF错误
docker pull mysql:8.0.26提示Error response from daemon: Get “https://registry-1.docker.io/v2/“: EOF错误
|
2月前
|
安全 关系型数据库 MySQL
CentOS7仅安装部署MySQL80客户端
通过上述步骤,你可以在CentOS 7上成功安装并配置MySQL 8.0客户端。这个过程确保你能够使用MySQL客户端工具连接和管理远程的MySQL数据库,而不需要在本地安装MySQL服务器。定期更新MySQL客户端可以确保你使用的是最新的功能和安全修复。
322 16
|
2月前
|
SQL 关系型数据库 MySQL
docker-compose部署mysql8
使用docker-compose容器化部署mysql8
|
3月前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
153 14
|
3月前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
140 24
|
2月前
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
171 7