使用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 : --network=mysql -h "mysql_master" --name mysql_master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run -p : --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=
log-bin=mysql-bin
保存后我们退出镜像,然后重启镜像使其配置生效。
docker restart mysql_master
我们也需要把slave的机器文件也改一下。这里进入机器的命令为: docker exec -it mysql_slave /bin/bash 。执行一下上边的更新和安装配置,配置好了之后记得重启一下slave : docker restart mysql_slave 。
server-id=
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. | | | | |
+------------------+----------+--------------+------------------+-------------------+
row in set (0.00 sec)
我们也需要开启一个slave的机器,并且进入到mysql里边。因为可能需要来回切换。我们在从库里边执行如下命令。里边配置设置了master的主机名,主机端口号,主机用户名,密码,主机器的文件名字以及位置。
change master to master_host='mysql_master',master_port=, master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=;
接下来我们来启动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 |
+--------------------+
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=, master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=;
执行完了之后在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搭建完成。
使用docker构建双主mysql的更多相关文章
- keepalived健康检查及双主MySQL健康检查脚本
一.http检查 HTTP_GET:工作在第5层,向指定的URL执行http请求,将得到的结果用md5加密并与指定的md5值比较看是否匹配,不匹配则从服务器池中移除:此外还可以指定http返回码来判断 ...
- 双主MySQL+keepalived高可用配置
部署双节点双主数据库服务器mysql 分别在二台服务器上安装mysql,要求同版本或主服务器比从服务器版本高. 主机mysql配置: Vi /etc/my.cnf [mysqld] Log-bin=m ...
- 编译安装keepalived,实现双主mysql高可用
安装keepalived 1.官网下载源码包,解压 # wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz # tar x ...
- Nginx+keepalived构建双主负载均衡代理服务器
引言 Nginx是一个高性能的代理服务器,单台Nginx容易出现单点故障,使用keepalived可以实现Nginx的故障转移,保证了网站的高可用性 一.使用Nginx+keepalived的两种方案 ...
- mysql主从之LVS+keepalived+双主MySQL 负载均衡
LVS(Linux Virtual Server)即Linux 虚拟服务器,是一个的开源负载均衡项目,目前LVS 已经被集成到Linux 内核模块中.LVS 是四层负载均衡,也就是说建立在OSI 模型 ...
- 在Docker下进行MyCAT管理双主双从MySQL集群
前言 在Docker下双主双从MySQL集群模拟 https://www.cnblogs.com/yumq/p/14259964.html 本文实验配置文件 Docker拉取MyCAT镜像 如果没启动 ...
- [Mysql高可用]——双主互备+keepalived
实验架构图 实验环境 主机名 操作系统 Mysql版本 keepalived版本 主机IP VIP lyj1(Master/Slave) Red Hat release 6.5 Mysql5.6 ...
- Docker Mysql数据库双主同步配置方法
一.背景 可先查看第一篇<Docker Mysql数据库主从同步配置方法>介绍 二.具体操作 1.创建目录(~/test/mysql_test1): --mysql --mone --da ...
- 在Docker下搭建MySQL双主双重集群(单机展示,与多机原理一致)
前言 Docker的安装部署&在Docker下MySQL的安装与配置 https://www.cnblogs.com/yumq/p/14253360.html 在Docker进行单机主从复制M ...
随机推荐
- hexo文章编写部分语法总结以及hexo使用
一.hexo的使用 1.1 新建一篇文章 1 $ hexo new [layout] <title> 1.2. 生成静态文件 1 $ hexo generate 可简写为 1 $ hexo ...
- hihoCoder 1128 二分查找
Description Input and Output Codes 描述#1128 : 二分·二分查找 Description Nettle最近在玩<艦これ>,因此Nettle收集了很多 ...
- Android中Intent的各种常见作用。
Android开发之Intent.Action 1 Intent.ACTION_MAIN String: android.intent.action.MAIN 标识Activity为一个程序的开始. ...
- 烘焙ID贴图
ID贴图(ID Map)的作用主要就是用来区分同一个模型中不同的区块,具体的用法查看此文.下面介绍几种不同的方式来烘焙ID贴图,用到的工具分别是Blender和Substance Painter. 在 ...
- JAVA WEB基础巩固之Json、Ajax
一.Json(Json介绍)json校验工具 Json是JavaScript object notation的缩写,优点是易读易编写易于解析: 例如:Object: { "name" ...
- SpringBoot图文教程8 — SpringBoot集成MBG「代码生成器」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- P1097 统计数字
P1097题库链接:https://www.luogu.org/problem/P1097 难度:普及- 算法标签:模拟,排序,概率论 1.桶模拟 O(n) 得分20 由于题目让统计数出现的次数,并按 ...
- scrapy post payload的坑及相关知识的补充【POST传参方式的说明及scrapy和requests实现】
一.问题及解决: 在用scrapy发送post请求时,把发送方式弄错了. 本来应该是 application/x-www-form-urlencoded 弄成了application/json. 但 ...
- 【2020Python修炼记3】初识Python,你需要知道哪些(一)
一.编程语言简介 机器语言 计算机能直接理解的就是二进制指令,所以机器语言就是直接用二进制编程,这意味着机器语言是直接操作硬件的,因此机器语言属于低级语言, 此处的低级指的是底层.贴近计算机硬件(贴近 ...
- 利用短信通知的方式在Tasker中实现收到Android手机短信自动转发到邮箱
利用短信的通知实现短信内容转发到微信 code[class*="language-"] { padding: .1em; border-radius: .3em; white-sp ...