登录R服务器后查看数据库,核心思路是:先确认服务器上装了什么数据库,再用对应的命令行客户端连进去,最后执行查询命令。这里的R服务器通常指远程服务器(Remote Server),也可能是你自己给某台机器起的代号,但不管名字怎么叫,操作路径是一样的:SSH登录、识别环境、连接数据库、执行SQL。
如果你说的“R服务器”其实是跑R语言脚本的分析服务器,那思路完全不同,可以直接跳到文末看R语言环境下的连接方法,先来聊最常见的远程服务器场景。
登录远程服务器后先确认数据库类型
不同数据库的查看命令完全不一样,如果你连服务器上装的是MySQL还是PostgreSQL都没弄清楚,后面所有命令都是白费功夫,登录服务器后,先看几个关键信息。
- 检查进程:执行
ps -ef | grep -E "mysql|postgres|oracle|mongo",看看有没有数据库进程在跑。 - 检查端口:执行
netstat -tlnp或ss -tlnp,数据库默认端口分别是 MySQL 3306、PostgreSQL 5432、Oracle 1521、MongoDB 27017。 - 检查已安装软件:CentOS/RedHat 用
rpm -qa | grep -i sql,Ubuntu/Debian 用dpkg -l | grep -i sql。
怎么判断是MySQL还是PostgreSQL
如果进程名和端口都看不出来,用 systemctl list-units | grep -E "mysql|postgres" 查看系统服务,据MySQL官方文档,MySQL的默认端口是3306,而PostgreSQL是5432,绝大多数云服务器预装的是MySQL或MariaDB,所以你大概率会看到 mysqld 进程。
还要注意,一台服务器上可能同时跑着多个数据库,比如常见的组合是 MySQL + Redis,或者 PostgreSQL + MongoDB,这时候先通过进程和端口锁定你关心的那个数据库实例,别直接敲 mysql 命令连错了。
怎么看数据库版本
知道类型后,最好再看一下版本,因为不同版本的语法有细微差别,进入客户端后执行:
- MySQL:
SELECT VERSION(); - PostgreSQL:
SELECT version(); - Oracle:
SELECT FROM v$version;
如果你连客户端都进不去,也可以看二进制文件版本:mysql --version 或 psql --version。
r服务器登录后怎么查看数据库列表
这是最核心的一步,确认数据库类型后,下面按主流数据库分别说明。
MySQL / MariaDB 查看数据库列表
用命令行客户端连接本地MySQL服务,一般用root:
mysql -u root -p
输入密码后,进入MySQL交互界面,然后执行:
SHOW DATABASES;
你会看到类似下面的输出:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | myapp_db | +--------------------+
information_schema、mysql、performance_schema、sys 是系统自带的库,真正存业务数据的是类似 myapp_db 这样的库,如果你要远程连接这台服务器上的MySQL,在本地电脑执行:
mysql -h 服务器IP -P 3306 -u myuser -p
注意,MySQL默认只允许local登录,远程连接需要授权,后面会单独讲。
PostgreSQL 查看数据库列表
PostgreSQL的客户端命令是 psql,登录方式:
psql -U postgres -h localhost
进入后,查看所有数据库:
\l
或者用SQL查询:
SELECT datname FROM pg_database;
Oracle 查看数据库实例
Oracle 稍特殊,你需要用 sqlplus 登录到实例:
sqlplus / as sysdba
然后查询数据库名:
SELECT name FROM v$database;
查询所有用户:
SELECT username FROM all_users;
用表格对比更直观:
| 数据库 | 登录命令 | 查库列表命令 | 默认端口 |
|---|---|---|---|
| MySQL | mysql -u root -p |
SHOW DATABASES; |
3306 |
| Postgre | psql -U postgres |
\l 或 SELECT datname FROM pg_database; |
5432 |
| Oracle | sqlplus / as sysdba |
SELECT name FROM v$database; |
1521 |
linux服务器查看数据库实例的附加技巧
如果你不想进入交互界面,可以用一条命令直接输出结果,MySQL 使用 -e 参数:
mysql -u root -p -e "SHOW DATABASES;"
PostgreSQL 使用 -c 参数:
psql -U postgres -c "\l"
这在写shell脚本时非常实用。-e 表示执行SQL后退出,-c 同理。
远程服务器查看数据库表结构用什么命令
知道有哪些库之后,下一步就是看库里的表,这是开发排查问题的高频操作,还是分数据库说。
MySQL 查看表结构
先进入某个库:
USE myapp_db;
然后列出所有表:
SHOW TABLES;
查看单表结构:
DESCRIBE users;
或者:
SHOW CREATE TABLE users;
后者能直接看到完整建表语句,包括字段、索引、约束,排查问题时更好用。
PostgreSQL 查看表结构
进入某个库:
\c myapp_db
列出所有表:
\dt
查看表结构:
\d users
Oracle 查看表结构
Oracle 中,查询当前用户下的表:
SELECT table_name FROM user_tables;
查看表结构:
DESCRIBE users;
查看表里的数据
表结构摸清了,就去看数据,MySQL、PostgreSQL、Oracle 都支持同样的写法:
SELECT FROM users LIMIT 100;
注意,线上大表千万别不加 LIMIT 直接 SELECT ,否则服务器内存可能直接被撑满,这是行业共识,很多新手踩过这个坑。
服务器数据库连接不上怎么办
你在查看数据库时,最常见的拦路虎就是连接报错,尤其是从本地远程连接服务器数据库时,经常遇到 Access denied 或 Can't connect 的问题,按下面几个方向排查。
检查MySQL用户权限
第一个要查的是MySQL用户权限,默认情况下,root用户只能在本机登录,要允许远程登录,需要执行:
GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '你的密码'; FLUSH PRIVILEGES;
这里 表示任意主机,但生产环境不建议直接开放root权限,最好单独建一个应用账号,只授权某个库:
CREATE USER 'app_user'@'%' IDENTIFIED BY '密码'; GRANT ALL PRIVILEGES ON myapp_db. TO 'app_user'@'%'; FLUSH PRIVILEGES;
检查防火墙和安全组
第二个要查的是防火墙,云服务器通常有系统防火墙和云安全组两层,你需要确保端口在两层都放开了,检查系统防火墙:
firewall-cmd --zone=public --add-port=3306/tcp --permanent systemctl reload firewalld
如果是国内云厂商的服务器,还要登录控制台,在安全组入方向规则里放行3306端口,所有主流云厂商都提供这个配置入口。
检查MySQL监听地址
第三个要查的是MySQL是否只监听了本地回环地址,查看配置文件:
cat /etc/my.cnf | grep bind-address
如果看到 bind-address = 127.0.0.1,说明只有本机能连,改为 0.0.0 并重启服务:
sed -i 's/127.0.0.1/0.0.0.0/g' /etc/my.cnf systemctl restart mysqld
改完之后再用 netstat -tlnp 确认端口监听在 0.0.0:3306 上。
用数据库管理工具代替命令行
如果你实在不习惯敲命令,可以试试图形化工具,常见的有 Navicat、DBeaver、DataGrip,它们都支持MySQL、PostgreSQL、Oracle等主流数据库,你只需要填服务器的IP、端口、用户名、密码即可,对于云服务器上的数据库实例,控制台会直接显示连接地址和端口,以那个为准。
如果你说的R服务器是指R语言环境
有些朋友说的“R服务器”其实是指运行R脚本的机器,这种场景下,你不需要用 mysql 命令,而是直接在R里装驱动包连接数据库。
以MySQL为例,R中可以用 RMySQL 包:
install.packages("RMySQL")
library(RMySQL)
con <- dbConnect(MySQL(), user="root", password="123456", dbname="myapp_db", host="127.0.0.1")
dbListTables(con)
如果你用的是PostgreSQL,把包换成 RPostgreSQL,连接方式类似,这种方式更适合数据分析师,不用记复杂的SQL命令行,但本质上还是通过TCP端口访问数据库,服务器防火墙规则同样要放行。
Q&A:关于r服务器登录查看数据库的常见问题
问:r服务器登录后没有mysql命令怎么办?
这表示服务器上没装MySQL客户端,或者MySQL根本没安装,先用 yum install mysql(CentOS)或 apt install mysql-client(Ubuntu)安装客户端,如果数据库在其他机器上,只需要客户端就够了,如果本机要跑服务,再安装 mysql-server。
问:如何查看远程服务器上的数据库大小?
MySQL中,查看所有库的大小,执行:
SELECT table_schema AS "Database", SUM(data_length + index_length) / 1024 / 1024 AS "Size MB" FROM information_schema.tables GROUP BY table_schema;
PostgreSQL中,使用 pg_database_size 函数,Oracle中,查看表空间使用率需要查询 dba_data_files 视图,这类查询通常需要管理员权限。
问:从本地连接r服务器数据库,总是超时,怎么排查?
依次检查四件事:第一,服务器防火墙是否放行端口;第二,云服务商安全组是否放行端口;第三,数据库是否开启了远程访问;第四,本机到服务器的网络连通性,用 telnet 服务器IP 端口 测试端口是否开放,这是最直接的判断方法。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/770718.html

