软件环境介绍
操作系统: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 集群的更多相关文章

  1. docker 下 mysql 集群的搭建

    下载程序&&创建docker容器 从mysql官网https://dev.mysql.com/downloads/cluster/上下载mysql集群库mysql-cluster-gp ...

  2. Docker部署Mysql集群

    单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...

  3. docker 搭建Mysql集群

    docker基本指令: 更新软件包 yum -y update 安装Docker虚拟机(centos 7) yum install -y docker 运行.重启.关闭Docker虚拟机 servic ...

  4. docker搭建mysql集群

    目录 一.集群方案 二.安装PXC集群 三.Haproxy负载均衡 四.访问测试 五.节点宕机或重启 六.参考 一.集群方案 1.Replication 速度快,但仅能保证弱一致性,适用于保存价值不高 ...

  5. docker PXC MYSQL集群节点启动失败/节点顺序消失/只剩一个节点存在问题的解决

    转载于:https://my.oschina.net/u/4884318/blog/4908669 大牛 佩服此人 截取本人遇到的问题: "error:0407008A:rsa routin ...

  6. Docker安装MySQL集群【读写分离】

    Centos7系统Docker安装 目录 Centos7系统Docker安装 目录 Centos7系统Docker安装 1.下载mysql镜像 2.创建Master实例并启动 参数说明 3.创建Sla ...

  7. MySQL集群之MyCat

    MySQL集群之MyCat 一.MyCat简介及分析 1.1 MyCat是什么? 1.2 关键特性及应用场景 1.2.1 关键特性 1.2.2 应用场景 1.2.3 MyCat不适合的应用场景 1.3 ...

  8. Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群

    单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...

  9. 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 ...

随机推荐

  1. log4j:ERROR setFile(null,true) call failed.java.io.FileNotFoundException: ..\logs\2010-1-19.log (系统找不到指定的路径。)

    log4j:ERROR setFile(null,true) call failed.java.io.FileNotFoundException: ..\logs\2010-1-19.log (系统找 ...

  2. editplus快捷键大全之editplus搜索快捷键

    前面我们说了editplus快捷键大全之editplus文件快捷键和editplus快捷键大全之editplus光标快捷键,editplus快捷键大全之editplus编辑快捷键这里我们讲一下edit ...

  3. 台大《机器学习基石》课程感受和总结---Part 1(转)

    期末终于过去了,看看别人的总结:http://blog.sina.com.cn/s/blog_641289eb0101dynu.html 接触机器学习也有几年了,不过仍然只是个菜鸟,当初接触的时候英文 ...

  4. VS2010中如何查看DLL的导出接口

    看<VC++动态链接库(DLL)编程深入浅出>时,里面提到使用Visual C++的Depends工具可以查看动态链接库中的导出接口.对于VC6.0,VC所带的Depends软件,在VC6 ...

  5. Python Django 的 django templatedoesnotexist

    django 1.8版本的解决方案 在  setting.py 这个文件里 TEMPLATES = [ ...... #原来的 #'DIRS': [ ], //  这个 列表里添加 template路 ...

  6. LInux 安全测试

    [CVE-2013-2094]Linux PREF_EVENTS Local Root 2.6.37-3.8.10 x86_64 踩(0)http://zone.wooyun.org/content/ ...

  7. XShell上传下载命令

    参考:https://www.centos.bz/2012/12/xshell-securecrtrz-sz-upload-download/ 上传文件时,执行rz就会弹出文件选择对话框来选择文件.下 ...

  8. Android 中的异步下载

    网上提到最多的就是利用AsyncTask进行异步下载,用android-async-http第三方库的也比较多.这里写点注意事项. 先说说android-async-http,这个库发送请求利用thr ...

  9. UML 序列图一点理解

    激活状态,就是长方形该画到哪里呢?我的理解是,一个长方形代表调用函数的执行过程,比如下图 这个长方形就表示viewDidAppear()函数没有执行完,在这个长方形上发出或者收到的消息都是在 view ...

  10. 简单的2d图形变换--仿设变换AffineTransform

    在ios中常常遇到些小的动画效果,比如点击一个按钮后,按钮上的三角形图片就旋转了.这种简单的小动画,常常通过更改view的transform属性来实现.这个transform属性,就是一个仿射变化矩阵 ...