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

相关推荐
my_styles1 小时前
docker-compose部署项目(springboot服务)以及基础环境(mysql、redis等)ruoyi-ry
spring boot·redis·后端·mysql·spring cloud·docker·容器
Liudef064 小时前
使用Docker部署MongoDB
mongodb·docker·容器
ZHOU_WUYI6 小时前
React与Docker中的MySQL进行交互
mysql·react.js·docker
Will_11306 小时前
如何实现k8s高可用
运维·docker·容器
编程、小哥哥6 小时前
互联网大厂Java面试场景:从缓存到容器化的技术问答
redis·docker·微服务·kubernetes·spring security·java面试·gitlab ci
小白要努力sgy7 小时前
深入理解Docker和K8S
docker·kubernetes
青春不流名8 小时前
ctr查看镜像
docker
意倾城8 小时前
Docker 网络
docker·容器
Johny_Zhao8 小时前
AI+自动化测试系统方案:网络设备与网络应用智能测试
linux·网络·人工智能·python·网络安全·docker·ai·信息安全·云计算·ansible·shell·cisco·huawei·系统运维·itsm·华三·deepseek
_Meilinger_10 小时前
碎片笔记|PromptStealer复现要点(附Docker简单实用教程)
docker·huggingface·tmux·promptstealer·hf-mirror