mysqldump+binlog

本文介绍了一种使用mysqldump和binlog实现的MySQL备份策略,包括完全备份和增量备份的方法。详细展示了如何通过命令行参数配置来实现不同场景下的备份需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysqldump+binlog
(速度慢,远程备份较小数据集范围):
使用mysqldump:完全备份
复制指定时间范围event,mysqlbinlog:增量备份
mysqldump:完全备份,通过备份二进制日志实现增量备份;
查看目前正在使用的binlog,为增量备份做做准备。
mysql> SHOW {BINARY|MASTER} LOGS;
mysql> SHOW BINLOG EVENTS IN ‘mysql-bin.xxxxxx’ FROM position;

# mysqlbinlog
–start-position
–stop-position

–start-datetime
–stop-datetime

命令的语法格式:
mysqldump [OPTIONS] database [tables]:备份单个库,或库指定的一个或多个表;不会创建dababase
mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3…]:备份一个或多个库;会创建database
mysqldump [OPTIONS] –all-databases [OPTIONS]:备份所有库;会创建database

MyISAM, InnoDB: 温备
-x, –lock-all-tables:锁定所有库的所有表(全局读锁)
-l, –lock-tables:锁定备份的表(锁定指定每个单独数据库的所有表)
MyISAM, InnoDB: 温备
-x, –lock-all-tables:锁定所有库的所有表(全局读锁)
-l, –lock-tables:锁定备份的表(锁定指定每个单独数据库的所有表)

InnoDB:
–single-transaction:启动一个大的单一事务实现备份只对于InnoDB有效。
-B, –databases db_name1 db_name2 …:备份指定的数据库
-C, –compress:压缩传输;
-E, –events:备份指定库的事件调度器;
-R, –routines:备份存储过程和存储函数;
–triggers:备份触发器
–flush-logs, -F:锁定表之后执行flush logs命令;滚动二进制日志
如果对 mysqldump 的默认启用的选项不熟悉的话,可能会被默认启用的选项 –add-drop-table 给坑了。
因为默认会生成 drop table if exist 语句。可能会导致数据的丢失。
–add-drop-database 默认没有启用。
–skip-add-drop-table选项,或者 –add-ropt-table=0也可以,如果不想他生成 drop table 语句,可以加入

每日全面备份脚本:
mysqldump -uxxx -p –single-transaction –master-data=2 –routines –flush-logs –databases db1 db2 db3 > alldb.sql;
mysqldump -uxxx -p –flush-privileges –databases mysql > mysql.sql
mysqldump -uxxx -p –single-transaction –master-data=2 –routines –flush-logs –flush-privileges –all-databases > alldb.sql;
mysqladmin flush-logs -uroot -pxxxxxx

mysqldump7日备份脚本

#!/bin/bash
###########################################################################
##########################Please set augrment!#############################
###########################################################################

work_dir=/usr/local/work/dabasebackup
username=xxx
password=xxx
PORT=xxxx
HOST=x.x.x.x
databases=xxxxxxxxxxxx,xxxxx,xxxxxx

###set data used for database backup file name
now_date=$(date +%Y-%m-%d)
accurate_date=$(date +%Y-%m-%d\ %H:%M:%S)
seven_date=$(date -d ‘-7 day’ +%F)
eight_date=$(date -d ‘-8 day’ +%F)

####make up working directory
sql_dir=${work_dir}/sql_backup
rm_tmp_dir=${work_dir}/rm_sql
log_dir=${work_dir}/logs
if [ ! -e $sql_dir ]; then mkdir -p $sql_dir && echo -e “\033[31m Make sql bakckup dir: $sql_dir \033[0m”
fi
if [ ! -e $mv_tmp_dir ]; then mkdir  $mv_tmp_dir && echo -e “\033[31m Make remove temp dir: $mv_tmp_dir \033[0m”
fi
if [ ! -e $log_dir ]; then mkdir  $log_dir && echo -e “\033[31m Make log dir: $log_dir \033[0m”
fi

####backup logs file name
backup_log_file=${log_dir}/databases_backup.log
mv_err_log_file=${log_dir}/move_error.log
del_err_log_file=${log_dir}/delete_error.log

#echo “$backup_log_file”
#echo “$rm_err_log_file”
#echo “$del_err_log_file”

base=(`echo “$databases” | sed ‘s/,/ /g’`)
#for i in ${base[@]};
#do
#    echo ${i}
#done

for database in ${base[@]}
do
#accurate_date=$(date +%Y-%m-%d\ %H:%M:%S)
#echo “$seven_date”+”$now_date”+”$database”
#print back mysql date logs
if [ ! -e “$backup_log_file” ];then
touch $backup_log_file
else
echo “$accurate_date”………..”$database”_”$now_date” >> $backup_log_file
fi

#dump mysql database
echo
mysqldump -u$username -p$password -h$HOST -P$PORT $database > “${sql_dir}”/”$database”_”$now_date”.sql
#move 7 day ago data file to /usr/local/backup/rm_sql file folder
if [ -e “$sql_dir”/”$database”_”$seven_date”.sql ];then
mv “$sql_dir”/”$database”_”$seven_date”.sql “$rm_tmp_dir”
else
echo -e “\033[31m ${accurate_date} ERROR not ${sql_dir}/”$database”_”$seven_date”.sql file! \033[0m” >>  “$mv_err_log_file”
fi
#delete 8 day ago date file
if [ -e “$rm_tmp_dir”/”$database”_”$eight_date”.sql ];then
rm -f “$rm_tmp_dir”/”$database”_”$eight_date”.sql
else
echo -e “\033[31m ${accurate_date} ERROR not ${sql_dir}/”$database”_”$seven_date”.sql file! \033[0m” >>  “$mv_err_log_file”
fi
#delete 8 day ago date file
if [ -e “$rm_tmp_dir”/”$database”_”$eight_date”.sql ];then
rm -f “$rm_tmp_dir”/”$database”_”$eight_date”.sql
else
echo -e “\033[31m $accurate_date delete 8 day ago file fail! \033[0m” >> “$del_err_log_file”
fi
sleep 3

done

博客
32132
07-14 498
07-12 404
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值