菜鸟科技网

linux 创建数据库命令

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

linux 创建数据库命令-图1
(图片来源网络,侵删)

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的完全权限:

linux 创建数据库命令-图2
(图片来源网络,侵删)
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提供的命令行工具,语法简单:

linux 创建数据库命令-图3
(图片来源网络,侵删)
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 SETCOLLATEIF NOT EXISTS Web应用、中小型企业系统
PostgreSQL createdb [数据库名]CREATE DATABASE WITH ENCODINGOWNERTEMPLATE 复杂数据查询、数据分析
MongoDB use [数据库名]+插入数据 自动创建、无显式命令 文档存储、高并发场景
SQLite sqlite3 [文件名] 嵌入式、单文件存储 移动应用、小型工具

注意事项:

  1. 字符集选择:建议统一使用UTF8utf8mb4,避免乱码问题。
  2. 权限最小化:遵循最小权限原则,为不同用户分配必要的数据库操作权限。
  3. 备份与恢复:创建数据库后,建议定期备份数据,如MySQL的mysqldump工具:
    mysqldump -u root -p test_db > backup.sql
  4. 服务状态检查:创建前确保数据库服务已启动,
    systemctl status mysqld  # MySQL/MariaDB
    systemctl status postgresql  # PostgreSQL
    systemctl status mongod  # MongoDB

相关问答FAQs

Q1:创建MySQL数据库时提示“Access denied for user 'root'@'localhost'”,如何解决?
A:该错误通常是由于root用户权限不足或密码错误导致,可尝试以下方法:

  1. 确认root密码是否正确,使用mysql -u root -p登录验证。
  2. 若忘记密码,可通过跳过权限表的方式重置密码(需停止MySQL服务,使用--skip-grant-tables参数启动,然后修改mysql.user表中的root密码)。
  3. 检查root用户是否有CREATE权限,若没有,可通过GRANT CREATE ON *.* TO 'root'@'localhost';授权。

Q2:PostgreSQL创建数据库时提示“could not connect to server”,如何排查?
A:该错误表明客户端无法连接到PostgreSQL服务,可能原因及解决方法:

  1. 服务未启动:执行systemctl start postgresql启动服务,并设置为开机自启systemctl enable postgresql
  2. 端口占用:PostgreSQL默认监听5432端口,使用netstat -tuln | grep 5432检查端口是否被占用,若被占用需修改配置文件postgresql.conf中的端口号。
  3. 认证配置问题:检查pg_hba.conf文件中的客户端认证方式,确保localhost的认证方式为trustmd5(如host all all 127.0.0.1/32 md5)。
分享:
扫描分享到社交APP
上一篇
下一篇