一、数据库为什么需要备份?
任何数据库都需要备份,备份数据是维护数据库必不可少的操作。
备份就是为了防止原数据丢失,保证数据的安全。当数据库因为某些原因造成部分或者全部数据丢失后,备份文件可以帮我们找回丢失的数据。因此,数据备份是很重要的工作。
1.1常见数据库备份的应用场景如下
- 数据丢失应用场景:
- 人为操作失误造成某些数据被误操作
- 软件 BUG 造成部分数据或全部数据丢失
- 硬件故障造成数据库部分数据或全部数据丢失
- 安全漏洞被入侵数据恶意破坏
- 非数据丢失应用场景:
- 特殊应用场景下基于时间点的数据恢复
- 开发测试环境数据库搭建
- 相同数据库的新环境搭建
- 数据库或者数据迁移
以上列出的是一些数据库备份常见的应用场景,数据库备份还有其它应用场景,这里就不一一列举了。
比如磁盘故障导致整个数据库所有数据丢失,并且无法从已经出现故障的硬盘上面恢复出来时,可以通过最近时间的整个数据库的物理或逻辑备份数据文件,尽可能的将数据恢复到故障之前最近的时间点。
操作失误造成数据被误操作后,我们需要有一个能恢复到错误操作时间点之前的瞬间的备份文件存在,当然这个备份可能是整个数据库的备份,也可以仅仅只是被误操作的表的备份。
二、Mysql数据库备份
2.1 创建备份文件夹
mkdir /home/backup
2.2 创建shell脚本文件
vim backup.sh
2.3 写入内容
#!/bin/bash
#保存备份个数,备份7天数据
number=7
#备份保存路径
backup_dir=/home/backup
#日期
dd=`date +%Y-%m-%d-%H-%M`
#备份工具
tool=/opt/lampp/bin/mysqldump
#用户名
username=root
#密码
password=123456
#将要备份的数据库
database_name=crm
#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi
#如果数据库在另一台服务器需指定地址 -h 192.168.21.25
$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
密码也可以不用写在脚本中
找到my.cnf,编辑
[mysqldump]
quick
max_allowed_packet = 16M
#在这里输入user及password,在执行mysqldump命令就不用输入用户名和密码了
user=username #填写真实mysql用户名
password=password #填写真实mysql密码
2.4 使用crontab进行定时备份
crontab -e #创建定时任务,如果没有按照crontab请安装后重试。
* * * * * 命令:前面5个*代表,分 时 日 月 周,根据自己的需求设定备份时间,本次测试使用每分钟备份一次
*/1 * * * * /home/backup/backup.sh
service crond restart #重启服务
三、Mysql数据库还原
3.1第一种方法
[root@obj root]# mysql -u root -p test < /home/backup/crm-2020-08-14-14-32.sql
Enter password:123456
3.2 第二种方法
①先登录mysql数据库,输入命令 mysql -u root -p,输入密码即可
②再使用数据库test, use test
③导入备份文件. source /home/backup/crm-2020-08-14-14-32.sql