mysq批量导入脚本
备份文件目录结构
数据库1(文件夹)文件夹名称即为数据库名
表1(文件夹)文件夹名称即为表名
structure.sql(表结构)
data(数据文件夹)
*.sql(备份文件)
#!/bin/bash
# MySQL数据库登录信息
mysql_user="root"
mysql_password="cfea3389c8db098f"
mysql_host="localhost"
mysql_port=3306
# 备份文件夹所在目录
backup_dir="/home/back"
# 检查备份文件夹所在目录是否存在且非空
if [[ ! -d "${backup_dir}" ]]; then
echo "备份文件夹所在目录 ${backup_dir} 不存在。" >&2
exit 1
elif [[ -z "$(ls -A "${backup_dir}")" ]]; then
echo "备份文件夹所在目录 ${backup_dir} 是空的。" >&2
exit 1
fi
# 遍历备份文件夹
for backup_folder in "${backup_dir}"/*; do
# 定义 MySQL 数据库名称为备份文件夹名称
mysql_db_name="$(basename "${backup_folder}")"
# 检查备份文件夹是否存在且非空
if [[ ! -d "${backup_folder}" ]]; then
echo "备份文件夹 ${backup_folder} 不存在。" >&2
continue
elif [[ -z "$(ls -A "${backup_folder}")" ]]; then
echo "备份文件夹 ${backup_folder} 是空的。" >&2
continue
fi
# 测试 MySQL 连接
echo "测试 MySQL 连接..."
if ! mysql -u${mysql_user} -p${mysql_password} -h${mysql_host} -P${mysql_port} ${mysql_db_name} -e ";" ; then
echo "无法连接到 MySQL 数据库 ${mysql_db_name},正在创建数据库..."
if ! mysql -u${mysql_user} -p${mysql_password} -h${mysql_host} -P${mysql_port} -e "CREATE DATABASE ${mysql_db_name}" ; then
echo "无法创建数据库 ${mysql_db_name}。" >&2
continue
fi
fi
echo "MySQL 连接成功!"
# 导入表结构
echo "正在导入表结构..."
for file in "${backup_folder}"/*/*.sql; do
if [[ "${file}" == *"structure.sql" ]]; then # 使用结构文件
echo "导入文件 ${file} ..."
mysql -u${mysql_user} -p${mysql_password} -h${mysql_host} -P${mysql_port} ${mysql_db_name} < "${file}"
echo "导入完成!"
fi
done
echo "表结构导入完成!"
# 导入数据
echo "正在导入数据..."
for file in "${backup_folder}"/*/data/*.sql; do
if [[ "${file}" != *"structure.sql" ]]; then # 排除结构文件
echo "导入文件 ${file} ..."
if ! mysql -u${mysql_user} -p${mysql_password} -h${mysql_host} -P${mysql_port} ${mysql_db_name} < "${file}" ; then
echo "导入文件 ${file} 失败。" >&2
continue
fi
echo "导入完成!"
fi
done
echo "所有数据已导入成功!"
done