使用docker构建双主mysql

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

使用docker构建双主mysql
我们有的时候需要双主mysql, 这样无论哪个数据库出现了问题的话都可以继续使用数据库。把两个数据库挂到一个代理上面,这样哪个服务出问题了,另外一个就可以继续服务了。当然本文不是主要谈代理的,所以这个不做细说。

因为我们的电脑资源有限,所有我们继续采用docker的形式进行处理。

首先我的电脑是mac且安装了docker的,如果有同学没有安装的话需要提前安装上。加上国内加速镜像站,这样拉取镜像服务的时候我们就会很快完成,否则镜像需要从国外拉取很慢。这个我之前遇到的问题,后来就把docker放置了很久,现在配置了国内加速镜像站,拉取镜像很快了。

docker的基础知识之前在我的博文中已经说了,不太清除的可以用“飞机票”过去。

好了,咱们进入正题,大家的docker环境已经准备好了。我们拉取镜像 mysql 5.7版本,拉取完成后可以看一下自己有哪些镜像。

docker pull mysql:5.7
docker images
接下来我们需要创建一个网络环境,让主从机器在相同的环境中。可以通过命令:docker network ls 查看自己创建了哪些网络。咱们下面创建了以mysql为名网络。

docker network create --driver=bridge mysql
咱们把主从的机器开始启动。

docker run -p 3366:3306 --network=mysql -h "mysql_master"  --name mysql_master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run -p 3367:3306 --network=mysql -h "mysql_slave" --name mysql_slave -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
上边的参数大概解释一下 -p 是将机器内部的端口暴露出来,这个就可以从外边连接mysql机器了。 -h 是主机名, --name 用于指定启动的容器的名字,这个就可以在后续中用于重启镜像了,比如:docker restart mysql_master。-e 用于创建的时候指定环境变量,因为mysql容器必须指定root的密码,所以通过-e进行设置,把密码设置为root。 -d 这个是deamon的意思,就是守护进程,也就是在后台运行。最后指定mysql及版本号用于启动。

接下来咱们需要进入到mysql_master机器中。docker exec是用于进入正在运行的机器中,-it是交互的方式,最后指定脚本类型bash。

docker exec -it mysql_master /bin/bash
进入到机器以后,因为mysql的进行很干净,里边没有我们需要的工具。这个镜像的内核是debian,我们需要安装vim及ping工具。我们需要首先把apt的源更改,首先把源文件备份,然后设置了163的源作为我们的apt源。当然大家可以搜索其他云apt的源都是可以的。

cp /etc/apt/sources.list /etc/apt/sources_init.list

echo "deb http://mirrors.163.com/debian/ buster main non-free contrib
deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib

deb-src http://mirrors.163.com/debian/ buster main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib" > /etc/apt/sources.list

我们更新一下apt-get,然后安装vim及ping,执行完了工具也就安装好了。

apt-get update
apt-get install vim
apt-get install iputils-ping
这些更新apt即安装工具的方法也需要再slave中执行一遍,我就不单独发步骤了。我们可以测试一下ping命令,我们执行  “ping mysql_slave” 有返回值,说明网络是通着的。我们继续编辑mysql的配置文件。

vim /etc/mysql/mysql.conf.d/mysqld.cnf
我们配置上server-id和log-bin,mysql是通过bin log进行同步的,这个也就是开启log-bin。每个机器的server-id是不一样的,用于标志不同的机器。

server-id=1
log-bin=mysql-bin
保存后我们退出镜像,然后重启镜像使其配置生效。

docker restart mysql_master
我们也需要把slave的机器文件也改一下。这里进入机器的命令为: docker exec -it mysql_slave /bin/bash 。执行一下上边的更新和安装配置,配置好了之后记得重启一下slave : docker restart mysql_slave 。

server-id=2
log-bin=mysql-bin
binlog_format=mixed
我们在master的机器里边进入mysql, 执行的命令如下。输入密码root即可进入。

mysql -uroot -p
我们需要授权root用户的replication及slave权限。如果不授权的话,从库是不能连接主库的。

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'root'@'%';
看一下master的日志文件即位置。我们看到了master机器的文件名及其位置。

mysql> show master status;
File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set
mysql-bin.000001 154

1 row in set (0.00 sec)

我们也需要开启一个slave的机器,并且进入到mysql里边。因为可能需要来回切换。我们在从库里边执行如下命令。里边配置设置了master的主机名,主机端口号,主机用户名,密码,主机器的文件名字以及位置。

change master to master_host='mysql_master',master_port=3306, master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=154;
接下来我们来启动slave,并且查看slave的线程命令。

start slave;
show slave status G;

里边的yes说明已经开启成功并且连通,如果没有连通的话就是NO,这个时候需要检查上边配置的主机的host 用户名和密码,这些都需要检查一遍。

我们在master的机器上建一个数据库test - create database test; 然后我们在从库里边查看,已经有了。说明从库已经创建好了。

mysql> show databases;
Database
information_schema
mysql
performance_schema
slavetest
sys
test

6 rows in set (0.00 sec)

接下来我们我们在mysql_slave机器的库把用户root进行授权。

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'root'@'%';
然后看一下mysql_slave机器的日志文件名及位置。

show master status G;
我们找到对应的文件名及位置,看一下下面的命令着两个值是否正确,不正确的话替换即可,正确的话进入mysql_master机器上执行。

change master to master_host='mysql_slave',master_port=3306, master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=154;
执行完了之后在mysql_master上执行。

start slave;
然后看一下slave的状态。如果刚才像上图那样的都是Yes的话说明成功。

show slave status G;
接下来咱们在mysql_slave的机器上创建一张表。create database slavetest; 这个时候我们进入mysql_master机器上查看一下。

mysql> show databases;
Database
information_schema
mysql
performance_schema
slavetest
sys
test

这个时候也有了,说明双主mysql搭建完成。

原文地址https://www.cnblogs.com/huangqingshi/p/12593395.html

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
29天前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
242 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
11天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
74 2
|
13天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
21 1
|
20天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
68 7
|
19天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
53 6
|
18天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
24 4
|
19天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
29 3
|
24天前
|
jenkins 测试技术 持续交付
Docker最佳实践:构建高效的CI/CD流水线
【10月更文挑战第17天】在现代软件开发实践中,持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)已成为提高开发效率和软件质量的重要手段。Docker作为一种容器技术,为构建一致且隔离的开发环境提供了强有力的支撑。本文将探讨如何利用Docker来优化CI/CD流程,包括构建环境的标准化、镜像管理以及与CI/CD工具(如Jenkins、GitLab CI)的集成。
47 5
|
23天前
|
JavaScript Docker Python
下个时代的开发工具-Nix:声明式的运行环境构建器、简单场景下的docker替身
Nix 是一个独特的包管理工具和构建系统,采用声明式方法管理软件包和运行环境。它通过精确控制依赖关系和环境配置,确保软件的可重复性、隔离性和可追溯性。Nix 支持多语言开发环境,提供声明式配置、环境隔离、回滚与版本控制等核心功能,适用于复杂开发场景,有效解决依赖冲突和环境不一致问题。