backup_database.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #!/bin/bash
  2. # 数据库备份脚本
  3. # 备份所有 xdz 相关数据库
  4. # 数据库连接配置
  5. DB_HOST="127.0.0.1"
  6. DB_PORT="3306"
  7. DB_USER="root"
  8. DB_PASSWORD="Xiuxiu@087"
  9. # 要备份的数据库列表
  10. DATABASES=("xdz_user" "xdz_business" "xdz_vehicle" "xdz_message")
  11. # 创建备份目录
  12. BACKUP_BASE_DIR="$(cd "$(dirname "$0")" && pwd)/backups"
  13. TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
  14. BACKUP_DIR="${BACKUP_BASE_DIR}/${TIMESTAMP}"
  15. mkdir -p "${BACKUP_DIR}"
  16. echo "=========================================="
  17. echo "开始数据库全量备份"
  18. echo "=========================================="
  19. echo "备份时间: $(date '+%Y-%m-%d %H:%M:%S')"
  20. echo "备份目录: ${BACKUP_DIR}"
  21. echo ""
  22. # 备份每个数据库
  23. for DB_NAME in "${DATABASES[@]}"; do
  24. echo "正在备份数据库: ${DB_NAME}..."
  25. BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}.sql"
  26. # 使用 mysqldump 备份数据库
  27. mysqldump -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASSWORD}" \
  28. --single-transaction \
  29. --routines \
  30. --triggers \
  31. --events \
  32. --default-character-set=utf8mb4 \
  33. "${DB_NAME}" > "${BACKUP_FILE}" 2>&1
  34. if [ $? -eq 0 ]; then
  35. FILE_SIZE=$(du -h "${BACKUP_FILE}" | cut -f1)
  36. echo "✓ 备份成功: ${DB_NAME} (${FILE_SIZE})"
  37. else
  38. echo "✗ 备份失败: ${DB_NAME}"
  39. echo "错误信息已保存到备份文件"
  40. fi
  41. echo ""
  42. done
  43. # 生成备份说明文件
  44. cat > "${BACKUP_DIR}/备份说明.txt" << EOF
  45. 数据库备份说明
  46. ================
  47. 备份时间: $(date '+%Y-%m-%d %H:%M:%S')
  48. 备份目录: backups/${TIMESTAMP}
  49. 备份的数据库:
  50. EOF
  51. for DB_NAME in "${DATABASES[@]}"; do
  52. BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}.sql"
  53. if [ -f "${BACKUP_FILE}" ]; then
  54. FILE_SIZE=$(du -h "${BACKUP_FILE}" | cut -f1)
  55. echo "1. ${DB_NAME} (${FILE_SIZE})" >> "${BACKUP_DIR}/备份说明.txt"
  56. fi
  57. done
  58. cat >> "${BACKUP_DIR}/备份说明.txt" << EOF
  59. 备份说明:
  60. - 包含所有表(包括日志表的结构和数据)
  61. - 使用 --single-transaction 保证数据一致性
  62. - 包含存储过程和函数(--routines)
  63. - 包含触发器(--triggers)
  64. - 包含事件(--events)
  65. 备份参数:
  66. - --single-transaction: 保证数据一致性
  67. - --routines: 包含存储过程和函数
  68. - --triggers: 包含触发器
  69. - --events: 包含事件
  70. 恢复方法:
  71. mysql -h${DB_HOST} -u${DB_USER} -p'密码' 数据库名 < 备份文件.sql
  72. 例如:
  73. mysql -h${DB_HOST} -u${DB_USER} -p'${DB_PASSWORD}' xdz_user < xdz_user.sql
  74. mysql -h${DB_HOST} -u${DB_USER} -p'${DB_PASSWORD}' xdz_business < xdz_business.sql
  75. mysql -h${DB_HOST} -u${DB_USER} -p'${DB_PASSWORD}' xdz_vehicle < xdz_vehicle.sql
  76. mysql -h${DB_HOST} -u${DB_USER} -p'${DB_PASSWORD}' xdz_message < xdz_message.sql
  77. 注意: 所有表都已备份,包括日志表的结构和数据,确保恢复后应用程序能正常运行。
  78. EOF
  79. echo "=========================================="
  80. echo "备份完成!"
  81. echo "备份目录: ${BACKUP_DIR}"
  82. echo "=========================================="