# 安装expect命令
yum install expect -y

# 创建脚本
vim /kdb/databack/data_backup.sh

# 输入以下内容
#!/bin/bash

# 数据库备份脚本

# 备份目录
BACKUP_DIR="/kdb/databack"

# 确保备份目录存在
mkdir -p $BACKUP_DIR

# 生成时间戳,格式:年月日时分秒
TIMESTAMP=$(date +"%Y%m%d%H%M%S")

# 备份文件名
BACKUP_FILE="${BACKUP_DIR}/x_crm_${TIMESTAMP}.sql"

# 数据库连接信息
DB_HOST="127.0.0.1"
DB_PORT="54321"
DB_USER="system"
DB_NAME="x_crm"

# 备份命令(不含重定向)
BACKUP_CMD="/kdb/business/ES/V9/ClientTools/bin/sys_dump -h ${DB_HOST} -p ${DB_PORT} -U ${DB_USER} -d ${DB_NAME}"

# 执行备份
echo "开始备份数据库 ${DB_NAME}..."
echo "执行命令: ${BACKUP_CMD} > ${BACKUP_FILE}"

# 使用expect处理密码输入和重定向
/usr/bin/expect <<EOF
set time 10
spawn bash -c "${BACKUP_CMD} > ${BACKUP_FILE}"
expect {
    "Password:" { send "12345678\r" }
}
expect eof
EOF

# 检查备份是否成功
if [ -f "${BACKUP_FILE}" ]; then
    echo "备份成功!备份文件保存至: ${BACKUP_FILE}"
    echo "备份文件大小: $(du -h ${BACKUP_FILE} | awk '{print $1}')"
    
    # 压缩备份文件
    echo "开始压缩备份文件..."
    gzip "${BACKUP_FILE}"
    
    # 检查压缩是否成功
    COMPRESSED_FILE="${BACKUP_FILE}.gz"
    if [ -f "${COMPRESSED_FILE}" ]; then
        echo "压缩成功!压缩文件保存至: ${COMPRESSED_FILE}"
        echo "压缩文件大小: $(du -h ${COMPRESSED_FILE} | awk '{print $1}')"
        # 删除原备份文件(可选)
         rm -f "${BACKUP_FILE}"
    else
        echo "压缩失败!请检查错误信息。"
    fi
else
    echo "备份失败!请检查错误信息。"
    exit 1
fi

echo "备份完成。"


# 赋权
chmod +x /kdb/databack/data_backup.sh

# 设置定时任务
crontab -e
# 输入以下内容
# 每三天凌晨0点执行数据库备份脚本
0 0 */3 * * /kdb/databack/backup_db.sh >> /kdb/databack/backup_log.txt 2>&1

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐