mysql数据库还原与备份
一、Liunx服务器下数据库定时备份
1、编写mysql在docker容器中备份的shell脚本:
指定备份哪些库(推荐):
#!/bin/bash echo "开始备份" # 设置容器名称【需修改】 CONTAINER_NAME="mysql" DATE=$(date +%Y%m%d_%H%M%S) echo "备份时间"+$DATE # MySQL服务 地址及端口【需修改】 MYSQL_HOST="127.0.0.1" MYSQL_PORT=3306 # MySQL 用户和密码【需修改】 MYSQL_USER="root" MYSQL_PASSWORD="Bridge0!" # 备份文件保存路径 BACKUP_DIR="/home/backup" NEW_FOLDER="$BACKUP_DIR/backup_$DATE" # 数据库名称【需修改】 DBNAME=("identity" "erpdb" "wmsdb") # 是否删除过期数据 expire_backup_delete="ON" # 设置过期时间 expire_days=7 # 备份文件名称 BACKUP_FILENAME="mysql_backup_$(date +%Y%m%d%H%M%S).sql" GZIP_FILENAME="mysql_backup_$(date +%Y%m%d%H%M%S).tar.gz" backup_time=`date +%Y%m%d%H%M` mkdir -p "$NEW_FOLDER" # 执行备份 for DB in "${DBNAME[@]}"; do docker exec $CONTAINER_NAME mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD --host=$MYSQL_HOST -P $MYSQL_PORT $DB> $NEW_FOLDER/$DB$BACKUP_FILENAME done # 压缩sql文件 tar -czvf $BACKUP_DIR/$GZIP_FILENAME $NEW_FOLDER # 删除sql文件,尽量设置文件的格式,以免删除所有文件 rm -rf $NEW_FOLDER/*.sql # 删除过期数据 if [ "$expire_backup_delete" == "ON" -a "$BACKUP_DIR" != "" ];then find $BACKUP_DIR -name "*.gz" -type f -mtime +$expire_days -type f -delete echo "Expired backup data delete complete!" fi echo "备份完成"
全库备份:
#!/bin/bash
# 2020-11-15
#docker启动的mysql备份
mysql_user="root"
#数据库密码,注意自行修改
mysql_password="Abc234!"
mysql_host="192.168.1.43"
mysql_port="3306"
mysql_charset="utf8mb4"
#备份文件存放的目录,自己创建位置
mkdir -p /home/backup/mysql/
backup_location=/home/backup/mysql/
expire_backup_delete="ON"
#备份文件存放的天数
expire_days=7
backup_time=`date +%Y-%m-%d-%H-%M`
backup_dir=$backup_location
#指定忽略的表
#--ignore-table=tablename
#docker exec -i mysql mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B zszy-omsdb | gzip> $backup_dir/mysql_backup_dbname_$backup_time.sql.gz
echo -e "\033[32m ------------------- 开始全量备份数据库,请稍等。。。---------------- \033[0m"
docker exec -i mysql mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password --all-databases | gzip> $backup_dir/mysqldb_backup_$backup_time.sql.gz
echo -e "\033[32m -------------------成功备份数据至文件:$backup_dir/mysqldb_backup_$backup_time.sql.gz---------------- \033[0m"
if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then
`find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf`
echo -e "\033[32m ------------------- MySQL数据库已备份 $expire_days天前的备份已删除---------------- \033[0m" #green
fi
2、执行定时计划,每天凌晨1点执行备份
进入 vi /etc/crontab
加入如下的内容
# /home/shell/mysqlbackup.sh 为脚本的路径 00 01 * * * root /home/shell/mysql-backup.sh
修改后记得重启crond使改动生效
service crond restart
你也先测试一分钟执行一次的效果(注意这是测试每一分钟执行一次的,测试成功后要改成上面的每天凌晨执行一次)
*/1 * * * * root /home/shell/mysql-backup.sh
注意root前后只能一个空格
可以执行命令: tail -f /var/log/cron 查看效果定时任务的执行效果
3、数据库还原
1)、解压文件
gzip -d /home/backup/mysql/mysqldb_backup_2022-11-12-20-35.sql.gz
2)、拷贝文件到容器中
docker cp /home/backup/mysql/mysqldb_backup_2022-11-12-20-35.sql mysql:/var
3)、进入mysql容器中
docker exec -it mysql bin/bash
4)、执行如下命令后会要求输入mysql密码
mysql -uroot -p
5)、将拷贝到容器中的.sql文件用于还原mysql数据库
source /var/mysqldb_backup_2022-11-12-20-35.sql
二、Navicat数据库自动备份
1、新建配置文件:选中数据库备份---》右键---->新建备份-----》保存---》输入配置文件名称
此时,你在新建备份对话框中可以选择对象中的信息,去掉一些不想备份的表
2、点击自动运行----》新建批处理作业
3、在新建批处理作业页面:1备份---》2选择数据库----》3双击数据库配置文件---》点击保存后输入名称
4、1设置任务计划---》2触发器----》3新建
在新建触发器页面我们定时的是每天晚上23点备份
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具