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
#!/bin/bashDATE=$(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 {序号}