docker安装部署mysql实现主从同步。并计划备份。

以下操作只使用一台服务器

首先进行安装yum源。再进行下载安装

yum install -y yum-utils
# 设置新的yum源  (如果不可用  需重新找)
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
# 生成缓存
yum makecache
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
添加源,添加到yum仓库里,添加源可能地址会失效,可以用国外的源。

sudo yum install -y docker-ce docker-ce-cli containerd.io
下载并安装。默认最新版本。

systemctl enable --now docker
#设置开启自启


systemctl enbale -- now docker
#验证docker状态,running代表启动成功

docker -v
查看版本信息

从官网拉取mysql镜像,5.7或者8.0的都可

这边使用5.7版本的,8.0版本与5.0版本有些区别。现在市面上这两个版本用的最多。

  1. 性能提升

    • MySQL 5.7 相较于之前的版本有显著的性能提升,特别是在查询性能方面。
    • MySQL 8.0 在性能上也进行了优化,但更注重新特性和改进,如默认使用 InnoDB 存储引擎。
  2. JSON 支持

    • MySQL 5.7 引入了对 JSON 数据类型的原生支持,提供了文档校验、高效访问和索引创建等功能。
    • MySQL 8.0 继续支持 JSON,并在一些方面进行了增强。
  3. 默认存储引擎

    • MySQL 5.7 默认情况下可能使用多种存储引擎,包括 InnoDB 和 MyISAM。
    • MySQL 8.0 将 InnoDB 设置为默认和唯一的存储引擎,移除了对 MyISAM 的支持。
  4. 安全性

    • MySQL 5.7 引入了多项安全改进,如密码过期策略、SSL 配置简化等。
    • MySQL 8.0 进一步增强了安全性,包括默认的加密连接、密码策略改进等。
  5. 角色管理

    • MySQL 5.7 没有引入角色管理。
    • MySQL 8.0 引入了角色管理,使得权限管理更加集中和简化。
  6. 参数持久化

    • MySQL 5.7 支持参数持久化,但需要手动操作。
    • MySQL 8.0 增强了参数持久化功能,支持在线修改并自动持久化到配置文件。
  7. 自增字段持久化

    • 在 MySQL 5.7 中,自增字段在重启后可能会重置。
    • MySQL 8.0 解决了这个问题,实现了自增字段的持久化。
  8. 不可见列

    • MySQL 8.0 引入了不可见列的概念,允许在创建表时定义某些列为不可见。
  9. 查询属性

    • MySQL 8.0 支持查询属性,允许应用程序为其查询设置元数据。
  10. 数据字典

    • MySQL 8.0 引入了数据字典,用于存储数据库对象的元数据。
  11. CTE(公用表表达式)

    • MySQL 8.0 引入了 CTE,简化了复杂查询的编写。
  12. 字符集

    • MySQL 8.0 将默认字符集从 latin1 更改为 utf8mb4,增强了对 Unicode 的支持。

这些区别体现了 MySQL 在两个版本之间的发展和改进,特别是在性能、安全性、易用性和新特性方面。

docker pull mysql:5.7
#拉取指定版本镜像
有时候会因为网络原因拉取不到,可以配置国内镜像加数源。推荐使用ali
docker images
#查看本期镜像仓库是否存在

现在两个创建一个为master一个为slave。

docker run --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
#创建master容器

docker run --name mysql-slave -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

#创建slave容器

docker -ps
#查看容器状态

[root@wang ~]# docker exec -it mysql-master /bin/bash
bash-4.2# exit
exit
[root@wang ~]# docker exec -it mysql-slave /bin/bash
bash-4.2# history


#测试登录

由于容器里面就一个mysql镜像,没有其他命令。我们先要再宿主机编辑一个list文件传到容器里
或者在宿主机编辑my.cnf直接cp到容器里也是可以的。

vim sources.list

#把以下源放入到文件内,也可以放其他的源


deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

#保存退出,再传到容器里,两个容器都要
#传送前,检查容器里/etc目录下是否有apt目录。没有则创建,两个容器都要
[root@wang ~]# docker exec -it mysql-master /bin/bash
bash-4.2# mkdir /etc/apt
bash-4.2# exit

[root@wang ~]# docker exec -it mysql-slave /bin/bash
bash-4.2# mkdir /etc/apt
bash-4.2# exit

docker cp sources.list mysql-master:/etc/apt/sources.list
docker cp sources.list mysql-slave:/etc/apt/sources.list

显示successfully,就代表传送成功,去容器里查看是否存在、
#传送成功后进容器里查看文件是否存在。

#接下来进容器里面进行更新源,并下载相关命令包.两个容器都要下载

docker exec -it mysql-master /bin/bash

yum update   #如果在k8s集群容器中使用apt-get update
yum install -y wget vim

exit

docker exec -it mysql-slave /bin/bash
yum update
yum install -y wget vim

#进入master中的mysql授权用户,这边授权的是root。也可以自建一个用户授权


alter user 'root'@'%' identified with mysql_native_password by '123456';


编辑容器中/etc/my.cnf。开启二进制。在mysql模块中添加以下内如

log-bin=61
server-id=1 #唯一

修改my.cnf文件后退到宿主机,重启master容器,让其应用二进制。

bash-4.2# exit
exit
[root@wang ~]# docker restart mysql-master
mysql-master
[root@wang ~]#

重新进入master容器中,进入MySQL查看二进制数据。
show master status;

进入slave容器中


修改/etc/my.cnf文件,在mysql模块中添加以下内容
server-id=2 #唯一性


修改完后退到宿主机对slave容器进行重启以生效,重启对象也可以是容器id

docker restart mysql-slave

在宿主机上查看容器的IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql-master

进入slave中,在mysql中指定master服务器。
change master to  master_host="172.17.0.2" , master_user="root" , master_password="123456" ,master_log_file="61.000001" , master_log_pos=154;

start slave;
show slave status \G

 io线程和sql都是yes状态,代表配置主从成功,现在只需测一下即可。在master中创建一个test的库,看看slave是否同步。

实现同步成功

备份test库,先编写一个备份脚本。再创建一个计划任务书,让其再指定的时间进行备份。

因为是实现了同步数据,我们只需再master中进行备份。节省资源空间。


只需在master中执行脚本,和编写计划任务书。在master中新建一个test.sh脚本,内容如下


#!/bin/bash
DB_NAME="test"
DB_USER="root"
DB_PASSWORD="123456"

BACKUP_DIR="/mnt"
FILE_NAME="db_backup_$DB_NAME`date +%YSmSd%HSM%S`.sql"

mysqldump -u $DB_USER -p $DB_PASSWORD $DB_NAME > $BACKUP_DIR/$FILE_NAME

if [ $? -eq 0 ]; then
    echo "Backup of $DB_NAME completed successfully."
else
    echo "Backup of $DB_NAME failed."
fi


#执行测试
sh test.sh

chmod +x test.sh

 进入mnt查看备份文件,文件存在,脚本没问题。

#执行计划书命令前,需要在容器里下载相关命令的包,才能使用

 yum install cronie -y
#这里面包含了crontab

下载完之后就可以执行

crontab -e

 如果提示这个说明你没有vi编辑器,需要下载,下载命令是

yum install -y vi

要指定 cron 使用 vim 作为默认编辑器来编辑 crontab 文件,
您可以设置环境变量 VISUAL 或 EDITOR。cron 会检查这些环境变量,
以确定使用哪个编辑器来打开 crontab。

以下是如何设置这些环境变量的步骤:

对于当前会话:
设置 VISUAL 环境变量:

export VISUAL=vim
这将仅为当前终端会话设置 VISUAL。

设置 EDITOR 环境变量:

export EDITOR=vim
这同样会仅为当前终端会话设置 EDITOR。

对于所有会话(添加到您的 shell 配置文件中):
打开您的 shell 配置文件,例如 ~/.bashrc、~/.bash_profile、~/.zshrc 等,取决于您使用的 shell 和配置文件。

添加以下行:

export VISUAL=vim
export EDITOR=vim
保存并关闭配置文件。

重新加载配置文件,以便更改立即生效:

source ~/.bashrc
或者对于其他配置文件,使用相应的名称替换 ~/.bashrc。

验证设置:
通过尝试编辑 crontab 来验证编辑器是否已正确设置:

crontab -e

每周周一凌晨两点执行脚本备份库 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值