tar cp scp 工具/备份数据库 一般用于完整全备份。
无法实现增量备份。
备份的过程: [ 完全 的 物理 方式 冷备。] 可以实现 完全备份 + 增量备份
备份步骤
- 施加全局锁
- 实施 tar 命令 压缩备份
- 复制备份好的数据库到备份目录
- 刷新二进制日志文件
- 立刻解锁
模拟数据丢失:
1、以某张表的数据 为依据, 例如学生表。 在这次备份完成后。
a\ 当前学生表多少条记录 1015条
b\ 当前使用的二进制日志,已经 它停留的位置
c\ 这次备份后,灾难发生于,下一次备份到来之前。
2、 模拟业务向前运行(插入 另外10条数据) , 这 10条 数据,存在哪个位置???
3、在没有任何预备的情况下, 停库,删除所有数据 rm -rf /data/mysql
然后执行还原过程
还原的过程:
- 如果软件损坏,就重装Mysql,先不要启动。
- 将完全备份恢复到 数据库 目录。 (## 恢复后的文件,权限 是否 都是 Mysql 用户 )
- 添加防火墙规则,临时禁止 3306 端口的连接 INPUT上加
- 启动数据库,检查是否有报错。 1015 条数据找回
- 找到 另外 10 条数据所在的 二进制日志文件,将他们导出。
mysqlbinlog --start-position=154 /data/log-bin/mysql-bin.000003 > /root/03.sql
6.停止 当前的 二进制日志的记录功能。
mysql> set session sql_log_bin=0;
7、导入数据
mysql> source /root/03.sql;
8、开启二进制日志记录功能
mysql> set session sql_log_bin=1;
查看验证。
9、清除防火墙 规则。
恢复流程 完毕。
备份脚本如下:
[root@mysql-21 /test]# cat full-backup.sh
#!/bin/bash
a_log="/root/mysql-bak.log" #mysql备份日志
a_dir=/backup #备份路径
data_dir=/data/mysql # 备份数据库路径
data_name=`echo echo $data_dir | awk -F "/" '{print $NF}'` #要备份的数据库名称
echo "=============`date`=====================">> $a_log
tail -1 /bin-log/mysql-bin.index >> $a_log #备份mysql的二进制文件
echo "对/data/mysql的完全备份开始..."
time1=`date +%s` #获得当前时间
#备份mysql的配置文件
cp /etc/my.cnf $a_dir/my-`date +%F-%H-%M-%S`.cnf
mysql -uroot<<EOF
system echo "锁定表..."
flush table with read lock;
system cd $data_dir && cd .. && tar -zcf $a_dir/$data_name`date +%F-%H-%M-%S`.tar.gz mysql 2>> $a_log
unlock table;
system echo "解锁表..."
EOF
time2=`date +%s` #获得备份结束时间
echo "备份完成时`expr $time2 - $time1`秒"
###########实现备份的回滚功能#################
##获取mysql备份数量,超过$num份后删掉最早的一份
num=5
count=`ls -lt $a_dir | grep "mysql" | wc -l`
if [ $count -gt $num ]
then
rm -rf `ls -lt $a_dir | grep "mysql" |tail -1| awk '{print $NF}`
fi
##获取数据库配置文件my.cnf备份数量,超过$num份后删掉最早的一份
count1=`ls -lt $a_dir| grep "\<my\>".*cnf| wc -l`
if [ $count1 -gt $num ]
then
rm -rf `ls -lt $a_dir| grep "\<my\>".*cnf| tail -1|awk '{print $NF}'
注意
当前配置环境是在centos7下,数据库的配置/etc/my.cnf
https://blog.csdn.net/ITCBD_l/article/details/89295541