数据库备份
冷备份
rsync -a /var/lib/mysql/ 10.0.0.2:/data/mysql
热备份(备份单独数据库)
mysqldump -umysql -p123456 -B database > /backup/backup-`date +%F-%H-%M-%S`.sql
备份所有数据库(压缩)
mysqldumnp -umysql -p123456 -A | gzip > /backup/backup.sql
排除系统数据库不备份
for db in `mysql -uroot -p123456 -e 'show databases' 2> /dev/null |grep -Ewv 'information_schema|performance_schema|Warning'`;do mysqldump -uroot -p123456 -B $db > /backup/$db-`date +%F-%H-%M-%S`.sql 2>/dev/null ;done
增强版(定时任务)(排除一些系统数据库不备份)
#1、脚本
#!/bin/bash
#backup-mysql
for db in `mysql -uroot -p123456 -e 'show databases' 2> /dev/null |grep -Ewv 'information_schema|performance_schema|Warning'`;do mysqldump -uroot -p123456 -B $db > /backup/${db}-`date +%F-%H-%M-%S`.sql 2>/dev/null ;done
#2、定时任务(凌晨两点半备份)
crontab -e
PATH=/apps/nginx/sbin:/usr/local/mysql/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
30 2 * * * /backup/mysql-backup.sh
还原
mysql -uroot -p123456 database_name < backup.sql
企业级MySQL数据库备份
1、定时任务
30 2 * * * /bin/bash /data/script/mysql_backup.sh >/dev/null 2>&1
2、备份脚本
#!/bin/bash
MYSQL_USER="root"
MYSQL_PASSWORD="ABCabcdef100"
MYSQL_DATABASE="bk_db1"
BACKUP_DIR="/data/dbback/"
KEEP_BACKUPS_FOR=2
LAN_IP="172.24.255.100"
source /data/install/utils.fc
if [ ! -d "$BACKUP_DIR" ]; then
mkdir -p "$BACKUP_DIR"
fi
BACKUP_FILENAME="${MYSQL_DATABSE}-$(date +"%F").sql.gz"
mysqldump -u "${MYSQL_USER}" -p"${MYSQL_PASSWORD}" -h "$LAN_IP" --single-transaction -q --no-autocommit -R --triggers --default-character-set=utf8 --events --databases "${MYSQL_DATABSE}" | gzip > "${BACKUP_DIR}/${BACKUP_FILENAME}"
find "${BACKUP_DIR}" -name '*.gz' -mtime +$KEEP_BACKUPS_FOR -exec rm {} \;
注意:生产环境按照个人环境和需求备份、脚本只供参考
MySQL备份天表的数据
1、因为做了分库分表:每天的表需要单独备份.
2、为什么远程调用webhook ? 因为数据库机器是内网、调不了。
3、数据库机器不保留备份数据、SCP拷贝到远程机器。
#!/bin/bash
# 设置生产和测试环境的 webhook_url
webhook_url_prod="AAA"
webhook_url_test="BBB"
# 选择要使用的 webhook_url
webhook_url=$webhook_url_prod # 切换到测试环境,如果需要切换到生产环境,修改为 $webhook_url_prod
# 切换到备份目录
cd /ipudb/dbbak/file-xl-port/
# 当前日期到秒
DATE=$(date +'%Y%m%d_%H%M%S')
# 前一天的日期
DATES=$(date -d "-1 days" +'%Y%m%d')
# 记录备份开始时间到日志文件
echo " cdr_call_item_${DATES}天表 begin backup db 开始时间:`date +'%Y%m%d_%H%M%S'`" >> /ipudb/dbbak/file-xl-port/xl-port_backup.log
# 备份数据库表
mysqldump --socket=/var/run/mysqld/mysqld.sock -uroot -pmysql123456 xl-port cdr_call_item_$DATES --default-character-set=utf8mb4 | gzip > /ipudb/dbbak/file-xl-port/cdr_call_item_$DATES.sql.gz
# 记录备份结束时间到日志文件
echo " cdr_call_item_${DATES}天表 end backup db 结束时间:`date +'%Y%m%d_%H%M%S'`" >> /ipudb/dbbak/file-xl-port/xl-port_backup.log
# 检查上一步操作的退出状态
if [ $? != 0 ]; then
echo "failed" >> backup.log
# 如果备份失败,发送失败消息到微信
ssh -p 20000 [email protected] "curl -H 'Content-Type: application/json' -d '{\"msgtype\": \"text\", \"text\": {\"content\": \"cdr_call_item_${DATES}表备份成功\"}}' $webhook_url"
else
echo "success" >> backup.log
# 如果备份成功,发送成功消息到微信
ssh -p 20000 [email protected] "curl -H 'Content-Type: application/json' -d '{\"msgtype\": \"text\", \"text\": {\"content\": \"cdr_call_item_${DATES}表备份成功\"}}' $webhook_url"
scp -P 20000 cdr_call_item_$DATES.sql.gz 172.16.17.150:/records/data/mysql/prod_bak/ && rm -f cdr_call_item_$DATES.sql.gz
fi
标签:-%,备份,三分钟,webhook,玩转,sql,mysql,backup
From: https://www.cnblogs.com/guohao996/p/18471407