软件环境介绍
操作系统: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. SqlDataReader执行带输出参数存储过程 错误分析

    在上一篇随笔:SqlDataReader读取分页数据,pageCount你是肿么了? 遇到了很让人头疼的问题:SqlDataReader执行带输出参数的存储过程总是获取不到输出参数的正确值.这里将解决 ...

  2. 使用Fabric进行crash收集统计

    主要是帮助自己记一下地址. 1 申请Crashlytics服务:http://try.crashlytics.com 2 下载Fabric客户端,帮助集成Crashlytics到自己的项目中:http ...

  3. editplus快捷键大全之editplus文件快捷键

    editplus快捷键大全之editplus文件快捷键 新建普通文本 Ctrl+N 新建普通的文本文档 新建浏览器窗口 Ctrl+Shift+B 新建浏览器窗口 新建 HTML 页 Ctrl+Shif ...

  4. 新手选择使用 Linux 桌面的七个注意点

    导读 刚接触Linux桌面的用户该如何选择一款合适的Linux桌面环境呢?如果你习惯使用Windows或OS X,那么一想到要选择就让人犯难,那么你又该如何在十几个主要的Linux桌面.几十个次要的当 ...

  5. [POJ1157]LITTLE SHOP OF FLOWERS

    [POJ1157]LITTLE SHOP OF FLOWERS 试题描述 You want to arrange the window of your flower shop in a most pl ...

  6. HTML快速入门3

    四.表格 (Table) 1. 表格的基本形式 表由 <table> 开始, </table> 结束,表的内容由 <tr>,<th> 和 <td& ...

  7. zb的生日

    http://acm.nyist.net/JudgeOnline/problem.php?pid=325 zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 ...

  8. 基于Matlab的MMSE的语音增强算法的研究

    本课题隶属于学校的创新性课题研究项目.2012年就已经做完了,今天一并拿来发表.   目录: --基于谱减法的语音信号增强算法..................................... ...

  9. sass的视频教程

    http://www.w3ci.com/video/715.html http://koala-app.com/index-zh.html /***************三角形的应用******** ...

  10. abstract class和interface的区别

    1. 引言 2. 概念引入 ●什么是接口? 接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称.参数和返回值.接口方法不能包含任何实现,CLR允许接口可以包含事件.属性.索引 器.静态方法.静态 ...