在命令行中操作数据库通常涉及使用数据库管理系统(DBMS)自带的命令行工具(如 MySQL 的 mysql
、PostgreSQL 的 psql
或 SQLite 的 sqlite3
),以下是详细的操作指南,涵盖连接数据库、执行 SQL 命令、导入数据及安全注意事项。
MySQL / MariaDB
- 命令格式:
mysql -u [用户名] -p -h [主机地址] -P [端口] [数据库名]
- 示例:
mysql -u root -p -h localhost -P 3306 mydatabase
-u root
:以 root 用户登录。-p
:提示输入密码(输入时密码不可见)。-h localhost
:连接本地服务器(远程服务器用 IP 或域名)。-P 3306
:指定端口(默认 3306 可省略)。mydatabase
:直接进入目标数据库(可选)。
PostgreSQL
- 命令格式:
psql -U [用户名] -h [主机地址] -p [端口] -d [数据库名]
- 示例:
psql -U postgres -h 127.0.0.1 -p 5432 -d mydb
SQLite
- 命令格式:
sqlite3 [数据库文件路径]
- 示例:
sqlite3 /path/to/mydatabase.db
执行 SQL 命令
连接成功后,直接在命令行输入 SQL 语句:
-- 创建表 CREATE TABLE users (id INT, name VARCHAR(50)); -- 插入数据 INSERT INTO users VALUES (1, 'Alice'); -- 查询数据 SELECT * FROM users; -- 退出命令行工具 \q -- PostgreSQL 和 MySQL 8.0+ exit -- MySQL 或 SQLite
导入外部数据到数据库
从 SQL 文件导入
- MySQL:
mysql -u root -p mydatabase < /path/to/data.sql
- PostgreSQL:
psql -U postgres -d mydb -f /path/to/data.sql
导入 CSV 文件
- MySQL:
LOAD DATA INFILE '/path/to/data.csv' INTO TABLE users FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
- PostgreSQL:
COPY users FROM '/path/to/data.csv' DELIMITER ',' CSV HEADER;
安全注意事项
-
密码安全:
- 避免在命令中直接写密码(如
-p123456
),用-p
替代以交互式输入。 - 使用配置文件(如
~/.my.cnf
)存储凭据(权限设为600
)。
- 避免在命令中直接写密码(如
-
权限最小化:
- 为命令行操作创建专用用户,仅授予必要权限:
GRANT SELECT, INSERT ON mydatabase.* TO 'cli_user'@'localhost';
- 为命令行操作创建专用用户,仅授予必要权限:
-
防 SQL 注入:
避免在脚本中拼接用户输入,优先使用参数化查询。
常见问题解决
- 连接拒绝:
- 检查数据库是否运行:
systemctl status mysql
。 - 确认防火墙开放端口(如 3306、5432)。
- 检查数据库是否运行:
- 命令未找到:
- 安装数据库客户端:
- MySQL:
sudo apt install mysql-client
(Ubuntu)。 - PostgreSQL:
sudo apt install postgresql-client
。
- MySQL:
- 安装数据库客户端:
- 导入文件权限错误:
- 确保数据库用户有文件读取权限(MySQL 需启用
secure_file_priv
)。
- 确保数据库用户有文件读取权限(MySQL 需启用
适用场景
- 自动化脚本:通过 Shell 脚本执行批量 SQL 操作。
- 远程管理:SSH 连接服务器后直接操作生产数据库。
- 数据迁移:导入/导出
.sql
或.csv
文件。
引用说明:
本文参考 MySQL 8.0、PostgreSQL 15 及 SQLite 3 的官方文档,遵循数据库管理最佳实践,命令行语法基于 Linux/macOS 环境,Windows 用户需调整路径格式(如C:\data.sql
),安全建议依据 OWASP 数据保护指南。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5720.html