温馨提示×

FetchLinux如何与数据库交互

小樊
44
2025-11-28 20:47:39
栏目: 智能运维

在 Linux 环境下与数据库交互的常用方式

术语澄清

  • 如果你指的是 Fetch(一个基于 Electron 的跨平台桌面应用),它本质上运行在 Linux 桌面 上,因此与数据库交互的方式与普通 Linux 应用一致:通过 命令行客户端编程语言驱动/ORM、或 图形化客户端 连接数据库服务器(如 MySQL、PostgreSQL、SQLite 等)。
  • 如果你指的是 Linux 脚本/程序(如 Bash、Python、Go、Java、C 等),同样采用下述方式与数据库交互。

常用方式

  • 命令行工具:直接使用数据库自带的 CLI,如 mysqlpsqlsqlite3,适合快速查询、导入导出与日常运维。
  • 编程语言库:在脚本或服务中通过驱动/ORM 连接数据库,如 Python:mysql-connector-python、psycopg2Java:JDBCPHP:PDOGo: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/mysqldpg_ctl status
    • 网络与端口:如 telnet 主机 3306(MySQL)、5432(PostgreSQL)
    • 套接字错误(如 ERROR 2002):检查 /tmp/mysql.sock 或配置路径是否正确,必要时用 -S 指定套接字文件。

0