通过简单的脚本在Linux环境实现Mysql数据库的定时备份(Mysqldump命令备份)

1、mysqldump命令

  mysqldump 是 mysql 用于转存储数据库的实用程序。它主要产生一个 SQL 脚本,其中包含从头重新创建数据库所必需的命令 CREATE TABLE INSERT 等。

命令:mysqldump -h主机地址 -u用户名 -p数据库密码 数据库名 表1 表2 > 文件名

  如果用户名需要密码,则需要在此命令执行后输入一次密码核对;如果数据库用户名不需要密码,则不要加“-p”参数,导入的时候相同。注意输入的用户名需要拥有对应数据库的操作权限,否则无法导出数据。由于是作系统维护和全部数据库的导出,一般我们使用root等超级用户权限。

其他命令参考
备份远程MySQL数据库的命令
mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql
 
备份MySQL数据库为带删除表的格式备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqldump ---add-drop-table -uusername -ppassword databasename > backupfile.sql
 
直接将MySQL数据库压缩备份
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz
 
备份MySQL数据库某个()表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
 
同时备份多个MySQL数据库
mysqldump -hhostname -uusername -ppassword --databases databasename1 databasename2 databasename3 > multibackupfile.sql
 
仅仅备份数据库结构
mysqldump --no-data --databases databasename1 databasename2 databasename3 > structurebackupfile.sql
 
备份服务器上所有数据库
mysqldump --all-databases allbackupfile.sql
 
还原MySQL数据库的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
 
还原压缩的MySQL数据库
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename

2、crontab命令

  crontab命令用于设置周期性被执行的指令,并将其存放在/etc/crontab文件,以供之后读取和执行。cron系统调度进程,可以使用它在每天的非高峰负荷段运行作业,或在一周或一月中不同时段运行,cron是系统主要的调度进程,可以无需人工干预的情况下运行作业。

详细内容请参考《Linux Crontab 定时任务》

crontab的使用
crontab [-u username]    //省略用户表表示操作当前用户的crontab
    -e      (编辑工作表)
    -l      (列出工作表里的命令)
    -r      (删除工作作)

我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。

crontab的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有
在这里插入图片描述
示例:

[root@xxx soft]# crontab -l
0 2 * * * bash /usr/soft/mysql_backup.sh? #每天凌晨2点执行一次
*/1 * * * * bash /usr/soft/mysql_backup.sh? # 每分钟执行一次

3、实践

  通过前面的了解,我们基本上知道了mysql导出命令mysqldump 和 Linux定时命令crontab的用法了,现在我们就来尝试实现定期备份指定数据库中指定表的命令。

1、备份脚本

  首先,创建mysql_backup.sh文件,定义备份数据库的脚本,实现如下:

#!/bin/bash
  
#备份位置
backup_dir='/usr/data/backup/mysql/'
#获取当前时间
current_time=$(date +'%Y-%m-%d_%H%M%S')
#将backup_dir和时间组合起来,再加个后缀
filepath=$backup_dir$current_time'.sql.gz'

#数据库信息,配置数据库账号密码
s_ip='127.0.0.1'
username='root'
password='xxx'
source_database='xxx'

echo "-----------------------"$(date +%F%r)"操作开始--------------------------------"
echo $(date +%F%r)"开始进行数据备份..."
# 2>/dev/null 可以抑制警告信息
mysqldump -h${s_ip} -P3306 -u ${username} -p"${password}"  ${source_database} table1 table2 table3 | gzip > $filepath

echo $(date +%F%r)"完成同步..."

  上述脚本实现了,备份s_ip主机上的source_database数据库,且只备份table1、table2、table3三个数据表,并以gzip格式进行压缩,存储路径为backup_dir。

2、异常处理

注意: 出现 “/bin/bash^M: bad interpreter: No such file or directory”报错
  因为一般情况下,脚本会在windows环境下编写,这个时候,辅上传到Linux系统时,可能会出现“/bin/bash^M: bad interpreter: No such file or directory”错误,这是由于shell脚本文件是dos格式,即每一行结尾以\r\n来标识,而unix格式的文件行尾则以\n来标识。解决办法:

  1. 查看脚本的格式: cat -A filename
    从显示结果可以判断,dos格式的文件行尾为^M$,unix格式的文件行尾为$。
  2. 修改脚本的格式:
    vi filename打开文件,执行 : set ff=unix设置文件为unix,然后执行:wq,保存成unix格式。
  3. 查看脚本的格式: cat -A filename
    从显示结果可以判断,dos格式的文件行尾为^M$,unix格式的文件行尾为$。

执行脚本出现:“-bash: ./mysql_backup.sh: Permission denied”异常
  该报错,是没有给脚本进行授权,命令如下:

chmod u+x mysql_backup.sh 

执行脚本出现:“./mysql_backup.sh: line 19: /usr/data/backup/mysql/2022-04-28_150941.sql.gz: No such file or directory”异常
  该报错是,备份脚本中的路径,在Linux系统中不存在,这个时候,需要创建对应的目录即可,文件会自动生成。

3、创建定时任务

完成了上述步骤,脚本就完成了创建,并可以正常使用了,下面就是创建定时任务了。
在Linux系统中,执行“crontab -e”命令,进入定时任务编辑界面,编辑需要定时命令即可,如下所示:
在这里插入图片描述

编辑保存后,查看任务如下:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姠惢荇者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值