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 {序号}

相关推荐
柯儿的天空9 分钟前
【OpenClaw 全面解析:从零到精通】第 014 篇:OpenClaw 云端部署实战——阿里云、腾讯云与 Docker 部署全指南
人工智能·阿里云·docker·云计算·aigc·腾讯云·ai写作
匀泪11 分钟前
云原生(docker网络)
docker·云原生·容器
changhong198614 分钟前
Docker部署Spring Boot + Vue项目
vue.js·spring boot·docker
Uncertainty!!1 小时前
docker打包本地conda虚拟环境并远程部署
docker·容器·conda
一点事1 小时前
windows:安装docker
windows·docker·容器
moxiaoran57531 小时前
使用docker创建flowable容器
运维·docker·容器
last demo1 小时前
docker容器日志
运维·docker·容器
小挪号底迪滴10 小时前
Docker容器化实战:从“在我机器上能跑“到环境一致性
运维·docker·容器
多云的夏天16 小时前
docker容器部署-windows-ubuntu
java·docker·容器
淡泊if18 小时前
1.2GB → 98MB,我的 Docker 镜像瘦身实战记录
运维·docker·容器