在Linux环境下创建数据库是系统管理和开发工作中的常见任务,不同数据库管理系统(如MySQL、PostgreSQL、MongoDB等)的创建命令和操作流程各有差异,以下将详细介绍几种主流数据库在Linux中的创建方法、命令参数及注意事项,帮助用户根据实际需求选择合适的操作方式。

MySQL/MariaDB 数据库创建
MySQL和MariaDB(MySQL的分支)是广泛使用的关系型数据库管理系统,其创建数据库的命令基本一致,在操作前,需确保已安装MySQL/MariaDB服务并启动,通常使用mysql客户端工具进行交互式操作。
基本创建命令
登录MySQL客户端后,使用CREATE DATABASE语句创建数据库,基本语法为:
CREATE DATABASE 数据库名 [参数];
创建名为test_db的数据库:
CREATE DATABASE test_db;
常用参数说明
CHARACTER SET:指定数据库字符集,如utf8mb4(支持emoji和特殊字符):CREATE DATABASE test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
COLLATE:指定字符集排序规则,utf8mb4_unicode_ci是不区分大小写的排序规则。IF NOT EXISTS:避免数据库已存在时报错:CREATE DATABASE IF NOT EXISTS test_db;
权限管理
创建数据库后,需为用户分配访问权限,为用户user1分配test_db的完全权限:

GRANT ALL PRIVILEGES ON test_db.* TO 'user1'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; -- 刷新权限使配置生效
非交互式创建
可通过命令行参数直接执行SQL语句,无需登录客户端:
mysql -u root -p -e "CREATE DATABASE test_db CHARACTER SET utf8mb4;"
执行后会提示输入root用户密码,完成后自动创建数据库。
PostgreSQL 数据库创建
PostgreSQL是功能强大的开源关系型数据库,其创建数据库的方式与MySQL略有不同,主要使用createdb命令或CREATE DATABASE SQL语句。
使用createdb命令
createdb是PostgreSQL提供的命令行工具,语法简单:

createdb [参数] 数据库名
创建test_db数据库:
createdb test_db
若需指定字符集(如UTF8):
createdb -E UTF8 test_db
使用psql客户端
登录PostgreSQL客户端(默认用户为postgres):
psql -U postgres
执行CREATE DATABASE语句:
CREATE DATABASE test_db WITH ENCODING 'UTF8';
WITH ENCODING:指定字符集,默认为SQL_ASCII,推荐使用UTF8。WITH OWNER:指定数据库所有者,如WITH OWNER postgres。TEMPLATE:指定模板数据库,默认为template1。
权限与角色
PostgreSQL通过角色管理权限,创建数据库时可指定所有者:
CREATE ROLE user1 WITH LOGIN PASSWORD 'password'; CREATE DATABASE test_db WITH OWNER user1;
非交互式创建
通过psql的-c参数执行SQL:
psql -U postgres -c "CREATE DATABASE test_db WITH ENCODING 'UTF8';"
MongoDB 数据库创建
MongoDB是流行的NoSQL文档数据库,其“数据库”的创建与数据插入操作结合,无需显式执行创建命令。
自动创建机制
在MongoDB中,当首次插入数据时,会自动创建对应的数据库,通过mongo客户端执行:
use test_db // 切换到test_db数据库,若不存在则创建
db.users.insert({name: "Alice", age: 25}) // 插入数据时自动创建数据库和集合
use命令:切换到指定数据库,若数据库不存在,则在插入数据时创建。- 无数据时:仅执行
use test_db不会创建数据库,直到插入第一条数据。
手动创建(可选)
可通过db.createDatabase()方法手动创建,但实际与自动创建效果相同:
use test_db db.createDatabase()
参数配置
创建数据库时可设置参数,如指定存储引擎(默认为wiredTiger):
use test_db
db.createCollection("users", {storageEngine: {wiredTiger: {configString: "cache_size=1GB"}}})
命令行创建
通过mongosh的--eval参数执行脚本:
mongosh --eval "use test_db; db.users.insert({name: 'Bob', age: 30})"
SQLite 数据库创建
SQLite是轻量级嵌入式数据库,无需独立服务,直接通过命令行工具创建数据库文件。
基本创建
使用sqlite3命令并指定数据库文件名(若文件不存在则自动创建):
sqlite3 test.db
执行后进入SQLite交互界面,可执行SQL语句操作数据库:
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);
退出后,当前目录下会生成test.db文件,即为SQLite数据库。
非交互式创建
通过-batch参数和命令行SQL直接创建表(需确保数据库文件已存在):
sqlite3 test.db -batch "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);"
查看数据库信息
在SQLite交互界面中,可使用以下命令查看数据库状态:
.databases -- 显示数据库列表 .tables -- 显示表列表 .schema users -- 查看users表结构
数据库创建对比与注意事项
不同数据库的创建方式和特点总结如下:
| 数据库类型 | 创建命令/语句 | 关键参数/特点 | 适用场景 |
|---|---|---|---|
| MySQL/MariaDB | CREATE DATABASE [数据库名] |
CHARACTER SET、COLLATE、IF NOT EXISTS |
Web应用、中小型企业系统 |
| PostgreSQL | createdb [数据库名]或CREATE DATABASE |
WITH ENCODING、OWNER、TEMPLATE |
复杂数据查询、数据分析 |
| MongoDB | use [数据库名]+插入数据 |
自动创建、无显式命令 | 文档存储、高并发场景 |
| SQLite | sqlite3 [文件名] |
嵌入式、单文件存储 | 移动应用、小型工具 |
注意事项:
- 字符集选择:建议统一使用
UTF8或utf8mb4,避免乱码问题。 - 权限最小化:遵循最小权限原则,为不同用户分配必要的数据库操作权限。
- 备份与恢复:创建数据库后,建议定期备份数据,如MySQL的
mysqldump工具:mysqldump -u root -p test_db > backup.sql
- 服务状态检查:创建前确保数据库服务已启动,
systemctl status mysqld # MySQL/MariaDB systemctl status postgresql # PostgreSQL systemctl status mongod # MongoDB
相关问答FAQs
Q1:创建MySQL数据库时提示“Access denied for user 'root'@'localhost'”,如何解决?
A:该错误通常是由于root用户权限不足或密码错误导致,可尝试以下方法:
- 确认root密码是否正确,使用
mysql -u root -p登录验证。 - 若忘记密码,可通过跳过权限表的方式重置密码(需停止MySQL服务,使用
--skip-grant-tables参数启动,然后修改mysql.user表中的root密码)。 - 检查root用户是否有
CREATE权限,若没有,可通过GRANT CREATE ON *.* TO 'root'@'localhost';授权。
Q2:PostgreSQL创建数据库时提示“could not connect to server”,如何排查?
A:该错误表明客户端无法连接到PostgreSQL服务,可能原因及解决方法:
- 服务未启动:执行
systemctl start postgresql启动服务,并设置为开机自启systemctl enable postgresql。 - 端口占用:PostgreSQL默认监听5432端口,使用
netstat -tuln | grep 5432检查端口是否被占用,若被占用需修改配置文件postgresql.conf中的端口号。 - 认证配置问题:检查
pg_hba.conf文件中的客户端认证方式,确保localhost的认证方式为trust或md5(如host all all 127.0.0.1/32 md5)。
