Docker mysql 主从
一、独立容器部署mysql主从
# 主从 my.cnf加上 [mysqld]
server-id = XXX
log-bin = mysql-bin
log-bin-index = log-bin.index
(1)master
docker run -d \
--name mysql_master \
-p 3310:3306 \
-v /data/conf/master-slave/master.cnf:/etc/mysql/my.cnf \
-v /data/conf/master-slave/localtime:/etc/localtime \
-v /data/storage/cluster_data/master_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=Password4Root \
mysql
(2)slave
docker run -d \
--name mysql_slave \
-p 3311:3306 \
-v /data/conf/master-slave/slave.cnf:/etc/mysql/my.cnf \
-v /data/conf/master-slave/localtime:/etc/localtime \
-v /data/storage/cluster_data/slave_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=Password4Root \
--link mysql_master:master \
mysql
(3)查看
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc5f46aa135b mysql "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3311->3306/tcp mysql_slave
be3e1af663cd mysql "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3310->3306/tcp mysql_master
(4)主库Replication设置
# 登入主库
docker exec -it mysql_master mysql -uroot -pPassword4Root mysql> grant all privileges on *.* to 'repl'@'%' identified by 'repl_password';
Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 434
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
(5)从库Replication设置
# 登入从库
docker exec -it mysql_slave mysql -uroot -pPassword4Root # 设置主从
mysql> change master to
-> master_host='master',
-> master_user='repl',
-> master_password='repl_password',
-> master_log_file='mysql-bin.000003',
-> master_log_pos=434; # 启动slave
mysql> start slave; # 查看状态
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 434
Relay_Log_File: 5925cc301b6b-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
(6)测试
主库新建数据库
从库查看
尝试重启mysql_master容器,slave状态变为connecting
重启完成后,状态恢复正常
二、Docker Swarm mysql主从
(1)创建secret文件
# echo "Password4Root" | docker secret create root_cluster_password -
w4wv4askqam5znua5032gm8vt
(2)使用swarm配置管理
master.cnf和slave.cnf要存在
# 创建主从配置文件
[root@manager master-slave]# docker config create master.cnf master.cnf
t1rjlq7djtulxzl7gppf3rrum
[root@manager master-slave]# docker config create slave.cnf slave.cnf
u229zquvbevbq50k92ylqcgqn
(3)创建overlay网络
# docker network create -d overlay mysql-cluster --subnet 10.10.2.0/24
zf4n8waxc283uprq8eppx2gzp
(4)创建服务
# master
[root@manager ~]# docker service create \
> --name mysql_master \
> --replicas 1 \
> --network mysql-cluster \
> --secret root_cluster_password \
> --config src=master.cnf,target=/etc/mysql/my.cnf \
> -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_cluster_password \
> --mount type=volume,src=master_data,dst=/var/lib/mysql \
> --publish 3320:3306 \
> mysql
nuthmf6fdpmjmew1pzhdninmg
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged # slave
[root@manager ~]# docker service create \
> --name mysql_slave \
> --replicas 1 \
> --network mysql-cluster \
> --secret root_cluster_password \
> --config src=slave.cnf,target=/etc/mysql/my.cnf \
> --mount type=volume,src=slave_data,dst=/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_cluster_password \
> --publish 3321:3306 \
> mysql
pyed0j0jlijy1upbyicuayvko
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
[root@manager ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
nuthmf6fdpmj mysql_master replicated 1/1 mysql:latest *:3320->3306/tcp
pyed0j0jlijy mysql_slave replicated 1/1 mysql:latest *:3321->3306/tcp
(5)主从配置
# 登入master所在节点的主库 mysql> grant all privileges on *.* to 'repl'@'%' identified by 'repl_password';
Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 434
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec) # 登入slave所在节点从库
mysql> change master to
-> master_host='mysql_master',
-> master_user='repl',
-> master_password='repl_password',
-> master_log_file='mysql-bin.000003',
-> master_log_pos=434;
Query OK, 0 rows affected, 2 warnings (0.29 sec) mysql> start slave;
Query OK, 0 rows affected (0.01 sec
查看状态
(6)测试验证
主库创建数据库
查看从库
stop 主库(在swarm集群中,关停的容器默认会自动重启)
重启完成后恢复正常
三、服务编排部署mysql主从
(1)mysql_replications.yml
version: "3.3"
services:
master:
image: mysql:latest
networks:
- rep_net
ports:
- "3330:3306"
volumes:
- type: volume
source: master-data
target: /var/lib/mysql
volume:
nocopy: true
configs:
- source: localtime
target: /etc/localtime
- source: master.cnf
target: /etc/mysql/my.cnf
deploy:
replicas: 1
restart_policy:
condition: on-failure
resources:
limits:
cpus: '0.8'
memory: 500M
reservations:
cpus: '0.25'
memory: 200M
secrets:
- root_password
environment:
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_password slave:
image: mysql:latest
networks:
- rep_net
ports:
- "3331:3306"
volumes:
- type: volume
source: slave-data
target: /var/lib/mysql
volume:
nocopy: true
configs:
- source: localtime
target: /etc/localtime
- source: slave.cnf
target: /etc/mysql/my.cnf
deploy:
replicas: 1
restart_policy:
condition: on-failure
resources:
limits:
cpus: '0.8'
memory: 500M
reservations:
cpus: '0.25'
memory: 200M
secrets:
- root_password
environment:
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_password secrets:
root_password:
external: true configs:
localtime:
external: true
master.cnf:
external: true
slave.cnf:
external: true volumes:
master-data:
slave-data:
networks:
rep_net:
driver: overlay
(2)部署服务
# docker stack deploy -c mysql_replications.yml repl
Creating network repl_rep_net
Creating service repl_master
Creating service repl_slave
(3)查看服务
[root@manager stack_compose]# docker service ls
ID NAME MODE REPLICAS IMAGE
khfpkq81op7b repl_master replicated 1/1 mysql:latest *:3330->3306/tcp
u7k4enpy1eru repl_slave replicated 1/1 mysql:latest *:3331->3306/tcp
(4)配置主从
# master # docker exec -it fb85153f27ac mysql -uroot -pPassword4Root mysql> grant all privileges on *.* to 'repl'@'%' identified by 'repl_password';
Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 434
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec) # slave mysql> change master to
-> master_host='master',
-> master_user='repl',
-> master_password='repl_password',
-> master_log_file='mysql-bin.000003',
-> master_log_pos=434;
Query OK, 0 rows affected, 2 warnings (0.01 sec) mysql> start slave;
Query OK, 0 rows affected (0.00 sec mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 434
Relay_Log_File: 0ddecac560e1-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
.....
.....
主从正常
Docker mysql 主从的更多相关文章
- Docker Mysql主从同步配置搭建
Docker Mysql主从同步配置搭建 建立目录 在虚拟机中建立目录,例如路径/home/mysql/master/data,目录结构如下: Linux中 新建文件夹命令:mkdir 文件夹名 返回 ...
- Docker Mysql主从同步配置搭建Demo
进行Docker操作前,先建立目录,我的路径是d:/docker/mysql,目录结构如下: --mysql --master --data --conf --my.cnf --slaver --da ...
- django 本地项目部署uwsgi 以及云服务器部署 uwsgi+Nginx+Docker+MySQL主从
一 .django 本地项目部署uwsgi 1 本地部署项目 uwsgi安装测试 通过uwsgi 进行简单部署 安装uwsgi命令:pip install uwsgi -i http://pypi.d ...
- docker mysql 主从配置
docker安装运行单实例的MySQL参考另一篇文档 http://www.cnblogs.com/manger/p/7611309.html 1.首先在/data/script下创建两个文件my-m ...
- Docker Mysql数据库主从同步配置方法
一.背景 最近在做内部平台架构上的部署调整,顺便玩了一下数据库的主从同步,特此记录一下操作- 二.具体操作 1.先建立数据存放目录(-/test/mysql_test/) --mysql --mast ...
- Docker - Docker中搭建MySQL主从
1.pull完centos7纯净版的镜像后,创建容器,然后将宿主机上下载的MySQL文件 (MySQL下载地址:http://mysql.mirror.kangaroot.net/Downloads/ ...
- 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)
前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...
- 使用docker 实现MySQL主从同步/读写分离
1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...
- docker运行mysql主从备份,读写分离
1)从Docker官方下拉MySQL的image 打开https://hub.docker.com/ 搜索mysql 在docker中运行 默认tag为latest docker pull mysql ...
随机推荐
- [Java]Spring Ioc讲解,不怕你不懂
原文地址 引述:IoC(控制反转:Inverse of Control)是Spring容器的内核,AOP.声明式事务等功能在此基础上开花结果.但是IoC这个重要的概念却比较晦涩隐讳,不容易让人望文生义 ...
- WEB框架之Ajax
一 Ajax简介 1 Ajax的介绍 AJAX翻译成中文就是"异步Javascript和XML".即使用JavaScript语言与服务器进行异步交互,传输的数据为XML(当然,传输 ...
- Liunx 硬盘分区
1)什么要进行硬盘分区:a) 更容易管理和控制系统,因为相关的文件和目录都放在一个分区中.b) 系统效率更高.c) 可以限制用户使用硬盘的份额(磁盘空间的大小).d) 更容易备份和恢复. 2)硬盘的逻 ...
- PAT 1068 万绿丛中一点红(20)(测试点分析+思路分析)
1068 万绿丛中一点红(20 分) 对于计算机而言,颜色不过是像素点对应的一个 24 位的数值.现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的 ...
- 使用Visual VM 查看linux中tomcat运行时JVM内存
前言:在生产环境中经常发生服务器内存溢出,假死或者线程死锁等异常,导致服务不可用.我们经常使用的解决方法是通过分析错误日记,然后去寻找代码到底哪里出现了问题,这样的方式也许会奏效,但是排查起来耗费时间 ...
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 : ...
- Web 文件上传方面的安全问题
一. 文件上传漏洞与WebShell的关系 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等.这种攻击方式是最为直接和有效 ...
- [SoapUI] 在SoapUI中通过Groovy脚本执行window命令杀掉进程
//杀Excel进程 String line def p = "taskkill /F /IM EXCEL.exe".execute() def bri = new Buffere ...
- Spring Boot REST(二)源码分析
Spring Boot REST(二)源码分析 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) SpringBoot RE ...
- DP:0
小故事: A * "1+1+1+1+1+1+1+1 =?" * A : "上面等式的值是多少" B : *计算* "8!" A *在上面等式 ...