mysq批量导入脚本

admin2023-05-30linux126

备份文件目录结构

数据库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