1. 效果展示
手动执行一次脚本,会出现一个MySQL数据库指定数据库压缩包红色的.gz文件,如下图出现多个是因为我多次执行,忽略数量。下载到本地解压,里面就是MySQL全部表结构和表数据sql文件.下文会说到数据库备份文件的生成过程和定时生成。
2. 生成数据库备份文件脚本
-
登录Linux系统,创建一个存放数据库备份的文件夹。如:
/usr/local/mysql-backup
,根据自己的实际文件夹创建。 -
个人电脑在本地创建一个txt文本文件,用于写脚本。复制下面脚本内容,粘贴到文本中,然后做修改。
修改内容:
1.修改你自己的数据库地址,注意""不要
,=
后面直接跟值就行。
2.修改备份文件夹地址。改成自己Linux系统中创建的备份文件夹。#!/bin/bash # MySQL Server 登录信息 MYUSER="数据库账号" MYPASS='数据库密码' MYHOST="数据库IP" MYPORT="数据库端口" MYDB="需要备份的数据库" # 备份相关配置信息 BAKDIR="/www/wwwroot/mysqlbackup/$(date +'%Y-%m-%d')" # 备份保存目录(根据实际项目路径设置) BAKFILE="$BAKDIR/db.$(date +'%Y-%m-%d-%H%M%S').sql.gz" # 备份文件名(可以不改) KEEPDAYS=7 # 保留天数 # 创建备份目录 if [ ! -d "$BAKDIR" ]; then mkdir -p "$BAKDIR" fi # 备份数据库至压缩文件 mysqldump -h "$MYHOST" -P "$MYPORT" -u "$MYUSER" -p"$MYPASS" --databases "$MYDB" | gzip > "$BAKFILE" # 清理旧备份文件,只保留指定天数内的备份,超过时间的就会被清除 find "$BAKDIR" -name '*.sql.gz' -type f -mtime +"$KEEPDAYS" -delete
-
保存txt文件。然后修改文件
.txt
后缀为.sh
保存。 -
上传.sh脚本文件到Linux服务器目录下。推荐和备份文件夹一个目录
/usr/local/mysql-backup
-
登录Linux系统,切换到脚本文件目录下。
-
手工执行一下脚本,验证脚本是否正常。
脚本执行命令:sh 脚本名称.sh
我执行的结果:
mysql-backup.sh: line 21: mysqldump: command not found
,报错了,因为找不到mysqldump命令,处理方法见下面的步骤,如果你不报错并且生成了备份文件,可以跳过以下步骤,直接看自动化执行。 -
处理找不到mysqldump命令问题
- 执行一下命令,查询MySQL的安装目录,找到对应的bin目录
find / -name mysql -print
- 切换当前目录到
bin目录
下。找到mysqldump,创建软连接,注意软连接修改mysqldump的目录为自己实际目录。ln -fs /usr/local/mysql/mysql-8.0/bin/mysqldump /usr/bin
- 执行一下命令,查询MySQL的安装目录,找到对应的bin目录
-
切换到脚本目录
-
再次手工执行脚本,注意需要在脚本的目录下执行,不然会提示找不到脚本No such file or directory
-
根据脚本中备份目录找到一个文件夹,可以下载到本地,看到是一个压缩包,里面就是MySQL备份
3. 自动化任务执行
-
查询定时器
crontab -l
此时无任何定时器
-
修改定时器
进入编辑crontab -e
输入cron表达式+你需要执行的脚本路径
例如:0 3 * * * /usr/local/mysql-backup/mysql-backup.sh
保存退出。 -
查询修改之后的定时器
crontab -l