Centos9 + Docker 安装 MySQL8.4.0 + 定时备份数据库到本地

Centos9 + Docker 安装 MySQL8.4.0 + 定时备份数据库到本地

      • 创建目录,创建配置文件
      • 启动容器
      • 命令
      • 定时备份
        • MySQL执行脚本
        • Linux每日定时任务
          • 命令
          • 文件内参数
          • 其他时间参数
        • AT一次性定时任务

创建目录,创建配置文件

  • $ mkdir -p /opt/mysql/conf

  • $ vim /opt/mysql/conf/my.cnf

    [mysql]
    #设置mysql客户端默认字符集
    default-character-set=UTF8MB4
    [mysqld]
    #设置3306端口
    port=3306
    #允许最大连接数
    max_connections=500
    #允许连接失败的次数
    max_connect_errors=10
    #服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=UTF8MB4
    #开启查询缓存
    explicit_defaults_for_timestamp=true
    #创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    #等待超时时间秒
    wait_timeout=600
    #交互式连接超时时间秒
    interactive-timeout=600

启动容器

复制代码
$ docker run -d \
-p 25379:3306 \
-v /etc/localtime:/etc/localtime:ro \
-v /opt/mysql/logs:/var/log/mysql \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD="wyj@1234qwer" \
--restart=always \
--privileged=true \
--name mysql \
mysql:8.4.0

命令

复制代码
#进入容器内
$ docker exec -it mysql bash

#外部执行命令
docker exec {容器} {命令}

定时备份

MySQL执行脚本
  • 建目录、建脚本,修改内部参数
  • $ mkdir -p /opt/mysql_backup/sql
  • $ vim /opt/mysql_backup/sql-backup.sh
sh 复制代码
#!/bin/bash

DATE=$(date +%Y%m%d%H%M%S)
CONTAINER_NAME="mysql"
BACKUP_DIR="/opt/mysql_backup/sql"
DATABASE_HOST="127.0.0.1"
#--all-databases
DATABASE_NAME="aaa"
ACCOUNT="root"
PASSWORD="wyj@1234qwer"

docker exec $CONTAINER_NAME mysqldump -h $DATABASE_HOST -u $ACCOUNT -p${PASSWORD} $DATABASE_NAME > $BACKUP_DIR/"$DATABASE_NAME"_"$DATE".sql
  • 赋权

    $ chmod 777 /opt/mysql_backup/sql-backup.sh

    $ docker exec mysql mysqldump -h 127.0.0.1 -u root -p"wyj@1234qwer" aaa > /opt/mysql_backup/aaaa.sql

Linux每日定时任务
命令
  • crontab 一个文件形式保存的定时任务,每天自动执行

  • 每日定时任务,修改文件内容,保存后,到点自动执行

  • 被执行的文件,需要先赋权,具备执行权限

  • 命令

    #是否正在运行
    $ service crond status

    #当前用户是否存在crontab文件,如果不存在,crontab -e 直接创建即可
    $ crontab -l

    #直接编辑当前用户crontab 文件
    $ crontab -e

    #删除当前用户的定时任务,不要使用,太危险
    $ crontab -r

文件内参数
  • 直接编辑当前用户crontab 文件

  • $ crontab -e

  • 文件内参数

    #每天0点1分
    1 0 * * * /opt/mysql_backup/sql-backup.sh

    #每天23.50
    30 20 * * * /opt/mysql_backup/sql-backup.sh

其他时间参数
  • 其他时间参数

    #文件格式
    #文件格式:分钟 小时 日 月 星期 {命令}
    #时间取值:分钟(0-59) 、小时(0-23) 、日(1-31)、 月(1-12) 、星期(0-7,0和7都是星期日)
    #特殊符号取值:
    *:表示任何时间。
    ,:用于分隔多个值,例如 1,3,5 表示分钟的第 1、3、5 分钟。
    -:表示一个范围,例如 1-5 表示从第 1 分到第 5 分。
    /:表示步长,例如 */5 表示每 5 分钟执行一次。

    #每1分钟执行一次

            • echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" >> /opt/test.txt

    #周六和周日 12:30
    30 12 * * 6-7 echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" >> /opt/test.txt

    #每天12.31-12.59 每分钟一次
    31-59 12 * * * echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" >> /opt/test.txt

    #周六和周日,每隔五分钟,就进行一次
    */5 12 * * 6-7 echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" >> /opt/test.txt

AT一次性定时任务
  • At命令是一次性定时计划任务,必须确保守护进程已经启动

  • 默认情况下,atd守护进程每60秒检查作业队列,执行完一个任务后不再执行此任务了。

    #检查是否启动
    $ ps -ef | grep atd

    #安装定时任务,开机自启
    dnf -y install at sudo systemctl start atd
    sudo systemctl enable atd sudo systemctl status atd

    #授权
    $ chmod 777 /opt/mysql_backup/sql-backup.sh

    #指定执行文件和时间
    $ echo "/opt/mysql_backup/sql-backup.sh" | at 12:55 2025-01-12

    #查询定时任务,已经执行过的任务,自动消失
    $ at -l

    #删除定时任务
    $ at -d {序号}

相关推荐
问简4 小时前
docker 镜像相关
运维·docker·容器
Benszen5 小时前
Docker容器化技术实战指南
运维·docker·容器
Hommy886 小时前
【开源剪映小助手】Docker 部署
docker·容器·开源·github·aigc
斯普信云原生组8 小时前
Prometheus 环境监控虚机 Redis 方案(生产实操版)
运维·docker·容器
喵了几个咪8 小时前
如何在 Superset Docker 容器中安装 MySQL 驱动
mysql·docker·容器·superset
工具罗某人8 小时前
docker compose部署kafka集群搭建
docker·容器·kafka
sbjdhjd14 小时前
Docker | 核心概念科普 + 保姆级部署
linux·运维·服务器·docker·云原生·面试·eureka
摇滚侠14 小时前
Vmvare 虚拟机安装 Linux CentOS 7 操作系统 一键安装 Docker 1Panel 一键安装 MySQL Redis OpenClaw
linux·docker·centos
comedate14 小时前
【OpenClaw】 Open-WebUI Docker 部署连接本地 Ollama 技术文档
docker·ollama·openwebui·openclaw
川trans15 小时前
基于 Docker & K8s 的 MySQL 容器化部署与应用关联实践
mysql·docker·kubernetes