本文主要记录基于Docker在Centos7上安装Mysql8的过程,具体如下:
1.宿主准备
1.1.宿主端口准备
firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload
1.2.宿主目录准备
mkdir -p /home/dbtest/apps/mysql/conf mkdir -p /home/dbtest/apps/mysql/data mkdir -p /home/dbtest/apps/mysql/backup
2,Docker准备
2.1docker准备
此处省略,本次使用版本
docker -v Docker version 26.1.4
2.2镜像准备
原始镜像:
hub.atomgit.com/amd64/mysql:8.1
离线镜像:
image_mysql_81.tar
若有需要该镜像,可和我取得联系。
3.安装配置
启动命令:
docker run -d \--name mysql8 \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD=Ty@2021! \-v /home/dbtest/apps/mysql/conf:/etc/mysql/conf.d \-v /home/dbtest/apps/mysql/data:/var/lib/mysql \-v /home/dbtest/apps/mysql/backup:/backup \hub.atomgit.com/amd64/mysql:8.1
注解说明:
-v /home/dbtest/apps/mysql/conf:/etc/mysql/conf.d 把主机配置目录映射到Docker /etc/mysql/conf.d目录
-v /home/dbtest/apps/mysql/data:/var/lib/mysql 把主机配置目录映射到Docker /etc/var/lib/mysql目录
-v /home/dbtest/apps/mysql/backup:/backup 把主机配置目录映射到Docker /etc/mbackup目录
映射说明
/home/dbtest/apps/mysql/conf该目录下面,可以增加以.cnf结尾的配置文件,根据需要主题可独立命名
进入容器:
docker exec -it mysql8 /bin/bash
账号设置
docker exec -it mysql8 mysql -u root -pTy@2021!use mysql; SELECT User, Host, authentication_string FROM user WHERE User = 'root'; ALTER USER 'root'@'localhost' IDENTIFIED BY 'Demo@2024!' PASSWORD EXPIRE NEVER; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Demo@2024!'; FLUSH PRIVILEGES;
SQL检测:
docker exec -it mysql8 mysql -u root -pTy@2021! -e "select 1;"
返回输出1,表示数据库访问成功
4,Docker命令
docker start mysql8
docker stop mysql8
docker restart mysql8
5.DB备份
全量备份:full_backup.sh
#!/bin/bash# 创建备份目录 BACKUP_DIR="/backup" mkdir -p "$BACKUP_DIR"# 定义备份文件名,包含当前日期和时间 BACKUP_FILE="/backup/full_mysql_backup_$(date +%Y%m%d%H%M%S).sql"# 使用 mysqldump 命令进行全量备份 docker exec mysql8 mysqldump -u root -p'Demo@2024!' --all-databases > "$BACKUP_FILE"# 检查备份是否成功 if [ $? -eq 0 ]; thenecho "全量备份成功:$BACKUP_FILE" elseecho "全量备份失败" fi
增量备份:increment_backup.sh
此处省略,待验证后提供
定时作业:
crontab -e
0 2 * * 0 /home/dbtest/apps/backsh/full_backup.sh
0 3 * * * /home/dbtest/apps/backsh/increment_backup.sh
0 2 * * 0
0:表示分钟,这里是 0 分,即整点。
2:表示小时,这里是凌晨 2 点。
*:表示日,这里的*代表每月的任意一天。
*:表示月,这里的*代表每年的任意一个月。
0:表示周,这里的0代表周日。
所以0 2 * * 0表示每周日凌晨 2 点整执行任务