FetchLinux如何与数据库交互
小樊
44
2025-11-28 20:47:39
在 Linux 环境下与数据库交互的常用方式
术语澄清
- 如果你指的是 Fetch(一个基于 Electron 的跨平台桌面应用),它本质上运行在 Linux 桌面 上,因此与数据库交互的方式与普通 Linux 应用一致:通过 命令行客户端、编程语言驱动/ORM、或 图形化客户端 连接数据库服务器(如 MySQL、PostgreSQL、SQLite 等)。
- 如果你指的是 Linux 脚本/程序(如 Bash、Python、Go、Java、C 等),同样采用下述方式与数据库交互。
常用方式
- 命令行工具:直接使用数据库自带的 CLI,如 mysql、psql、sqlite3,适合快速查询、导入导出与日常运维。
- 编程语言库:在脚本或服务中通过驱动/ORM 连接数据库,如 Python:mysql-connector-python、psycopg2;Java:JDBC;PHP:PDO;Go:database/sql + go-sql-driver/mysql,适合自动化与业务集成。
- 图形化客户端:如 MySQL Workbench、pgAdmin、DBeaver,适合可视化管理与复杂查询开发。
快速上手示例
- 命令行直连与导出
- MySQL:连接并执行查询,将结果写入文件
- 命令:mysql -h localhost -u username -p -e “SELECT * FROM table_name” > output.txt
- PostgreSQL:连接并列出数据库
- 命令:psql -U username -d database_name -c “\l”
- SQLite:打开数据库并列出表
- 命令:sqlite3 database_name.db “.tables”
- Shell 脚本封装 MySQL 查询
- 示例:
- 脚本要点:
- 定义连接参数:DB_HOST、DB_USER、DB_PASS、DB_NAME
- 执行查询:mysql -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME -e “$query”
- 处理/输出结果(可重定向到文件或进一步解析)
- Python 示例(MySQL 与 PostgreSQL)
- MySQL(mysql-connector-python)
- 安装:pip install mysql-connector-python
- 示例:
- 代码:
- import mysql.connector
- conn = mysql.connector.connect(host=“localhost”, user=“username”, password=“password”, database=“database_name”)
- cur = conn.cursor(); cur.execute(“SELECT * FROM table_name”)
- for row in cur.fetchall(): print(row)
- conn.close()
- PostgreSQL(psycopg2)
- 安装:pip install psycopg2
- 示例:
- 代码:
- import psycopg2
- conn = psycopg2.connect(host=“localhost”, user=“username”, password=“password”, dbname=“database_name”)
- cur = conn.cursor(); cur.execute(“SELECT * FROM table_name”)
- for row in cur.fetchall(): print(row)
- conn.close()
- Go 示例(database/sql + go-sql-driver/mysql)
- 安装驱动:go get github.com/go-sql-driver/mysql
- 示例:
- 代码:
- package main
- import (“database/sql”; “fmt”; _ “github.com/go-sql-driver/mysql”)
- func main() {
- dsn := “root:mypassword@tcp(localhost:3306)/mydatabase”
- db, _ := sql.Open(“mysql”, dsn)
- defer db.Close()
- rows, _ := db.Query(“SELECT * FROM mytable”)
- defer rows.Close()
- for rows.Next() {
- var id int; var name string
- rows.Scan(&id, &name)
- fmt.Printf(“id: %d, Name: %s\n”, id, name)
}
- }
- C 示例(MySQL C API)
- 关键步骤:
- 初始化句柄:mysql_init()
- 建立连接:mysql_real_connect()
- 执行查询:mysql_query()
- 处理结果:mysql_store_result() / mysql_fetch_row()
- 释放资源:mysql_free_result()、mysql_close()、mysql_library_end()
- 编译示例:gcc -o mysql mysql.c -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient
导入导出与运维
- 备份与恢复
- MySQL 逻辑备份:mysqldump -u 用户名 -p 数据库名 > backup.sql
- 导入 SQL 脚本:进入 mysql> 后执行 source /path/file.sql
- 本地套接字连接
- 当使用本地套接字时,可用:mysql -u 用户名 -p -S /路径/到/mysql.sock
- 套接字路径通常在 /etc/mysql/my.cnf 或 /etc/my.cnf 中配置。
安全与排错要点
- 避免在命令行或脚本中明文写密码:优先使用配置文件、环境变量或交互式输入;必要时限制数据库账号权限。
- 使用参数化/预处理语句(如 JDBC PreparedStatement、PDO 预处理、Go sql.Stmt)防止 SQL 注入。
- 连接失败快速排查:
- 服务是否运行:systemctl status mysql/mysqld 或 pg_ctl status
- 网络与端口:如 telnet 主机 3306(MySQL)、5432(PostgreSQL)
- 套接字错误(如 ERROR 2002):检查 /tmp/mysql.sock 或配置路径是否正确,必要时用 -S 指定套接字文件。