本文目录导读:

我来介绍几种批量创建MySQL数据库的脚本方法:
Shell脚本方法
基本Shell脚本
#!/bin/bash
# MySQL连接参数
MYSQL_USER="root"
MYSQL_PASS="your_password"
MYSQL_HOST="localhost"
# 要创建的数据库列表
databases=(
"db_test1"
"db_test2"
"db_test3"
"db_development"
"db_production"
)
# 创建数据库
for db in "${databases[@]}"
do
mysql -u $MYSQL_USER -p$MYSQL_PASS -h $MYSQL_HOST -e "CREATE DATABASE IF NOT EXISTS $db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
if [ $? -eq 0 ]; then
echo "数据库 $db 创建成功"
else
echo "数据库 $db 创建失败"
fi
done
带参数的灵活脚本
#!/bin/bash
# 从文件读取数据库名
DB_LIST_FILE="databases.txt"
MYSQL_USER="root"
MYSQL_PASS="your_password"
# 创建数据库函数
create_database() {
local db_name=$1
mysql -u $MYSQL_USER -p$MYSQL_PASS -e "CREATE DATABASE IF NOT EXISTS \`$db_name\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
return $?
}
# 从文件读取数据库列表
if [ -f "$DB_LIST_FILE" ]; then
while IFS= read -r db_name; do
if [ ! -z "$db_name" ]; then
create_database "$db_name" && echo "创建成功: $db_name" || echo "创建失败: $db_name"
fi
done < "$DB_LIST_FILE"
else
echo "数据库列表文件不存在: $DB_LIST_FILE"
exit 1
fi
databases.txt 文件内容示例:
db_project1
db_project2
db_project3
db_test
db_staging
Python脚本方法
使用mysql-connector-python
#!/usr/bin/env python3
import mysql.connector
from mysql.connector import Error
# MySQL连接配置
config = {
'user': 'root',
'password': 'your_password',
'host': 'localhost'
}
# 要创建的数据库列表
databases = [
'db_app1',
'db_app2',
'db_app3',
'db_analytics',
'db_backup'
]
def create_databases():
try:
# 连接MySQL
connection = mysql.connector.connect(**config)
cursor = connection.cursor()
for db_name in databases:
try:
# 创建数据库
create_query = f"CREATE DATABASE IF NOT EXISTS `{db_name}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
cursor.execute(create_query)
print(f"数据库 {db_name} 创建成功")
except Error as e:
print(f"数据库 {db_name} 创建失败: {e}")
except Error as e:
print(f"MySQL连接失败: {e}")
finally:
if 'connection' in locals() and connection.is_connected():
cursor.close()
connection.close()
if __name__ == "__main__":
create_databases()
使用SQLAlchemy
from sqlalchemy import create_engine, text
from sqlalchemy.exc import SQLAlchemyError
# 数据库连接字符串
db_url = "mysql+mysqlconnector://root:your_password@localhost"
# 要创建的数据库
databases = ['db_test1', 'db_test2', 'db_test3']
def create_databases():
try:
# 创建引擎
engine = create_engine(db_url)
with engine.connect() as connection:
for db_name in databases:
try:
# 创建数据库
query = text(f"CREATE DATABASE IF NOT EXISTS `{db_name}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
connection.execute(query)
print(f"数据库 {db_name} 创建成功")
except SQLAlchemyError as e:
print(f"数据库 {db_name} 创建失败: {e}")
except SQLAlchemyError as e:
print(f"连接MySQL失败: {e}")
if __name__ == "__main__":
create_databases()
生成批量SQL脚本
#!/bin/bash
# 生成批量SQL文件
OUTPUT_FILE="create_databases.sql"
# 数据库列表
databases=(
"db_202401"
"db_202402"
"db_202403"
"db_202404"
)
# 写入SQL文件
echo "-- 批量创建数据库脚本" > $OUTPUT_FILE
echo "-- 生成时间: $(date)" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
for db in "${databases[@]}"
do
echo "CREATE DATABASE IF NOT EXISTS \`$db\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" >> $OUTPUT_FILE
done
echo "SQL脚本已生成: $OUTPUT_FILE"
echo "执行: mysql -u root -p < $OUTPUT_FILE"
批量创建带用户的数据库
#!/bin/bash
# 创建数据库和用户
create_db_with_user() {
local db_name=$1
local db_user=$2
local db_pass=$3
mysql -u root -p${MYSQL_PASS} <<EOF
CREATE DATABASE IF NOT EXISTS \`$db_name\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS '$db_user'@'localhost' IDENTIFIED BY '$db_pass';
GRANT ALL PRIVILEGES ON \`$db_name\`.* TO '$db_user'@'localhost';
FLUSH PRIVILEGES;
EOF
}
# 定义数据库、用户、密码对应关系
declare -A db_config=(
["app_db1"]="user1:pass1"
["app_db2"]="user2:pass2"
["app_db3"]="user3:pass3"
)
# 批量创建
for db in "${!db_config[@]}"; do
IFS=':' read -r user pass <<< "${db_config[$db]}"
create_db_with_user "$db" "$user" "$pass"
echo "数据库 $db 和用户 $user 创建完成"
done
使用配置文件批量导入
config.json
{
"mysql": {
"host": "localhost",
"user": "root",
"password": "your_password"
},
"databases": [
{"name": "db_test1", "charset": "utf8mb4", "collation": "utf8mb4_unicode_ci"},
{"name": "db_test2", "charset": "utf8mb4", "collation": "utf8mb4_unicode_ci"},
{"name": "db_test3", "charset": "latin1", "collation": "latin1_swedish_ci"}
]
}
#!/usr/bin/env python3
import json
import mysql.connector
# 读取配置文件
with open('config.json', 'r') as f:
config = json.load(f)
# 连接MySQL
connection = mysql.connector.connect(**config['mysql'])
cursor = connection.cursor()
# 批量创建数据库
for db in config['databases']:
query = f"CREATE DATABASE IF NOT EXISTS `{db['name']}` CHARACTER SET {db['charset']} COLLATE {db['collation']}"
cursor.execute(query)
print(f"数据库 {db['name']} 创建完成")
cursor.close()
connection.close()
使用建议
-
安全方面:
- 不要在脚本中硬编码密码,使用环境变量或配置文件
- 限制脚本执行权限(
chmod 700 script.sh) - 使用
IF NOT EXISTS避免重复创建错误
-
灵活扩展:
- 使用配置文件管理数据库列表
- 添加错误处理和日志记录
- 支持不同的字符集和排序规则
-
执行方式:
- 可以先测试运行(dry-run模式)
- 支持回滚操作
- 记录执行日志
选择哪种方法取决于你的具体需求和环境,Shell脚本适合简单的场景,Python脚本则有更好的错误处理和灵活性。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播