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

我们来学mysql -- “数据备份还原”sh脚本

数据备份&还原

  • 说明
  • 执行
  • db_backup_cover.sh脚本

说明

  • 环境准备:来源数据库(服务器A);目标数据库(服务器B)
  • dbInfo.sh脚本记录基本信息
    • 来源库、目标库的ip、port及执行路径

      # MySQL 客户端和 mysqldump 的路径
      MYSQL_CLIENT="/work/oracle/mysql-8.4.4/bin/mysql"
      MYSQL_DUMP="/work/oracle/mysql-8.4.4/bin/mysqldump"# 源数据库信息
      source_ip="17.2.10.166"
      source_port="3308"# 目标数据库信息
      target_ip="17.2.10.167"
      target_port="3308"
      
  • db_backup_cover.sh脚本步骤
    • 登录源库,需要手动输入账户,给出指令是否继续执行
    • 锁定原理库
    • dump导出指定库数据,忽略视图和日志表能
    • 登目标库,需要手动输入账户,给出指令是否继续执行
    • 如果数据量大,执行source会花费些时间

执行

在这里插入图片描述

db_backup_cover.sh脚本

```
#!/bin/bash# 备份文件名
current_date=$(date +%F)
system_ip=$(hostname -I | awk '{print $1}')  # 获取系统的主IP地址# 加载配置文件
if [ -f "dbInfo.sh" ]; thensource dbInfo.sh
elseecho "配置文件 config.sh 不存在!"exit 1
fi# 打印配置文件中的变量值
echo "--------------------------------------------------"
echo "配置文件变量:"
echo "MySQL 客户端路径: ${MYSQL_CLIENT}"
echo "mysqldump 路径: ${MYSQL_DUMP}"
echo "源数据库 IP: ${source_ip}"
echo "源数据库端口: ${source_port}"
echo "目标数据库 IP: ${target_ip}"
echo "目标数据库端口: ${target_port}"
echo "--------------------------------------------------"# 函数:等待用户确认
wait_for_confirmation() {read -p "请输入 yes 继续或 no 取消: " confirmif [ "$confirm" != "yes" ]; thenecho "操作已取消。"unlock_tablesexit 1fi
}# 函数:解锁数据库
unlock_tables() {echo "正在解锁数据库..."${MYSQL_CLIENT} -h "${source_ip}" -P "${source_port}" -u "${source_user}" -p"${source_password}" -e "UNLOCK TABLES;"if [ $? -ne 0 ]; thenecho "解锁数据库失败!"elseecho "数据库已解锁。"fi
}# 输入源数据库用户名和密码
read -p "请输入源数据库用户名: " source_user
read -s -p "请输入源数据库密码: " source_password
echo# 1. 锁定数据库
echo "准备执行 FLUSH TABLES WITH READ LOCK 锁定数据库..."
wait_for_confirmation${MYSQL_CLIENT} -h "${source_ip}" -P "${source_port}" -u "${source_user}" -p"${source_password}" -e "FLUSH TABLES WITH READ LOCK;"
if [ $? -ne 0 ]; thenecho "锁定数据库失败!"exit 1
fi
echo "数据库已成功锁定。"# 2. 备份Dev数据表及数据
echo "准备开始备份Dev数据..."
wait_for_confirmationbackup_file="/home/sie-srmdb-${source_port}-${system_ip}-${current_date}.sql"${MYSQL_DUMP} -h "${source_ip}" -P "${source_port}" -u "${source_user}" -p"${source_password}" \
--single-transaction \
--quick \
--add-drop-table \
--set-gtid-purged=OFF \
--compression-algorithms=zlib \
--ignore-table=db-dev.operate_logs \
--ignore-table=db-dev.test_view \
--databases db-dev > "${backup_file}"# 检查备份是否成功
if [ $? -ne 0 ]; thenecho "备份Dev数据失败!"unlock_tablesexit 1
fi
echo "备份Dev数据完成,文件已保存到: ${backup_file}"# 此时不解锁数据库,以便建立复制关系
echo "数据库保持锁定状态,以便建立复制关系。"# 准备目标数据库信息
echo "备份成功,准备登录目标数据库进行数据覆盖。"
read -p "请输入目标数据库用户名: " target_user
read -s -p "请输入目标数据库密码: " target_password
echo
read -p "执行前请再次确认,输入 yes 继续: " confirm
if [ "$confirm" != "yes" ]; thenecho "操作已取消。"unlock_tablesexit 1
fi# 登录目标数据库并切换数据库
echo "准备登录目标数据库并切换数据库..."
wait_for_confirmation# 登录目标数据库并切换数据库
# 在  << EOF 和 EOF  之间的内容将作为 mysql 客户端的输入,即要执行的 SQL 命令
read -p "请输入要切换的数据库名: " target_db
${MYSQL_CLIENT} -h "$target_ip" -P "$target_port" -u "$target_user" -p"$target_password" << EOF
USE $target_db;
SOURCE $backup_file;
EOFif [ $? -ne 0 ]; thenecho "切换数据库或执行 source 命令失败!"unlock_tablesexit 1
fi
echo "数据库切换成功且备份数据已导入到目标数据库。"echo "操作完成!数据库保持锁定状态,记得在建立好复制关系后手动解锁。"```
http://www.lryc.cn/news/2394588.html

相关文章:

  • mkcert实现本地https
  • 【排序算法】快速排序详解--附详细流程代码
  • Kerberos面试内容整理-会话密钥的协商与使用
  • 解决各个系统报错TDengine:no taos in java.library.path问题
  • java helloWord java程序运行机制 用idea创建一个java项目 标识符 关键字 数据类型 字节
  • LVS-NAT 负载均衡群集
  • 免费文本转语音工具体验:祈风TTS使用
  • ipv6与p2p的关系
  • JS和TS的区别
  • Python实现P-PSO优化算法优化BP神经网络分类模型项目实战
  • Linux --进度条小程序更新
  • JVM——回顾:JVM的起源、特性与系统构成
  • 实现MPC钱包
  • 每日算法刷题Day19 5.31:leetcode二分答案3道题,用时1h
  • 【线上故障排查】缓存热点Key导致Redis性能下降的排查与优化
  • 关于镜像如何装进虚拟机
  • CPU特权级别:硬件与软件协同构建系统安全的基石
  • 智慧体育馆数字孪生,场馆管理智能化
  • 回归算法模型之线性回归
  • 【深度学习】10. 深度推理(含链式法则详解)RNN, LSTM, GRU,VQA
  • 【Java】在 Spring Boot 中连接 MySQL 数据库
  • 影响服务器稳定性的因素都有什么?
  • 【Qt】Bug:findChildren找不到控件
  • GitHub 趋势日报 (2025年05月30日)
  • 【linux】linux进程概念(四)(环境变量)超详细版
  • Qt程序添加调试输出窗口:CONFIG += console
  • 从零开始的二三维CAD|CAE软件: 解决VTK,DICOM体素化-失效问题.
  • android协程异步编程常用方法
  • 【计算机网络】应用层协议Http——构建Http服务服务器
  • 【求A类B类月】2022-2-9