基于docker的MySQL主从复制

1,环境

在linux环境上搭建

2,版本

docker

mysql:

wget https://dev.mysql.com/get/downloads/mysql-5.7.22-1.el7.i686.rpm-bundle.tar

3,安装mysql

cd /usr/local安装路径

wget https://dev.mysql.com/get/downloads/mysql-5.7.22-1.el7.i686.rpm-bundle.tar

tar -zxvf  mysql-5.7.22-1.el7.i686.rpm-bundle.tar

101200_6ED6_3647713.png

4,安装docker

docker的安装使用:

1. 安装docker

   # yum install -y docker

2. 启动docker

   # systemctl start docker

3. 安装docker镜像

   # docker pull [docker镜像地址]

   使用阿里云镜像

   修改/etc/docker/daemon.json

   {

    "registry-mirrors": ["https://uulfe4bd.mirror.aliyuncs.com"]

}

 4. 修改完毕重启docker

   https://dev.aliyun.com/search.html 查询镜像文件。

   # systemctl restart docker

   5,获取docker镜像

mysql安装需要建立在centos基础上所有在,docker中需要安装docker

   # docker pull https://registry.cn-hangzhou.aliyuncs.com/moensun/centos7

查看创建的centos7镜像 docker images记录ID 3db94df3e006

101857_fygv_3647713.png

   6,创建docker容器

   # docker run -tid 3db94df3e006(查看centos7镜像 时可以看到)  /usr/sbin/init

102322_MmyK_3647713.png

102539_eLbB_3647713.png

重命名容器名称

docker rename priceless_poitras mysql-master1

重新查看docker ps -a 容器名称修改完成 

102655_K7D0_3647713.png

由于是做主从复制,那么应该创建两个容器mysql-master1 和mysql-slave2这里在创建mysql-slave2容器

(由于之前创建了mysql-slave1,这次就创建了mysql-slave2,名称自己命名都行。这次只是想写个博客,方便以后学习,也方便想学习的同学,一主mysql-master1,一从mysql-slave2,后面搭建好的话,就可以根据自己需求搭建主主,多主多从了)

7,MySQL文件拷贝

Docker文件拷贝(容器<=>docker)

# docker cp 原路径 docker容器路径(系统=》docker)

# docker cp MySQL-server-5.6.38-1.el7.x86_64.rpm mysql_master2:/root/

# docker cp docker容器路径 原路径(docker=》系统)

将之前mysql解压后的文件分别拷贝到mysql-master1和mysql-slave2
 docker cp mysql-community-common-5.7.22-1.el7.x86_64.rpm mysql-master1:/root/
docker cp mysql-community-client-5.7.22-1.el7.x86_64.rpm mysql-master1:/root/
docker cp mysql-community-libs-5.7.22-1.el7.x86_64.rpm mysql-master1:/root/
docker cp mysql-community-server-5.7.22-1.el7.x86_64.rpm mysql-master1:/root/
docker cp mysql-community-server-5.7.22-1.el7.x86_64.rpm mysql-slave2:/root/
docker cp mysql-community-client-5.7.22-1.el7.x86_64.rpm mysql-slave2:/root/
docker cp mysql-community-libs-5.7.22-1.el7.x86_64.rpm mysql-slave2:/root/
docker cp mysql-community-common-5.7.22-1.el7.x86_64.rpm mysql-slave2:/root/

104517_nGZ3_3647713.png

8,进入容器

# docker exec -it 容器名称 /bin/bash

# docker exec -it mysql_master1 /bin/bash

开启两个远程登录窗口,分别进去主容器和从容器

主,docker exec -it mysql_master1 /bin/bash

105239_3h8t_3647713.png

从,docker exec -it mysql_slave2/bin/bash

9,MySQL主从复制

cd 到根目录

ll查看复制的mysql的rpm

105318_PhQT_3647713.png

安装mysql,安装mysql需要安装mysql依赖

(1)安装centos系统安装mysql依赖:

1.     perl perl-Module-Build

2.     autoconf

3.     libaio

4.     namuctl-libs

5.     net-tools

 yum install -y perl perl-Module-Build net-tools autoconf libaio numactl-libs

安装mysql

(2)在根目录下

rpm -ivh mysql-community-*.rpm

105828_yumg_3647713.png

启动mysql

systemctl  start mysqld

112900_Itnv_3647713.png

我的一般都会报错 看日志是磁盘没有分配大小

需要vi     /etc/my.cnf中添加innodb_buffer_pool_size = 8M

如果没有报错最好

 

第一次启动后会有个初始化的过程,会产生root账户的随机密码。

cat /var/log/mysqld.log  | grep password

连接mysql 

mysql -uroot -pkzl\(kVo-w0lg

其中(需要转义

113200_vUnj_3647713.png

设置重新设置密码

注意:如果只想设置简单密码需要修改两个全局参数:

mysql> set global validate_password_length=1;set global validate_password_policy=0;

set password = password(‘你的密码’)

set password = password(‘123456’)

远程登陆授权

mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

mysql> flush privileges;

 

主从复制过程

(在主机上操作):

vi /etc/my.cnf

配置文件my.cnf

[client]

port                        = 3306

socket                      = /var/lib/mysql/mysql.sock

[mysqld]

#无论主机还是从机server-id不能相同

server-id                    = 2

port                        = 3306

##原先有的话就可以去掉

datadir                      = /var/lib/mysql

socket                       = /var/lib/mysql/mysql.sock

default-storage-engine          = InnoDB

log-bin                      = mysql-bin

log-bin-index                 = mysql-bin.index

relay-log                    = mysql-relay

relay-log-index               = mysql-relay.index

expire-logs-days              = 10

max-binlog-size              = 100M

max_binlog_cache_size        = 8M

log-slave-updates             = 1

binlog_cache_size            = 4M

# use MIXED binlog

binlog_format               = MIXED

#binlog_format              = ROW

#replicate-do-db             = db%.%

#replicate-ignore-db          = mysql.%

# ignore tables

replicate-wild-ignore-table     = mysql.%

sync_binlog                 = 1

relay_log_recovery           = 1

log_slave_updates           = 1

skip-name-resolve

sql_mode=STRICT_TRANS_TABLES

[mysqldump]

quick

max_allowed_packet = 32M

1.        创建同步复制的用户

    mysql> create user 'repl'@'172.17.0.%' identified by '123456';

2.        给同步复制用户赋权

    mysql> grant replication slave on *.* to 'repl'@'172.17.0.%' identified by '123456';

mysql> flush privileges;

3.        开启binlog

    配置时候注意几个坑:

    Replication-do-db的坑,如果多个库则使用多行Replication-do-db进行配置

Replication-ignore-db的坑,如果忽略多个库则使用多行Replication-ignore-db进行配置

4.        重启mysql

#systemctl restart mysqld

5.       连接mysql

show master status \G;

162233_KwU3_3647713.png

 

从机操作:

vi /etc/my.cnf

配置文件my.cnf

[client]

port                        = 3306

socket                      = /var/lib/mysql/mysql.sock

[mysqld]

#无论主机还是从机server-id不能相同

server-id                    = 20

port                        = 3306

##原先有的话就可以去掉

datadir                      = /var/lib/mysql

socket                       = /var/lib/mysql/mysql.sock

default-storage-engine          = InnoDB

log-bin                      = mysql-bin

log-bin-index                 = mysql-bin.index

relay-log                    = mysql-relay

relay-log-index               = mysql-relay.index

expire-logs-days              = 10

max-binlog-size              = 100M

max_binlog_cache_size        = 8M

log-slave-updates             = 1

binlog_cache_size            = 4M

# use MIXED binlog

binlog_format               = MIXED

#binlog_format              = ROW

#replicate-do-db             = db%.%

#replicate-ignore-db          = mysql.%

# ignore tables

replicate-wild-ignore-table     = mysql.%

sync_binlog                 = 1

relay_log_recovery           = 1

log_slave_updates           = 1

skip-name-resolve

sql_mode=STRICT_TRANS_TABLES

[mysqldump]

quick

max_allowed_packet = 32M

连接mysql操作:

1. Stop slave;

主从复制的最关键语句:

2. Change master to

         Master_host=’172.17.0.2’,

         Master_user=’repl’,

         Master_password=’123456’,

         Master_log_file=’mysql-bin.000001’,

         Master_log_pos=120;

3. Start slave;

4.show slave status \G;

172721_9VpD_3647713.png

测试

 主mysql:create database db1;

 

172859_ywmX_3647713.png

从 mysql> show databases;

172946_mD9C_3647713.png

从mysql上创建了db1

 

 

 

 

转载于:https://my.oschina.net/u/3647713/blog/1801735

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值