以下操作只使用一台服务器
首先进行安装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版本有些区别。现在市面上这两个版本用的最多。
-
性能提升:
- MySQL 5.7 相较于之前的版本有显著的性能提升,特别是在查询性能方面。
- MySQL 8.0 在性能上也进行了优化,但更注重新特性和改进,如默认使用 InnoDB 存储引擎。
-
JSON 支持:
- MySQL 5.7 引入了对 JSON 数据类型的原生支持,提供了文档校验、高效访问和索引创建等功能。
- MySQL 8.0 继续支持 JSON,并在一些方面进行了增强。
-
默认存储引擎:
- MySQL 5.7 默认情况下可能使用多种存储引擎,包括 InnoDB 和 MyISAM。
- MySQL 8.0 将 InnoDB 设置为默认和唯一的存储引擎,移除了对 MyISAM 的支持。
-
安全性:
- MySQL 5.7 引入了多项安全改进,如密码过期策略、SSL 配置简化等。
- MySQL 8.0 进一步增强了安全性,包括默认的加密连接、密码策略改进等。
-
角色管理:
- MySQL 5.7 没有引入角色管理。
- MySQL 8.0 引入了角色管理,使得权限管理更加集中和简化。
-
参数持久化:
- MySQL 5.7 支持参数持久化,但需要手动操作。
- MySQL 8.0 增强了参数持久化功能,支持在线修改并自动持久化到配置文件。
-
自增字段持久化:
- 在 MySQL 5.7 中,自增字段在重启后可能会重置。
- MySQL 8.0 解决了这个问题,实现了自增字段的持久化。
-
不可见列:
- MySQL 8.0 引入了不可见列的概念,允许在创建表时定义某些列为不可见。
-
查询属性:
- MySQL 8.0 支持查询属性,允许应用程序为其查询设置元数据。
-
数据字典:
- MySQL 8.0 引入了数据字典,用于存储数据库对象的元数据。
-
CTE(公用表表达式):
- MySQL 8.0 引入了 CTE,简化了复杂查询的编写。
-
字符集:
- 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
每周周一凌晨两点执行脚本备份库