docker mysql8.0.26 迁移 mysql8.3.0

背景

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.0
    container_name: mysql8.3.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: xxxx
      MYSQL_DATABASE: xxx
      MYSQL_USER: xxx
      MYSQL_PASSWORD: xxx
      TZ: Asia/Shanghai
    command:
      --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=1
    ports:
      - 3307:3306
    volumes:
      - ./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文件

极速执行完成

你可能感兴趣的:(docker,容器,运维)