使用 usql 连接各种不同的数据库

usql 介绍

usql 是一个统一的数据库连接工具, 目前支持常用的各种数据库, 包括 PostgreSQL, MySQL, Oracle, SQLite3, Microsoft SQL Server 以及最近几年出现的较新的数据库, 比如 clickhouse, Cassandra 等, 详见 database-support.

通常情况下 usql 以 usql [options] DSN 的方式进行连接, 不过 usql 并没有对各个数据的 DSN 进行过多的处理, 大部分情况下只是将其值直接传递到后端的数据库 driver, 所以 usql 的 DSN 格式依据不同的数据库会有不同的选项参数. 下面通过示例说明如何使用 usql 连接 MySQL, SQL Server, sqlite3, cassandra 以及 clickhouse.

连接 mysql

DSN 参数依据 go-sql-driver

# usql --password 'mysql://10.0.12.3:3302/log_data?charset=utf8'
Enter password: 
Connected with driver mysql (5.6.31-77.0-log)
Type "help" for help.

my:root@10.0.12.3:3302/log_data=> select id, user_id, create_at from logs_32 limit 5;
  id |   user_id   |         create_at          
+----+-------------+---------------------------+
   1 |      383645 | 2017-06-19T15:53:41+08:00  
   2 |      383645 | 2017-06-19T15:55:47+08:00  
   3 |      383645 | 2017-06-19T15:56:04+08:00  
   4 | 11137862735 | 2017-06-21T01:21:48+08:00  
   5 |     5277525 | 2017-06-22T16:27:15+08:00  
(5 rows)

连接 sql server

DSN 参数依据 go-mssqldb, 未开启加密选项的情况下, 需要关闭 encrypt 选项, 详见: issue-399:

# usql --password 'mssql://test@10.0.12.2:1433/testdb?encrypt=disable&charset=gbk'
Enter password: 
Connected with driver mssql (Microsoft SQL Server 9.00.5000.00, SP4, Enterprise Edition)
Type "help" for help.

ms:test@10.0.12.2:1433/testdb=> select top 5 id, account from user where id > 100000;
    id   |  account  
+--------+--------------+
  100001 | opqaz3k87387     
  100002 | slpolkly0406 
  100003 | opgak101022       
  100004 | 9yfkd1973064      
  100005 | lkksky2010ps     
(5 rows)

连接 sqlite

DSN 参数依据 go-sqlite3

# usql 'sqlite:/home/cz/sqlite/sqlitedbfile'
Connected with driver sqlite3 (SQLite3 3.23.1)
Type "help" for help.

sq:/home/cz/sqlite/sqlitedbfile=> select * from user;
  id | name   
+----+-------+
   1 | test1  
   2 | test2  
(2 rows)

连接 Cassandra

DSN 参数依据 go-cql-driver

# usql ca://127.0.0.1:9042/   
Connected with driver cql (Cassandra 3.11.2, CQL 3.4.4, Protocol v4)
Type "help" for help.

ca:127.0.0.1:9042=> select cql_version from system.local;
  cql_version  
+-------------+
  3.4.4        
(1 rows)

连接 clickhouse

DSN 参数依据 clickhouse

# usql --no-password 'ch://127.0.0.1:9000/?database=metrics&charset=utf8'
Connected with driver clickhouse (1.1.54370)
Type "help" for help.

ch:127.0.0.1:9000=> show tables;
   name   
+--------+
  nginx   
  nginx2  
(2 rows)

ch:127.0.0.1:9000=> select count(*) as num from nginx;
     num     
+-----------+
  308867936  
(1 rows)

说明

在使用的过程中, usql 提供了很大的方便, 尤其是需要连接 sql server 的情况下. 另外在出现连接错误的情况下, 大多数问题需要在各自对应的数据库 driver 中查找相关的问题. 目前来看支持的数据库有很多, 在安装 usql 的时候可以根据 --tag 选项仅编译指定的数据库 driver. 当然后续也可能支持更多的数据库. 另外同类的工具还有 adminer, 通过简单的 web 页面即可访问 MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, Firebird, SimpleDB, Elasticsearch and MongoDB.