Mysql备份(全量+增量+恢复)方案操作记录

1、开启mysql的binlog日志&查看$备份

2、shell脚本

mysqldump 变量说明

--all-databases针对所有数据库进行备份

 --databases databasename 针对单个数据库进行备份
--flush-logs为结束当前日志,生成新日志文件;
--master-data=2 选项将会在输出SQL中记录下完全备份后新日志文件的名称,

用于日后恢复时参考,例如输出的备份SQL文件中含有:
CHANGE MASTER TO MASTER_LOG_FILE=’MySQL-bin.000002′, MASTER_LOG_POS=106;

3.mysqldump 增量备份其他说明:
如果mysqldump 加上–delete-master-logs 则清除以前的日志,以释放空间。但是如果服务器配置为镜像的复制主服务器,用mysqldump –delete-master-logs删掉MySQL二进制日志很危险,因为从服务器可能还没有完全处理该二进制日志的内容。在这种情况下,使用 PURGE MASTER LOGS更为安全。

每日定时使用 MySQLadmin flush-logs来创建新日志,并结束前一日志写入过程。并把前一日志备份,例如上例中开始保存数据目录下的日志文件 MySQL-bin.000002 , ...

#!/bin/bash
user=root
passwd=root!
backup_dir=/var/lib/mysql/backup/
name_dir=$(date +%F"-%H")
single_database=test
binlog_dir=/var/lib/mysql/binlog

if [ ! -d $backup_dir ];  then
	mkdir -p $backup_dir
fi
if [ ! -d  $backup_dir$name_dir ];  then
	mkdir -p $backup_dir$name_dir
fi
#全量备份
mysql_all(){
	
	cd $backup_dir$name_dir
	mysqldump -u$user -p$passwd  --master-data --flush-logs --all-databases > $backup_dir$name_dir/$name_dir.sql
}
#单个数据库备份
mysql_single(){
	
	cd $backup_dir$name_dir
	mysqldump -u$user -p$passwd --master-data --flush-logs --databases $single_database > $backup_dir$name_dir/$name_dir-$single_database.sql
}
#增量备份
mysql_increment(){
	
    cd $binlog_dir
	mysqladmin -u$user -p$passwd flush-logs
	cp $(ls mysql-bin.[0-9]* | head -n -1 | sort -rg | head -n 1) $backup_dir$name_dir/
}
$1

3、自动执行备份

该脚本已经测试过,可以使用。只需要设置计划任务即可。
设置计划任务:

在周五实行全备。

在周一到周六实行增量备份。

因为过期日志在七天会自动清除。

crontab -e
0 1 * * 0 /bin/bash /root/mysqldump.sh mysql_all >/dev/operate_`date +"\%Y\%m\%d"`.log 2>&1
0 1 * * 1-6 /bin/bash /root/mysqldump.sh mysql_increment >/dev/operate_`date +"\%Y\%m\%d"`.log 2>&1

4、生成文件

5、恢复文件

(1)use对应的数据库;
(2)利用source命令即可恢复数据。

猜你喜欢

转载自blog.csdn.net/weixin_41380972/article/details/86367690
今日推荐