基于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

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

   6,创建docker容器

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

重命名容器名称

docker rename priceless_poitras mysql-master1

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

由于是做主从复制,那么应该创建两个容器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/

8,进入容器

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

# docker exec -it mysql_master1 /bin/bash

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

主,docker exec -it mysql_master1 /bin/bash

从,docker exec -it mysql_slave2/bin/bash

9,MySQL主从复制

cd 到根目录

ll查看复制的mysql的rpm

安装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

启动mysql

systemctl  start mysqld

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

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

如果没有报错最好

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

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

连接mysql 

mysql -uroot -pkzl\(kVo-w0lg

其中(需要转义

设置重新设置密码

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

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;

从机操作:

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

连接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;

测试

 主mysql:create database db1;

从 mysql> show databases;

从mysql上创建了db1

猜你喜欢

转载自my.oschina.net/u/3647713/blog/1801735