三分钟带你玩转数据库备份

数据库备份

冷备份

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 root@172.26.0.168 "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 root@172.26.0.168 "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
posted @   kubernetes-hao  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示