Linux定时备份MySQL

​阅读本文您将了解到:​

  1. 定时备份数据库
  2. linux定时任务
  3. crontab定时任务表达式
  4. shell脚本变量命名规则
  5. linux 软连接的使用
  6. vim使用技巧


1.备份脚本

​用vim编辑器进行编辑​​​,如果不熟练的小伙伴可以点击下方链接哟~
​​​Vim入门技巧&常用命令整理​

#!/bin/bash

#保存备份个数,备份31天数据
number=31
#备份保存路径
backup_dir=/home/mysqlbackup/xxx
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份工具 不要有空格,可用全路径名,或者使用软连接
tool=mysqldump
#用户名
username=root
#密码
password=pwd
#将要备份的数据库
database_name=xxx

#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi

#简单写法 mysqldump -u root -ppwd xxx > /home/mysqlbackup/xxx/xxx-$filename.sql
# 格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 --database 数据库名 > 文件名.sql
# $tool -u $username -p$password $database_name > $backup_dir/$database_name-$dd.sql
# 压缩文件格式
$tool -h $server_ip -P 3306 -u $username -p$password $database_name | gzip > $backup_dir/$database_name-$dd.sql.gz
#写创建备份日志 可有可无
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt

#找出需要删除的备份
delfile=`ls -l -crt $backup_dir/*.sql.gz | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/*.sql.gz | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]
then
#删除最早生成的备份,只保留number数量的备份
rm $delfile
#写删除文件日志
echo "delete $delfile" >> $backup_dir/log.txt
fi

2.赋予脚本执行权限

chmod 777 脚本名.sh

Linux定时备份MySQL_mysql

3.添加定时任务

用vim编辑器进行编辑
​​​Vim入门技巧&常用命令整理​

# 1. 添加定时任务
crontab -e

# 2. 设置每天晚上3点执行
0 3 * * * sh /你的路径/mysqlbackup.sh

# 3. 查看任务列表
crontab -l

# 4. 进入任务列表文件, 单个删除
cd /var/spool/cron/
vim root

# 5. 从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
crontab -r

Linux定时备份MySQL_备份_02
Linux定时备份MySQL_备份_03

4. crontab定时任务表达式

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρνο),原意是时间。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,
它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute hour day month week command

其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour: 表示小时,可以是从0到23之间的任何整数。
day: 表示日期,可以是从1到31之间的任何整数。
month: 表示月份,可以是从1到12之间的任何整数。
week: 表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command: 要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。


# 实例1:每1分钟执行一次my.sh
* * * * * my.sh

# 实例2:每小时的第5和第15分钟执行
5,15 * * * * my.sh

# 实例3:在上午8点到12点的第5和第15分钟执行
5,15 8-12 * * * my.sh

# 实例4:每隔两天的上午8点到12点的第5和第15分钟执行
5,15 8-12 */2 * * my.sh

# 实例5:每周一上午8点到12点的第5和第15分钟执行
5,15 8-12 * * 1 my.sh

5. 常见问题

如果遇到sql文件是生成了,但是里面没有内容
说明你配置的mysqldump不能全局访问,
建议使用全路径尝试一下,
或者在/usr/bin目录下创建mysqldump命令软连接.
注意在变量=之间不要有空格

shell脚本变量命名须遵循如下规则:
•首个字符必须为字母(a-z,A-Z)。
•中间不能有空格,可以使用下划线(_)。
•不能使用标点符号。
•不能使用bash里的关键字(可用help命令查看保留关键字)。

6. linux软连接

软链接又叫符号链接,这个文件包含了另一个文件的路径名。
可以是任意文件或目录,可以链接不同文件系统的文件。

# 将mysqldump命令软连接到/usr/bin目录下.这样就可以在控制台直接访问mysqldump命令了.

# 语法: ln -s 源文件 目标文件。
ln -s /usr/local/mysql/bin/mysqldump /usr/bin

7.参考链接:

​MySQL定时备份数据库​

​Linux Crontab 定时任务​

​mysqldump 定时任务 执行后备份的文件为空​

​MySql定时备份脚本​

​crontab百度百科​

​Shell变量赋值语句不能有空格​

​MySQL数据库基础备份​

​MySQL之mysqldump的使用​

​linux 软连接的使用​