使用 Docker 建立 Mysql 集群
软件环境介绍
操作系统:Ubuntu server 64bit 14.04.1
Docker 版本 1.6.2
数据库:Mariadb 10.10 (Mariadb 是 MySQL 之父在 MySQL 被 Oracle 收购之后
创建的分支,性能上优于 MySQL 开源版本)
第一步 安装 Docker
对于 Ubuntu,建议直接联网安装 Docker 最新版本,apt-get 中版本较老。
首先获取安装脚本:
wget https://get.docker.com
下下来的虽然名字是 index.html,但其实是脚本文件,所以我们
chmod +x index.html
这样我们就可以执行这个文件:
sudo ./index.html
安装完成后根据提示,可以将当前用户加到 docker 用户组里,这样就不用每次
执行 docker 都需要 sudo 了。
sudo usermod -aG docker <你的用户名>
对于 Centos6,首先要把企业常用软件包的软件源安装上
yum install epel-release
然后再
yum install docker-io
第二步 运行 Mariadb 容器
首先要将数据镜像拉下来
docker pull mariadb:latest
注意,如果不加:latest 标签,docker 会把所有的镜像版本都拉下来。
然后我们就可以启动镜像了,参数方面需要注意的有一下几点:
1,-name <给容器取个好记的名称>
2,-e MYSQL_ROOT_PASSWORD =‘<给数据库一个 root 用户密码>’
3,-p <映射到本机的端口>:3306
4,-v <本机的数据库存放目录>:/var/lib/mysql
5,设定 MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE 环境变量可以使容器在
运行时同时创建你所需要的数据库和带有全部权限的用户及其对应密码
6,设定 TERM 环境变量的值可以解决容器不能进入 mysql 控制台的问题。
对于不是自己建立的镜像,建立出来的容器未必能一次达到要求,建议是将 run
命令写成脚本,创建后使用
docker inspect <容器名>
仔细查看容器信息,关注镜像公开的端口和文件目录。如果发现达不到要求,使
用
docker rm -f <容器名>
删除容器后修改 run 脚本再次运行,直到满意为止。
下面是我的 run 命令:
docker run --name mdb1 \
-p 13306:3306 \
-v /home/wonders/docker_mdb1_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=wondersgroup \
-e MYSQL_USER=medical_waste \
-e MYSQL_PASSWORD=medical_waste \
-e MYSQL_DATABASE=medical_waste \
-e TERM=linux \
-d mariadb
第三步 配置一主一从集群
3.1
接下来启动另一个容器作为从数据库, 因为镜像不支持在容器内进入 mysql 控制
台,所以依然需要把端口暴露出来以供局域网访问,但主数据库容易可以链接进
来作为一个可访问的主机 master_db。
docker run --name <从数据库名> -e MYSQL_ROOT_PASSWORD=<从数据库 root
密码> --link <主数据库容器名>:master_db -d mariadb
3.2
接下来就需要配置两个数据库了,前提工作是镜像中并没有自带 vi,所以在两
个容器内都需要:
apt-get update
apt-get install vim
这样我们才能在容器内修改配置文件。
还有一种方法,就是我们在主数据库容器中操作,之后,使用
docker commit <主数据库容器名> mariadb
这样再创建的容器就包含 vi 了。
3.3
为讲述方便,现在假设:我们有了连个数据库,mdb1 和 mdb2, mdb1 我们作为主
数据库,mdb2 作为从数据库。
首先修改主数据库:
docker exec -it mdb1 /bin/bash
进入主数据库容器内之后,
vi /etc/mysql/my.cnf
把“server-id = 1”行的注释去掉即可,保存,退出容器,然后
docker restart mdb1
同样的,把从数据库的 my.cnf 修改“server-id = 2”,需要是比主 server-id
大的数字,mdb2 同样需要重启。
3.4
使用客户端连接上主数据库,这里我使用的是 mysql workbench,从数据库因为
安全考虑并没有公开端口给主机,只能进入容器的 mysql 控制台进行操作。
在主数据库中执行 SQL 脚本:
/*设定用于同步的账号、密码*/
grant replication slave on *.* to ‘sync’@'%' identified by 'sync';
/*保存权限设定*/
flush privileges;
/*查看主数据日志状态,需要记住查询结果 File 和 Position 值,是从数据库复
制的日志起点*/
show master status;
在从数据库中执行 SQL 脚本:
/*如果已经开启了同步,停止同步*/
stop slave;
/*设定主数据库*/
change master to
master_host='master_db',
master_user='sync',
master_password='sync',
master_port=3306,
master_log_file='<主数据库查询得到的 File 值>',
master_log_pos=<主数据库查询得到的 Positions 值>;
下面是我的脚本例子:
change master to
master_host='master_db',
master_user='sync',
master_password='sync',
master_port=3306,
master_log_file='mariadb-bin.000004',
master_log_pos=789;
/*开启从数据库复制*/
start slave;
最后可以通过
show slave status;
查看同步情况。
至此我们就建立了一个基于 Docker 的 Mariadb 数据库
使用 Docker 建立 Mysql 集群的更多相关文章
- docker 下 mysql 集群的搭建
下载程序&&创建docker容器 从mysql官网https://dev.mysql.com/downloads/cluster/上下载mysql集群库mysql-cluster-gp ...
- Docker部署Mysql集群
单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...
- docker 搭建Mysql集群
docker基本指令: 更新软件包 yum -y update 安装Docker虚拟机(centos 7) yum install -y docker 运行.重启.关闭Docker虚拟机 servic ...
- docker搭建mysql集群
目录 一.集群方案 二.安装PXC集群 三.Haproxy负载均衡 四.访问测试 五.节点宕机或重启 六.参考 一.集群方案 1.Replication 速度快,但仅能保证弱一致性,适用于保存价值不高 ...
- docker PXC MYSQL集群节点启动失败/节点顺序消失/只剩一个节点存在问题的解决
转载于:https://my.oschina.net/u/4884318/blog/4908669 大牛 佩服此人 截取本人遇到的问题: "error:0407008A:rsa routin ...
- Docker安装MySQL集群【读写分离】
Centos7系统Docker安装 目录 Centos7系统Docker安装 目录 Centos7系统Docker安装 1.下载mysql镜像 2.创建Master实例并启动 参数说明 3.创建Sla ...
- MySQL集群之MyCat
MySQL集群之MyCat 一.MyCat简介及分析 1.1 MyCat是什么? 1.2 关键特性及应用场景 1.2.1 关键特性 1.2.2 应用场景 1.2.3 MyCat不适合的应用场景 1.3 ...
- Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群
单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...
- docker搭建基于percona-xtradb-cluster方案的mysql集群
一.部署环境 序号 hostname ip 备注 1 manager107 10.0.3.107 centos7;3.10.0-957.1.3.el7.x86_64 2 worker68 10.0.3 ...
随机推荐
- Ubuntu技巧之 is not in the sudoers file解决方法
转自:http://www.linuxidc.com/Linux/2010-12/30386.htm 1)进入到root用户下. 2)添加文件的写权限.也就是输入命令"chmod u+w / ...
- 混合应用中的javascript实践
混合应用中的javascript实践 混合应用(hybird app) 在几年前便进入大众视野,近来更是越发风生水起,深受人民群众的喜爱. 目录 概念 什么是混合应用 混合方式 交互 方法注入 参数传 ...
- Spark Streaming和Flume-NG对接实验
Spark Streaming是一个新的实时计算的利器,而且还在快速的发展.它将输入流切分成一个个的DStream转换为RDD,从而可以使用Spark来处理.它直接支持多种数据源:Kafka, Flu ...
- Android四大组件之Service
Android四大组件之Service Android支持服务的概念,服务是在后台运行的组件,没有用户界面,Android服务可用有与活动独立的生命周期.Android支持两种类型的服务: 本地服务: ...
- bmob
移动后台: bmob http://baike.baidu.com/link?url=GHdwJY3cGygcfQDdzosckQnhVy1pvIGZA2Ws0K26lSSFGu7QRX4R1wlo6 ...
- CUDA中的Toolkit
CUDA Toolkit是什么? 对于使用 C 语言和 C++ 来开发 GPU 加速应用程序的开发者来说,NVIDIA CUDA Toolkit 可提供一个综合的开发环境.CUDA Toolkit 包 ...
- BZOJ 1455
STL的基本用法 (居然能空间卡过去= =!!!) #include <cstdio> #include <ext/pb_ds/priority_queue.hpp> #inc ...
- 【架构】docker环境搭建mysql主从
序 本文主要研究怎么在docker上搭建mysql的主从.因为在单机搭建mysql多实例然后再配主从,感觉太痛苦了,环境各有不同,配置各不大相 同,从网上找搭建方法,试了半天也没成功,最后也没耐心调试 ...
- spring中context:property-placeholder/元素
1.有些参数在某些阶段中是常量 比如 :a.在开发阶段我们连接数据库时的连接url,username,password,driverClass等 b.分布式应用中client端访问server端所用的 ...
- jquery 常用类别选择器
1.$('#showDiv'): id选择器,相当于javascript中的documentgetElementById("showDiv"); 2.$("onecla ...