>

如何利用docker快速构建MySQL主从复制环境,详解如

- 编辑:www.bifa688.com -

如何利用docker快速构建MySQL主从复制环境,详解如

在读书MySQL的经过中,经常会测试各样参数的职能。这时候,就需求赶快创设出MySQL实例,以至主从。 

在念书MySQL的历程中,平日会测试种种参数的作用。那时候,就需求快速创设出MySQL实例,以致主从。

在攻读MySQL的历程中,平日会测试各类参数的机能。那时候,就须求快捷创设出MySQL实例,以至主从。

设想如下场景:

 

 

譬如作者想测试mysqldump在钦赐--single-transaction参数的境况下,对于myisam表的熏陶。

设想如下场景:

设想如下场景:

自然想在现有的测试情状中张开,但测试处境中,有雅量的数目,施行mysqldump实行全备,爆发的SQL文件,很难基于表展开检索。

比如说笔者想测试mysqldump在钦命--single-transaction参数的图景下,对于myisam表的影响。

譬如笔者想测试mysqldump在钦赐--single-transaction参数的情事下,对于myisam表的熏陶。

以此时候,就特地渴望能有1套干净的实例举办测试。

本来想在现成的测试情状中张开,但测试遭遇中,有恢宏的多寡,施行mysqldump实行全备,发生的SQL文件,很难基于表展开搜寻。

自然想在现有的测试遇到中张开,但测试情形中,有雅量的多少,实践mysqldump进行全备,发生的SQL文件,很难基于表打开检索。

那会儿,火速创设技艺就呈现愈加须求,多数童鞋恐怕会问,通过脚本不就可以兑现么?为何要用docker?

本条时候,就尤其渴望能有1套干净的实例进行测试。

本条时候,就特别渴望能有一套干净的实例举办测试。

个人感到:脚本太重,会波及众多额外的做事,譬如成立用户,相对较长的数据库初阶化进度,MySQL运营进度,而本人需求的是壹种高效营造,急速销毁的技术。

 

 

而这,正是Docker的强项。

那时候,飞快构建能力就展示特别供给,多数童鞋大概会问,通过脚本不就会兑现么?为何要用docker?

那时候,急速创设技巧就展现尤为必要,繁多童鞋或然会问,通过脚本不就会促成么?为何要用docker?

如下,是接纳docker运行三个实例的光阴,不到一s,假诺利用脚本来做的话,绝不会这么快。

个人感到:脚本太重,会波及众多11分的做事,譬如成立用户,相对较长的数据库开端化进度,MySQL运转进程,而本人必要的是①种高效构建,飞速销毁的技艺。

个人感到:脚本太重,会波及好多外加的办事,譬如创立用户,相对较长的数据库初叶化进度,MySQL运维进度,而小编急需的是一种高效营造,急迅销毁的本领。

# time docker run --name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v /var/lib/mysql/slave:/var/lib/mysql -p3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
6b7fe5da9e8c77529ee634e163add57db5cd15757e88261ce320a502ae01f853

real  0m0.986s
user  0m0.026s
sys  0m0.018s

而这,正是Docker的强项。

而这,正是Docker的强项。

于是乎基于docker写了个本子,可在30s左右新建一套MySQL主从复制情形

 

 

#!/bin/bash

MASTER_DIR=/var/lib/mysql/master
SLAVE_DIR=/var/lib/mysql/slave

## First we could rm the existed container
docker rm -f master
docker rm -f slave

## Rm the existed directory
rm -rf $MASTER_DIR
rm -rf $SLAVE_DIR

## Start instance
docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
docker run --name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v $SLAVE_DIR:/var/lib/mysql --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
## Creating a User for Replication
docker stop master slave
docker start master slave

sleep 3

docker exec -it master mysql -S /var/lib/mysql/mysql.sock -e "CREATE USER 'repl'@'127.0.0.1' IDENTIFIED BY 'repl';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'127.0.0.1';"

## Obtaining the Replication Master Binary Log Coordinates
master_status=`docker exec -it master mysql -S /var/lib/mysql/mysql.sock -e "show master statusG"`
master_log_file=`echo "$master_status" | awk 'NR==2{print substr($2,1,length($2)-1)}'`
master_log_pos=`echo "$master_status" | awk 'NR==3{print $2}'`
master_log_file="'""$master_log_file""'"

## Setting Up Replication Slaves 
docker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE=$master_log_file,MASTER_LOG_POS=$master_log_pos;"docker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e "start slave;"
docker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e "show slave statusG"

## Creates shortcuts
grep "alias master" /etc/profile
if [ $? -eq 1 ];then
  echo 'alias mysql="docker exec -it master mysql"' >> /etc/profile
  echo 'alias master="docker exec -it master mysql -h 127.0.0.1 -P3306"' >> /etc/profile
  echo 'alias slave="docker exec -it master mysql -h 127.0.0.1 -P3307"' >> /etc/profile
  source /etc/profile
fi

一般来讲,是选拔docker运营八个实例的大运,不到一s,借使采取脚本来做的话,绝不会这么快。

如下,是使用docker运行多少个实例的时刻,不到一s,若是应用脚本来做的话,绝不会这么快。

本子自身并未有太多要求验证的地点,主从容器起来后,遵守的恐怕分布的主从复制建设构造流程。

# time  docker run --name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v /var/lib/mysql/slave:/var/lib/mysql -p3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
6b7fe5da9e8c77529ee634e163add57db5cd15757e88261ce320a502ae01f853

real    0m0.986s
user    0m0.026s
sys    0m0.018s
# time  docker run --name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v /var/lib/mysql/slave:/var/lib/mysql -p3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
6b7fe5da9e8c77529ee634e163add57db5cd15757e88261ce320a502ae01f853

real    0m0.986s
user    0m0.026s
sys    0m0.018s

一言玖鼎是说说创建容器所提到的选项。

 

 

复制代码 代码如下:

于是乎基于docker写了个本子,可在30s左右新建一套MySQL主从复制遇到

于是乎基于docker写了个剧本,可在30s左右新建一套MySQL主从复制情况

docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34

#!/bin/bash

MASTER_DIR=/var/lib/mysql/master
SLAVE_DIR=/var/lib/mysql/slave

## First we could rm the existed container
docker rm -f master
docker rm -f slave

## Rm the existed directory
rm -rf $MASTER_DIR
rm -rf $SLAVE_DIR

## Start instance
docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
docker run --name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v $SLAVE_DIR:/var/lib/mysql --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
## Creating a User for Replication
docker stop master slave
docker start master slave

sleep 3

docker exec -it master mysql -S /var/lib/mysql/mysql.sock -e "CREATE USER 'repl'@'127.0.0.1' IDENTIFIED BY 'repl';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'127.0.0.1';"

## Obtaining the Replication Master Binary Log Coordinates
master_status=`docker exec -it master mysql -S /var/lib/mysql/mysql.sock -e "show master statusG"`
master_log_file=`echo "$master_status" | awk  'NR==2{print substr($2,1,length($2)-1)}'`
master_log_pos=`echo "$master_status" | awk 'NR==3{print $2}'`
master_log_file="'""$master_log_file""'"

## Setting Up Replication Slaves 
docker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE=$master_log_file,MASTER_LOG_POS=$master_log_pos;"docker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e "start slave;"
docker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e "show slave statusG"

## Creates shortcuts
grep "alias master" /etc/profile
if [ $? -eq 1 ];then
    echo 'alias mysql="docker exec -it master mysql"' >> /etc/profile
    echo 'alias master="docker exec -it master mysql -h 127.0.0.1 -P3306"' >> /etc/profile
    echo 'alias slave="docker exec -it master mysql -h 127.0.0.1 -P3307"' >> /etc/profile
    source /etc/profile
fi
#!/bin/bash

MASTER_DIR=/var/lib/mysql/master
SLAVE_DIR=/var/lib/mysql/slave

## First we could rm the existed container
docker rm -f master
docker rm -f slave

## Rm the existed directory
rm -rf $MASTER_DIR
rm -rf $SLAVE_DIR

## Start instance
docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
docker run --name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v $SLAVE_DIR:/var/lib/mysql --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
## Creating a User for Replication
docker stop master slave
docker start master slave

sleep 3

docker exec -it master mysql -S /var/lib/mysql/mysql.sock -e "CREATE USER 'repl'@'127.0.0.1' IDENTIFIED BY 'repl';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'127.0.0.1';"

## Obtaining the Replication Master Binary Log Coordinates
master_status=`docker exec -it master mysql -S /var/lib/mysql/mysql.sock -e "show master statusG"`
master_log_file=`echo "$master_status" | awk  'NR==2{print substr($2,1,length($2)-1)}'`
master_log_pos=`echo "$master_status" | awk 'NR==3{print $2}'`
master_log_file="'""$master_log_file""'"

## Setting Up Replication Slaves 
docker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE=$master_log_file,MASTER_LOG_POS=$master_log_pos;"docker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e "start slave;"
docker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e "show slave statusG"

## Creates shortcuts
grep "alias master" /etc/profile
if [ $? -eq 1 ];then
    echo 'alias mysql="docker exec -it master mysql"' >> /etc/profile
    echo 'alias master="docker exec -it master mysql -h 127.0.0.1 -P3306"' >> /etc/profile
    echo 'alias slave="docker exec -it master mysql -h 127.0.0.1 -P3307"' >> /etc/profile
    source /etc/profile
fi

 -v /etc/master.cnf:/etc/mysql/my.cnf:将本地的安排文件映射成容器的布局文件,那样,可经过改换本地配置文件,来达到修改容器配置文件的效能。

 

 

 -v $MASTER_DI猎豹CS六:/var/lib/mysql :将地面目录映射成容器的多少目录,那样,方便查看数据目录的内容,不然的话,就暗中认可保存在/var/lib/docker/volumes目录下,实在不便民查看。

本子自个儿未有太多供给验证的地点,主从容器起来后,遵循的或许广大的主从复制创立流程。

剧本自个儿并未有太多要求表达的地点,主从容器起来后,遵从的要么左近的主从复制建立流程。

 --net=host:共享宿主机的互连网,大大下跌容器之间的通讯复杂度。

关键是说说创设容器所涉及的选项。

器重是说说创制容器所涉嫌的选项。

 注意

docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34

在脚本刚开头的时候,会去除从前的容器,那包括两步操作

 -v /etc/master.cnf:/etc/mysql/my.cnf:将本地的布局文件映射成容器的布局文件,那样,可透过修改当地配置文件,来完成修改容器配置文件的功力。

 -v /etc/master.cnf:/etc/mysql/my.cnf:将地面包车型客车布局文件映射成容器的安顿文件,这样,可通过修改本地配置文件,来完成修改容器配置文件的法力。

  1. 通过docker命令删除容器

  2. 透过操作系统命令删除从前容器的多少目录。

 -v $MASTER_DILX570:/var/lib/mysql :将地方目录映射成容器的数目目录,那样,方便查看数据目录的剧情,不然的话,就私下认可保存在/var/lib/docker/volumes目录下,实在不便利查看。

 -v $MASTER_DI牧马人:/var/lib/mysql :将当地目录映射成容器的数目目录,那样,方便查看数据目录的原委,不然的话,就默许保存在/var/lib/docker/volumes目录下,实在不便于查看。

    如若不删除的话,再度通过如下命令创设容器时,并不会清空在此以前的数码目录,而是直接加载,相当于新启了2个mysqld进程运行此前的实例。

 --net=host:共享宿主机的互联网,大大下降容器之间的通讯复杂度。

 --net=host:共享宿主机的网络,大大降低容器之间的通讯复杂度。

复制代码 代码如下:

 

 

docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34

注意

注意

那也给大家提供了1个思路,要是只是想测试参数的职能,并不想新建实例的话,只需经过docker命令删除容器,修改配置文件,通过上述命令成立容器就可以。

在脚本刚伊始的时候,会去除以前的器皿,那包括两步操作

在脚本刚早先的时候,会去除以前的容器,那包涵两步操作

在起步实例后,试行了1个重启实例的操作,因为在测试的经过中,开掘只要施行docker exec -it master bash之类的操作,会导致容器down掉(具体down的开始和结果还未分析),然则重启实例后就没难题。

  1. 通过docker命令删除容器

  2. 透过操作系统命令删除在此以前容器的多寡目录。

  1. 通过docker命令删除容器

  2. 透过操作系统命令删除在此以前容器的数码目录。

docker stop master slave
docker start master slave

sleep 3

    如若不删除的话,再一次经过如下命令创制容器时,并不会清空在此之前的数量目录,而是向来加载,也正是新启了2个mysqld进度运行之前的实例。

    假如不删除的话,再一次通过如下命令创建容器时,并不会清空从前的数量目录,而是径直加载,也就是新启了一个mysqld进度运营此前的实例。

设置飞速键

docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34

mysql:mysql客户端,能够经过该客户端连接其余主机上的MySQL服务器。

    那也给大家提供了三个思路,要是只是想测试参数的功力,并不想新建实例的话,只需通过docker命令删除容器,修改配置文件,通过上述命令创造容器就可以。

    那也给我们提供了三个思路,假如只是想测试参数的机能,并不想新建实例的话,只需经过docker命令删除容器,修改配置文件,通过上述命令成立容器就能够。

master:实践master就能够登陆本机的master实例,省掉了点名主机名和端口的操作。

 

 

salve:实践slave就可以登6本机的slave实例。

在开行实例后,实行了1个重启实例的操作,因为在测试的进度中,发现只要施行docker exec -it master bash之类的操作,会促成容器down掉(具体down的来由还未分析),可是重启实例后就没难题。

在运转实例后,试行了三个重启实例的操作,因为在测试的长河中,开采只要实践docker exec -it master bash之类的操作,会形成容器down掉(具体down的原由还未分析),但是重启实例后就没难题。

以上便是本文的全体内容,希望对大家的学习抱有帮忙,也目的在于我们多多接济脚本之家。

docker stop master slave
docker start master slave

sleep 3
docker stop master slave
docker start master slave

sleep 3

你可能感兴趣的小说:

  • 浅析MySQL复制以及调优原理和情势
  • Linux下MySQL数据库的着力同步复制配置
  • 详解Docker情势完毕MySql 主从复制(实践篇)
  • Mysql中复制详细剖析
  • MySQL高可用消除方案MMM(mysql多主复制管理器)
  • MySQL5.柒.1捌主从复制搭建(一主1从)教程详解
  • Mysql五.柒.1捌的装置与主从复制图像和文字详解
  • 详解MySQL达成主从复制进度
  • 行使pt-heartbeat监察和控制MySQL的复制延迟详解
  • 详解MySQL主从复制读写分离搭建
  • 简言之谈谈MySQL的半共同复制
  • MySQL复制优点、原理详解

 

 

设置连忙键

安装急迅键

mysql:mysql客户端,可以经过该客户端连接别的主机上的MySQL服务器。

mysql:mysql客户端,可以通过该客户端连接别的主机上的MySQL服务器。

master:施行master就可以登6本机的master实例,省掉了点名主机名和端口的操作。

master:实施master就可以登入本机的master实例,省掉了点名主机名和端口的操作。

salve:试行slave就可以登入本机的slave实例。

salve:推行slave就能够登6本机的slave实例。

本文由bifa688.com发布,转载请注明来源:如何利用docker快速构建MySQL主从复制环境,详解如