在CentOS 7中安装Docker,并实现MySQL5.7主从复制,重启Docker依旧生效!

记录一下自己在CentOS7中安装Docker,并实现MySQL主从复制的过程。

网上查了很多,配置过多次,总是会出现重启之后主从复制就失效的问题,又或者根本没成。

搜索了很多,现在成功了,记录一下。


那我们就开始吧!


如果之前安装过旧版本的Docker,可以使用下面命令卸载:

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

安装yum工具:

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

更新本地镜像源:

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' \
    /etc/yum.repos.d/docker-ce.repo

yum makecache fast

安装Docker:

yum install -y docker-ce

启动Docker之前需要关闭防火墙:

systemctl stop firewalld

为了以后方便,直接给它禁了得了,反正我是虚拟机(doge),禁用防火墙:

systemctl disable firewalld

启用Docker:

systemctl start docker

在运行容器之前,创建一个新的网络连接,用来固定mysql容器的ip。防止其他容器启动之后,占用ip,导致主mysql的ip被迫发生变化。

docker network create --subnet=172.28.197.0/16 mysql_net

创建主库:--p:3358是这个容器暴露在宿主机中的端口,3357是容器内部端口。--name:容器的名称。--net:指定网络连接,就是上面创建那个。--ip:指定ip。-v:宿主机目录直接挂载到容器。-e:设置环境变量的MySQL密码为123。-d:代表让容器后台运行。

docker run -p 3358:3357 \
--name mysql5-master \
--net mysql_net \
--ip 172.28.197.58 \
-v /db/mysql/5/master/log:/var/log/mysql \
-v /db/mysql/5/master/data:/var/lib/mysql \
-v /db/mysql/5/master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123  \
-d mysql:5.7

创建从库:--p:3359是这个容器暴露在宿主机中的端口,3357是容器内部端口。--name:容器的名称。--net:指定网络连接,就是上面创建那个。--ip:指定ip。-v:宿主机目录直接挂载到容器。-e:设置环境变量的MySQL密码为123。-d:代表让容器后台运行。

docker run -p 3359:3357 \
--name mysql5-slave1 \
--net mysql_net \
--ip 172.28.197.59 \
-v /db/mysql/5/slave1/log:/var/log/mysql \
-v /db/mysql/5/slave1/data:/var/lib/mysql \
-v /db/mysql/5/slave1/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123  \
-d mysql:5.7

编辑主库配置文件my.cnf,将横线之间的复制进去。

当然,也可以用FinalShell等可视化工具。创建好文件之后,直接拖到这个文件夹。

vim /db/mysql/5/master/conf/my.cnf

[mysqld]
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

## 同一局域网内注意要唯一
server-id=58

## 开启二进制日志功能
log-bin=mysql-bin

## 指定不需要同步的数据库名称
binlog-ignore-db=mysql

## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1032,1062

# 设置3357端口
port=3357
# 创建新表时将使用的默认存储引擎
default_storage_engine=innodb
innodb_buffer_pool_size=1000M
innodb_log_file_size=50M

# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password

# 允许最大连接数
max_connections=20

# 允许连接失败的次数,这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4

[mysql.server]
default-character-set=utf8mb4

[mysql_safe]
default-character-set=utf8mb4

[client]
# 设置mysql客户端连接服务端时默认使用的端口和默认字符集
port = 3357
default-character-set=utf8mb4

[client]
# 设置mysql客户端连接服务端时默认使用的端口和默认字符集
port = 3357
default-character-set=utf8mb4

重启主库:

docker restart mysql5-master

进入主库:

docker exec -it mysql5-master bash

进入MySQL命令行:

mysql -uroot -p123

创建一个用于复制的用户:

create user 'slave'@'%' identified with mysql_native_password by '123';

授予用户权限:

grant replication slave on *.* to 'slave'@'%';

刷新:

flush privileges;

查看并记录二进制文件名与位置,也就是File和Position

show master status;

编辑从库配置文件my.cnf,将横线之间的复制进去。

当然,也可以用FinalShell等可视化工具。创建好文件之后,直接拖到这个文件夹。

vim /db/mysql/5/slave1/conf/my.cnf

[mysqld]
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

## 同一局域网内注意要唯一
server-id=59

## 开启二进制日志功能
log-bin=mysql-bin

## 指定不需要同步的数据库名称
binlog-ignore-db=mysql

## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1032,1062

# 设置3357端口
port=3357
# 创建新表时将使用的默认存储引擎
default_storage_engine=innodb
innodb_buffer_pool_size=1000M
innodb_log_file_size=50M

# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password

# 允许最大连接数
max_connections=20

# 允许连接失败的次数,这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4

[mysql.server]
default-character-set=utf8mb4

[mysql_safe]
default-character-set=utf8mb4

[client]
# 设置mysql客户端连接服务端时默认使用的端口和默认字符集
port = 3357
default-character-set=utf8mb4

[client]
# 设置mysql客户端连接服务端时默认使用的端口和默认字符集
port = 3357
default-character-set=utf8mb4

重启从库:

docker restart mysql5-slave1

进入从库:

docker exec -it mysql5-slave1 bash

进入MySQL命令行:

mysql -uroot -p123

设置主从复制的信息,从上至下分别是:

  • 主库容器的ip地址,这里在创建容器的时候已经固定。
  • 主库复制用户的用户名,这里是进入主库容器时,创建用户的用户名。
  • 主库复制用户的密码,这里是进入主库容器时,创建用户的密码。
  • 主库的端口号,配置主库配置文件的时候,已经配置了端口号。
  • 主库的二进制文件名,进入主库命令行时,show master status; 的结果。(填自己的)
  • 主库的二进制文件位置,进入主库命令行时,show master status; 的结果。(填自己的)
  • 连接失败时,多少秒后,进行重试,本项目为30。
change master to 
master_host='172.28.197.58',
master_user='slave',
master_password='123',
master_port=3357,
master_log_file='mysql-bin.000003', 
master_log_pos=749, 
master_connect_retry=30;

 开启主从复制:

start slave;

查看主从复制状态:(这条语句需要在MySQL命令行发送才有效)
 

show slave status \G;

 

 框住的两个是Yes,就代表配置主从复制成功,重启Docker依旧生效。


如果,有时常进入MySQL命令行的需要,又觉得MySQL比较多。可以看我另一篇文章,整一个bat来启动MySQL命令行。

bat批处理:根据输入的数字,进入对应的MySQL命令行

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值