以下脚本,基本冷备份方式,对数据库进行备份与恢复:
冷备份脚本:
[root@localhost mysql_backup]# cat mysql_physical_backup.sh
#!/bin/bash
# 定义MySQL数据目录和备份目录
MYSQL_DATA_DIR="/var/lib/mysql"
BACKUP_DIR="/data_back"
# 检查MySQL服务是否正在运行
if pgrep -x "mysqld" > /dev/null
then
echo "MySQL服务正在运行,正在停止MySQL服务..."
systemctl stop mysqld.service # 使用systemctl停止MySQL服务
if [ $? -eq 0 ]; then
echo "MySQL服务已成功停止。"
else
echo "停止MySQL服务失败,请检查原因。"
exit 1
fi
else
echo "MySQL服务未运行。"
fi
# 创建备份目录(如果不存在)
if [ ! -d "$BACKUP_DIR" ]; then
mkdir $BACKUP_DIR -p
echo "备份目录 $BACKUP_DIR 已创建。"
fi
# 使用cp命令复制MySQL数据目录到备份目录
echo "正在复制MySQL数据目录到备份目录..."
cp -rp "$MYSQL_DATA_DIR"/* "$BACKUP_DIR"
if [ $? -eq 0 ]; then
echo "MySQL数据目录已成功复制到 $BACKUP_DIR"
else
echo "复制MySQL数据目录失败,请检查原因。"
exit 1
fi
echo "脚本执行完毕。"
冷恢复脚本:
[root@localhost mysql_restore]# cat mysql_physical_restore.sh
#!/bin/bash
# 检查MySQL服务是否在运行
if pgrep -x mysqld > /dev/null
then
echo "MySQL正在运行,正在停止MySQL服务..."
systemctl stop mysqld
if [ $? -eq 0 ]; then
echo "MySQL服务已成功停止。"
else
echo "MySQL服务停止失败。"
exit 1
fi
else
echo "MySQL未在运行。"
fi
# 检查/var/lib/mysql目录是否为空
if [ "$(ls -A /var/lib/mysql)" ]; then
echo "/var/lib/mysql目录不为空,正在删除目录下的所有文件..."
rm -rf /var/lib/mysql/*
if [ $? -eq 0 ]; then
echo "文件删除成功。"
else
echo "文件删除失败。"
exit 1
fi
else
echo "/var/lib/mysql目录为空。"
fi
# 将/data_back目录下的所有文件复制到/var/lib/mysql目录下
echo "正在将/data_back目录下的所有文件复制到/var/lib/mysql目录下..."
cp -rp /data_back/* /var/lib/mysql/
if [ $? -eq 0 ]; then
echo "文件复制成功。"
else
echo "文件复制失败。"
exit 1
fi
# 启动MySQL服务
echo "正在启动MySQL服务..."
systemctl start mysqld
if [ $? -eq 0 ]; then
echo "MySQL服务已成功启动。"
else
echo "MySQL服务启动失败。"
exit 1
fi
sleep 5
# 检查MySQL服务是否成功启动
if pgrep -x mysqld > /dev/null
then
echo "MySQL服务正在运行。"
else
echo "MySQL服务未成功启动。"
exit 1
fi


