docker 搭建MySQL主从模式

安装docker(目标机为centos7)
卸载旧版本

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装Docker Engine-Community

在新主机上首次安装Docker Engine-Community之前需要设置Docker 仓库,之后可以从仓库安装和更新Docker

    安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

    $ sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2

    使用以下命令来设置稳定的仓库

    sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo

    安装Docker Engine-Community 最新版本 或者 按照下一步安装特定版本

    sudo yum install docker-ce docker-ce-cli containerd.io

    列出存储库中可用版本。按照版本号从高到底排列

    yum list docker-ce --showduplicates | sort -r

    docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
    docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
    docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable

    指定软件包名称 安装docker-ce 和docker-ce-cli

    sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

启动docker

sudo systemctl start docker

docker 基本命令

# 查看下载的镜像
docker images
# 查看运行中的容器
docker ps
# 查看所有容器包含没有运行
docker ps -a
# 移除镜像 
docker rm <容器id/容器名称>
# 启动停止容器
docker start/stop <容器id/容器名称>

利用docker搭建mysql主从服务器(例子中采用一主一从)
首先拉取MySQL镜像

docker pull mysql:5.7

利用此镜像启动主从容器

# master 主库 
docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
# slave 从库 
docker run -p 3340:3306 --name slave -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

说明:-p port1:port2 其中port1 为容器对外映射的端口号(宿主机端口),因为docker容器是相互独立的,每个容器有自己的独立ip,所以不同容器使用相同的端口不会冲突,这里的port2 我们尽量使用MySQL默认的3306,否则可能会出现无法通过IP连接docker容器的mysql。

使用 docker -ps 查看容器运行情况

[root@localhost ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
ce752c99a010        mysql:5.7           "docker-entrypoint.s…"   6 hours ago         Up 5 hours          33060/tcp, 0.0.0.0:3341->3306/tcp   slave2
701ccedc1e95        mysql:5.7           "docker-entrypoint.s…"   6 hours ago         Up 5 hours          33060/tcp, 0.0.0.0:3340->3306/tcp   slave1

此时还不能用客户端连接,需要MySQL进行远程连接授权

进入容器

docker exec -it <容器id/名称> bash

登录mysql

mysql -uroot -p

进入MySQL后执行授权操作

-- 对远程连接进行授权
GRANT ALL ON *.* TO 'root'@'%';
-- 更改密码的加密规则
ALTER USER 'root'@'%' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;
-- 更改root的密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
-- 刷新权限
flush privileges;

配置master

通过 docker exec -it <容器id/名称> bash进入容器内部。使用vim /etc/mysql/my.cnf 修改MySQL配置

会出现如下问题。

    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    E: Unable to locate package vim

    需要首先执行 apt-get update 然后执行 apt-get install vim 即可

在my.cnf 中添加如下配置

[mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin

配置完成后重启即可生效 ,在容器内部 使用命令 service mysql restart,此时容器会停止,我们还需要 docker start <容器id/容器名称> 启动容器。
配置slave

my.cnf中添加配置

[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin  

连接master 和 slave

首先进入master mysql 执行 show master status;

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.25 sec)

记录File 和 position 值。

然后,从slave进入MySQL执行

change master to master_host='172.17.0.2', master_user='root', master_password='root', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 154, master_connect_retry=30;

master_host 说明 :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' <容器名称|容器id查询容器的ip>

[root@localhost ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' mymysql
172.17.0.2

执行命令 start slave 启动slave。

查看slave状态 show slave status \G;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容