当前位置: 首页 > news >正文

用shell脚本,批量备份MySQL中所有数据库,并批量还原

1,环境介绍

生产环境通常只有一个数据库,但是其他环境,测试可能不止一个数据库。需要换数据库时,就需要一个一个的备份,一两个还好,多的话就有点繁琐。

如果说直接备份整个数据库,可能将原来的系统数据库也备份过去了,而用不需要原来的系统数据库(‘information_schema’, ‘mysql’, ‘performance_schema’, ‘sys’),这是用脚本就方便多了。

2,批量备份数据库脚本

#!/bin/bash# MySQL 连接配置
USER="root"
PASSWORD="qwe123456"
HOST="192.168.200.101"
#备份路径
OUTPUT_DIR="/home/ubuntu/backup"# 获取非系统数据库的列表
DATABASES=$(mysql -u $USER -p$PASSWORD -h $HOST -e "SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');" -s --skip-column-names)# 备份每个数据库
for DB in $DATABASES; doecho "Backing up database: $DB"mysqldump -u $USER -p$PASSWORD -h $HOST --set-gtid-purged=OFF --databases $DB > "$OUTPUT_DIR/$DB.sql"
doneecho "Backup completed!

上面备份命令,按需求添加参数,如这里用的–set-gtid-purged=OFF 不需要原来的GTID(全局事务标识符),我这里如果不加这个参数,还原报错。

ERROR 3546 (HY000) at line 24: @@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED

所以加了–set-gtid-purged=OFF参数就行了。

mysqldump -u $USER -p$PASSWORD -h $HOST --set-gtid-purged=OFF --databases

3,还原数据库脚本

还原数据库,第一步,还是需要在新收据开手动创建数据库。

CREATE DATABASE your_database_name;

还原数据库脚本

#!/bin/bash# MySQL 连接配置
USER="your_username"
PASSWORD="your_password"
HOST="localhost"
#备份sql的文件路径
INPUT_DIR="/path/to/backup/"# 遍历备份目录中的所有 .sql 文件并导入
for FILE in $INPUT_DIR/*.sql; doDB_NAME=$(basename "$FILE" .sql)echo "Restoring database: $DB_NAME from $FILE"mysql -u $USER -p$PASSWORD -h $HOST $DB_NAME < "$FILE"
doneecho "Restoration completed!"

以上还原命令,也可以根据实际情况来修改参数

mysql -u $USER -p$PASSWORD -h $HOST $DB_NAME

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 常用的运维工具:文件传输工具详解(SCP, SFTP)
  • GitLab CI_CD 从入门到实战笔记
  • 预训练发展
  • Python 中错误 CSV.Error: Line Contains Null Byte
  • Flink+Spark相关记录
  • RepLKNet架构详解
  • Tensorflow 兼容性测试-opencloudos
  • java中init()函数(JAVA基础)
  • Node.js的学习2——内置模块(一)
  • 【Vue】- Vue应用
  • Java重修笔记 第五十七天 坦克大战(七)多线程基础 - 编程练习
  • Sitecore 定时任务使用介绍
  • udp聊天室
  • 深度学习的关键数据结构——张量解释
  • 【ArcGIS】栅格计算器原理及案例介绍
  • ----------
  • 【Linux系统编程】快速查找errno错误码信息
  • 4个实用的微服务测试策略
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Android Studio:GIT提交项目到远程仓库
  • interface和setter,getter
  • JavaWeb(学习笔记二)
  • Python学习之路16-使用API
  • Web标准制定过程
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 使用 Docker 部署 Spring Boot项目
  • 使用docker-compose进行多节点部署
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 项目实战-Api的解决方案
  • 因为阿里,他们成了“杭漂”
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #Linux(make工具和makefile文件以及makefile语法)
  • $forceUpdate()函数
  • (19)夹钳(用于送货)
  • (7)svelte 教程: Props(属性)
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (过滤器)Filter和(监听器)listener
  • (计算机网络)物理层
  • (六)Flink 窗口计算
  • (面试必看!)锁策略
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (译) 函数式 JS #1:简介
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .Net8 Blazor 尝鲜
  • .net反编译的九款神器
  • .NET建议使用的大小写命名原则
  • .net中生成excel后调整宽度