新建目录
mkdir -p /data/mysqlbal/data mkdir -p /data/mysqlbal/scripts mkdir -p /data/mysqlbal/logs
创建备份脚本
cd /data/mysqlbak/scripts vi backup.sh #!/bin/bash #备份目录 BACKUP_ROOT=/data/mysqlbak BACKUP_FILEDIR=$BACKUP_ROOT/data #当前日期 DATE=$(date +%Y%m%d) ######备份###### #查询所有数据库 #-uroot -p123456表示使用root账号执行命令,且root账号的密码为:123456 DATABASES=$(mysql -uroot -p123456 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql") #循环数据库进行备份 for db in $DATABASES do echo echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN---------- mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE---------- echo done echo "done"
设置脚本的执行权限
chmod 777 backup.sh
将备份操作加入到定时任务(每天凌晨2点定时执行)
crontab -e 00 2 * * * /data/mysqlbak/scripts/backup.sh > data/mysqlbak/logs/backup.log 2>&1
创建删除脚本(定时删除7天前的备份数据)
vi backup_clean.sh #!/bin/bash echo ----------CLEAN BEGIN---------- find /data/mysqlbak/data -mtime +7 -name "*.gz" -exec rm -rf {} ; echo ----------CLEAN COMPLETE----------
设置脚本的执行权限
chmod 777 backup_clean.sh
将删除操作加入到定时任务(每天凌晨1点定时执行)
00 1 * * * /data/mysqlbak/scripts/backup_clean.sh > /data/mysqlbak/logs/backup_full_clean.log 2>&1
查看定时任务
crontab -l
如果需要备份到另外一台机器,可以备份完scp到另外一台机器
首先服务器需要安装export,yum安装:
yum install expect
或者源码安装,参考
https://www.cnblogs.com/operationhome/p/9154055.html
脚本修改:
#!/bin/bash #备份目录 BACKUP_ROOT=/data/mysqlbak BACKUP_FILEDIR=$BACKUP_ROOT/data #当前日期 DATE=$(date +%Y%m%d) ######备份###### #查询所有数据库 #-uroot -p123456表示使用root账号执行命令,且root账号的密码为:123456 DATABASES=$(mysql -uroot -p123456 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql") #循环数据库进行备份 for db in $DATABASES do echo echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN---------- mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE---------- echo ----------scp 226 begin---------- expect -c " spawn scp -r /data/mysqlbak/data/${db}_$DATE.sql.gz root@xxx.xxx.xxx.226:/data/mysqlbak/data225/ expect { "*assword" {set timeout 300; send "此处是scp的密码 "; exp_continue;} "yes/no" {send "yes ";} } expect eof" echo ----------scp 226 end---------- echo done echo "done"