1、数据备份
首先创建文件夹
mkdir -p /data/backup/mysql
cd /data/backup
创建配置文件(数据库信息)
vi my_mysql.cnf
其中 mysqldump 下的参数是给导出的命令使用的,mysql 下的参数是导入、删除数据的时候使用的
[mysqldump]
#设置允许导出的文件大小上限
max_allowed_packet = 400M
host=127.0.0.1
user=root
password='root'
[mysql]
host=127.0.0.1
user=root
password='root'
创建数据备份文件
vi mysql_backup.sh
编写数据备份脚本
#!/bin/bash
db_name='dm_test'
table_name='user'
backup_dir='/data/backup/mysql/'
current_time=$(date +'%Y-%m-%d_%H%M%S')
filepath=$backup_dir$current_time'_user.sql.gz'
echo '开始导出数据库...'
mysqldump --defaults-extra-file=/data/backup/mysql_backup.cnf $db_name $table_name | gzip > $filepath
echo '导出成功,文件名为: '$filepath
echo '开始删除数据.....'
mysql --defaults-extra-file=/data/backup/mysql_backup.cnf -e "use dm_test;delete from user where create_time < DATE_SUB( CURDATE(), INTERVAL 1 DAY );optimize table user;"
echo '删除成功'
设置脚本可执行权限
chmod +x ./mysql_backup.sh
执行脚本
sh ./mysql_backup.sh
# 查看一下结果
ll ./mysql
解压命令
gzip -dc ./mysql/xxxx.sql.gz > ./mysql/xxxx.sql
2、数据恢复
创建脚本
vi mysql_restore.sh
编写脚本
#!/bin/bash
if [ -z $1 ] || [ ! -f $1 ]
then
echo "请输入sql压缩文件(*.sql.gz)"
exit 1
fi
db_name='dm_test'
base_dir='/data/backup/mysql/'
gz_sql_file=`basename $1`
file_ext=${gz_sql_file##*.}
if [ $file_ext != 'gz' ]
then
echo '文件格式不正确,请输入 .sql.gz 文件'
exit 1
fi
sql_file=${gz_sql_file%.*}
echo '解压文件中...'
gzip -dc $base_dir$gz_sql_file > $base_dir$sql_file
echo '解压完成.'
echo '开始导入数据库...'
mysql --defaults-extra-file=/data/backup/my_mysql.cnf $db_name < $base_dir$sql_file
if [ -f $base_dir$sql_file ]
then
echo '删除临时文件.'
rm -f $base_dir$sql_file
fi
echo '导入完成.'
执行导入脚本
sh ./mysql_restore.sh ./mysql/xxxx.sql.gz
3、自动清理备份文件
创建脚本
vi remove_backup.sh
编辑脚本
# 删除30天前的备份
find /data/backup/mysql -type f -mtime +30 | xargs rm -f
4、创建定时任务
crontab -e
*/1 * * * * /data/backup/mysql_backup.sh #为了测试使用 每分钟执行一次
查看任务
crontab -l