linux中mysql数据库自动备份压缩并传输到其它服务器中

查阅多方资料之后总结了一下mysql5.6与mysql5.7之间不同的备份方式
linux中mysql数据库自动备份压缩并传输到其它服务器中(没有的路径需要自己创建)
Mysql5.6以下
1.假设服务器A是一台数据库服务器,服务器B是一台备份服务器
2.我们要做的是在A服务器上编写back.sh脚本,通过back.sh脚本文件备份A服务器上的mysql文件
3.接下来我们要在A服务器上编写push.sh脚本,将备份好的mysql文件传输给B服务器指定目录下
4.给back.sh脚本和push.sh脚本添加定时调度

创建back.sh
touch back.sh
#!/bin/bash
#设置mysql的备份保存目录
folder=/back-up/mysql-back-up
rm -rf /back-up/mysql-back-up
mkdir $folder
cd f o l d e r d a y = ‘ d a t e + m k d i r − p " folder day=`date +%Y-%m-%d,%H:%M:%S-edu_bi_cangnan` mkdir -p " folderday=date+mkdirp"day"
cd KaTeX parse error: Expected 'EOF', got '#' at position 5: day #̲数据库服务器ip,填写服务器的…host -u u s e r − p user -p userppassword $db > ./edu_bi_cangnan.sql

接下来发送到其它服务器上需要安装expect ,yum install expect
创建push.sh
touch push.sh
#!/bin/bash

/usr/bin/expect -c "

set timeout 30
#传输语句
spawn bash -c " scp -r -p /back-up/mysql-back-up 服务器账号@服务器地址:/back"
expect “password:”
send “服务器密码\r”
expect eof"

back和push 脚本需要加上 chmod -R 777 xx.sh
service crond status 检查状态
crontab -e 进入编辑页面
0 1 * * * sh /usr/local/wfjb_web_back/xx.sh #每天凌晨一点执行xx.sh
/bin/systemctl restart crond.service 重启cron
Mysql5.7
大致与5.6方法相同
不同的是/etc下边的my.cnf需要修改配置:
cd /etc
vi my.cnf
在最后边加上这段
[mysqldump]
socket=/tmp/mysql.scok
default-character-set=utf8mb4
host=127.0.0.1
user=root
password=‘你的密码’
保存退出

之后到写的back.sh文件中
文件如下:
#!/bin/bash
DUMP=’/usr/bin/mysqldump’ #mysqldump所处的文件夹位置
#5.7之后需要加此句来读取配置中的[mysqldump]
EXTRA_FILE=’–defaults-extra-file=/etc/my.cnf’
#数据备份位置
BAKUP_DIR="/data/bakup/mysql"

##备份 数据库库名
cd /data/bakup/mysql
$DUMP KaTeX parse error: Expected group after '_' at position 20: …A_FILE 库名> 库名_̲(date +%y%m%d).sql
#数据库过大时压缩
tar -zcvf 库名_ ( d a t e + (date +%y%m%d).sql.tar 库名_ (date+(date +%y%m%d).sql
rm -rf ccdsjpt_$(date +%y%m%d).sql #删除已压缩完的文件
##删除一天前生成的历史文件
find $BAKUP_DIR/ -type f -mtime +1 -exec rm -rf {} ;
#echo “remove success”
/usr/bin/expect -c "

set timeout 30
#传输语句
spawn bash -c " scp -r -p /data/bakup/mysql root@要传输到的host地址:/back"
expect “password:”
send “你的密码\r”
expect eof"

不登陆数据库导入数据库(sql文件)(注:需要调整my.cnf中缓冲区大小防止导入时数据丢失 max_allowed_packet = 500M)
mysql -u 用户名 -p 数据库名 < xxx.sql
(每次修改配置后重启mysql服务 systemctl restart mysqld )

后续如果需要只备份一份或者几份可以用以下脚本超过n个文件删除最早的文件只保留最新几次备份
#!/bin/bash
#不同的项目有不同的路径
array[0]=‘project1’
array[1]=‘project2’
array[2]=‘com/project3’
array[3]=‘com/phase/project4’
array[4]=‘project5’
array[5]=‘com/stor/sproject6’
#项目的主干目录是相同的
RELEASE="/opt/devapps/nexus/sonatype-work/nexus/storage/release/"

for path in KaTeX parse error: Expected 'EOF', got '#' at position 17: …array[@]}; do #̲拼接文件路径 release…{RELEASE}${path}
cd $releasepath
#判断是否存在该目录
if [ $? -eq 0 ];
then
echo KaTeX parse error: Expected 'EOF', got '#' at position 39: …tains file:" #̲输出所有的内容 echo …num -gt 5 ];
then
#计算超过5个多少
num=expr $num - 5
clean=ls -tr | head -$num | xargs
echo “will delete file:”
echo KaTeX parse error: Expected 'EOF', got '#' at position 12: {clean} #̲-n1 每次处理1个文件 …num | xargs -i -n1 rm -rf {}
fi
fi
done

crontab -e 进入编辑页面
0 1 * * * sh /usr/local/xx.sh #每天凌晨一点执行xx.sh

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值