为减少误删数据等风险,定时对数据库进行备份是必要的。这里介绍一下MySQL备份工具mysqldump的使用,以及使用脚本定时对数据库进行备份、保存备份操作记录、删除较早时间的备份文件。
一、调用语法
mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases
二、常用选项
- –all-databases, -A:备份全部所有数据库及所有表;
三、备份数据示例
3.1 备份全部数据库及全部表的结构和数据
mysqldump -uyour_user_name -p'your_password' -A > /path/to/your_backup_dir/file_name.sql
注:仅备份数据的话使用
--no-create-info, -t
参数;仅备份结构使用--no-data, -d
参数。
3.2 备份单个数据库及该数据库的结构和数据
mysqldump -uyour_user_name -p'your_password' your_database_name > /path/to/your_backup_dir/file_name.sql
3.3 备份指定的多个数据库及这些数据库的结构和数据
mysqldump -uyour_user_name -p'your_password' --databases db1 db2 > /path/to/your_backup_dir/file_name.sql
四、还原数据示例
有两种方式还原,第一种是在MySQL命令行中,第二种是使用SHELL行完成还原
4.1 shell命令还原
mysqldump -uyour_user_name -p'your_password' < /path/to/your_backup_dir/file_name.sql
4.2 登录数据库后执行
mysql> source < /path/to/your_backup_dir/file_name.sql
五、使用脚本对备份文件进行维护,定期删除多余数量的备份文件
5.1创建备份脚本
创建备份脚本/root/db-backup.sh
,内容如下。
#!/bin/bash
#保存备份个数,备份31天数据
number=31
#备份保存路径
backup_dir=/root/db_backup
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份工具
tool=mysqldump
#用户名
username=root
#密码
password=TankB214
#将要备份的数据库
database_name=edoctor
#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi
#备份命令
$tool -u $username -p$password $database_name > $backup_dir/$database_name-$dd.sql
#记录备份日志
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt
#找出需要删除的备份
delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1`
#判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l`
if [ $count -gt $number ]
then
#删除最早生成的备份,只保留number数量的备份
rm $delfile
#写删除文件日志
echo "delete $delfile" >> $backup_dir/log.txt
fi
5.2 创建定时任务,定时备份
编辑定时任务sudo crontab -e
:
30 0 * * * bash /root/db-backup.sh
References
最新评论
网飞没问题, 迪士尼+有解决方案么?
pp助手是安卓手机用的,根本下载用不来苹果
已解决
这样的话数据库里的结构为{"attachment":{"content":"xxx"}}, 要怎么才能变成{"content":"xxx"},从而使结构保持一致?
赞! make test不过的坑都写到的,谢谢楼主~
谢谢你
用了root用户还是一直502是怎么回事呢
student id 是空的