背景
mysql8.0.26 存在CVE-2021-3711、CVE-2022-32221漏洞,姑升级到mysql8.3.0
镜像准备
sudo docker save -o mysql830.tar mysql:8.3.0
sudo docker load -i mysql830.tar
docker-compose
命令 docker-compose up -d (约定优于配置 默认当前目录下 docker-compose.yml)
docker-compose.yml配置修改,docker-compose会重新创建。
不在docker-compose.yml 配置的已有容器会被删除
docker-compose -mysql8参数配置
指定root密码、新数据库、新用户及密码 时区
挂载 数据、配置文件目录
version: "3"
services:db830:image: mysql:8.3.0container_name: mysql8.3.0restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: xxxxMYSQL_DATABASE: xxxMYSQL_USER: xxxMYSQL_PASSWORD: xxxTZ: Asia/Shanghaicommand:--max_connections=1000--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--default-authentication-plugin=mysql_native_password--explicit_defaults_for_timestamp=true--lower_case_table_names=1ports:- 3307:3306volumes:- ./db-830:/var/lib/mysql- ./conf-830:/etc/mysql/conf.d
docker 备份mysql
进入mysql8容器
docker exec -it xxx bash
mysql-bk.sh
/data/mysql/mysqlbk/bk 是宿主主机目录
注意这是这个目录允许其它用户u谢谢
因为默认是以当前用户权限写入的,
虽然加了sudo,但是写入文件时还是以当前普通用户权限进行写,会提示无权操作
以为是容器内目录,没有权限,其实不是。
要以root身份进入,docker exec -u root,不然导不出数据,xxx.sql一直是空的
--no-create-db 指定不输出创建数据库语句(因为实在已有的库上恢复,文件太大,又不好改)
#!/bin/sh
echo backup mes start $(date +%Y-%m-%d\ %H:%M:%S)
docker exec -u root -i mysql8.3.0 mysqldump -uroot -pxxxx --single-transaction --triggers --routines --events --no-create-db --databases xxx> /data
/mysql/mysqlbk/bk/mes_bak_$(date +%Y%m%d_%H-%M-%S).sql
echo bk end $(date +%Y-%m-%d\ %H:%M:%S)
/usr/bin/find /data/mysql/mysqlbk/bk/ -mtime +60 -exec rm -rf {} \;
echo clear 60 days expired files success: $(date +%Y-%m-%d\ %H:%M:%S)
echo backup success
echo
docker 还原mysql
把sql文件拷贝到容器内
docker cp /xxxx/xxx.sql 容器id:/
docker exec -it xxx bash 进入容器
mysql -uroot -p 登录
source ./xxx.sql文件
极速执行完成