高斯数据库 Shell 脚本:批量执行多个 SQL 文件
高斯数据库 Shell 脚本:批量执行多个 SQL 文件
优化后的高斯数据库 Shell 脚本
#!/bin/bash
# 数据库信息文件路径
DB_INFO_FILE="db_info.txt"
# 要执行的 SQL 文件列表
SQL_LIST_FILE="sql_files.txt"
# 检查数据库信息文件是否存在
if [[ ! -f "$DB_INFO_FILE" ]]; then
echo "数据库信息文件 $DB_INFO_FILE 不存在!"
exit 1
fi
# 检查 SQL 文件列表是否存在
if [[ ! -f "$SQL_LIST_FILE" ]]; then
echo "SQL 文件列表 $SQL_LIST_FILE 不存在!"
exit 1
fi
# 遍历数据库信息文件
while read -r HOST PORT USER PASSWORD; do
# 确保读取的字段完整
if [[ -z "$HOST" || -z "$PORT" || -z "$USER" || -z "$PASSWORD" ]]; then
echo "数据库信息文件格式不正确,跳过行:$HOST $PORT $USER"
continue
fi
echo "连接到数据库服务器 $HOST:$PORT..."
# 遍历 SQL 文件列表
while read -r SQL_FILE; do
# 检查每个 SQL 文件是否存在
if [[ ! -f "$SQL_FILE" ]]; then
echo "SQL 文件 $SQL_FILE 不存在,跳过。"
continue
fi
echo "执行 SQL 文件 $SQL_FILE..."
# 构造 zsql 命令
CONNECTION_STRING="${USER}\\${PASSWORD}@${HOST}:${PORT}"
zsql "$CONNECTION_STRING" -a -f "$SQL_FILE"
# 检查执行结果
if [[ $? -eq 0 ]]; then
echo "SQL 文件 $SQL_FILE 已成功执行到 $HOST:$PORT。"
else
echo "SQL 文件 $SQL_FILE 执行到 $HOST:$PORT 失败!"
fi
echo "--------------------------------------"
done < "$SQL_LIST_FILE"
done < "$DB_INFO_FILE"
数据库信息文件 (db_info.txt
)
此文件包含数据库服务器信息,每行一个实例:
192.168.1.100 5432 myuser mypassword
192.168.1.101 5432 myuser mypassword
192.168.1.102 5432 myuser mypassword
每列表示:
- 数据库主机名或 IP 地址
- 数据库端口号
- 用户名
- 密码
SQL 文件列表 (sql_files.txt
)
此文件包含需要执行的 SQL 文件路径,每行一个文件:
create_table.sql
insert_data.sql
update_schema.sql
示例 SQL 文件
create_table.sql
CREATE TABLE IF NOT EXISTS example_table (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
insert_data.sql
INSERT INTO example_table (name) VALUES ('Alice');
INSERT INTO example_table (name) VALUES ('Bob');
INSERT INTO example_table (name) VALUES ('Charlie');
update_schema.sql
ALTER TABLE example_table ADD COLUMN email VARCHAR(255);
UPDATE example_table SET email = CONCAT(name, '@example.com');
脚本执行方式
-
确保脚本有执行权限:
chmod +x create_table_gaussdb.sh
-
执行脚本:
./create_table_gaussdb.sh
脚本功能说明
- 读取
db_info.txt
文件:逐行读取数据库服务器的连接信息。 - 读取
sql_files.txt
文件:逐行读取 SQL 文件路径。 - 检查文件存在性:跳过不存在的 SQL 文件。
- 生成连接字符串:根据
USER\\PASSWORD@HOST:PORT
格式构造 GaussDB 的zsql
连接命令。 - 执行多个 SQL 文件:对每个 SQL 文件依次运行。
- 结果检查:通过
$?
检查zsql
命令的执行结果,并在终端打印成功或失败信息。
输出示例
成功执行时,终端会显示类似以下信息:
连接到数据库服务器 192.168.1.100:5432...
执行 SQL 文件 create_table.sql...
SQL 文件 create_table.sql 已成功执行到 192.168.1.100:5432。
--------------------------------------
执行 SQL 文件 insert_data.sql...
SQL 文件 insert_data.sql 已成功执行到 192.168.1.100:5432。
--------------------------------------
执行 SQL 文件 update_schema.sql...
SQL 文件 update_schema.sql 已成功执行到 192.168.1.100:5432。
--------------------------------------
连接到数据库服务器 192.168.1.101:5432...
...
改进点
- 支持从文件中批量读取多个 SQL 文件路径。
- 针对每个数据库逐个执行所有 SQL 文件。
- 灵活性增强,适用于复杂的批处理场景。