文章目录▼CloseOpen
- 第一步:先搞懂远程读取数据库的基础逻辑(别嫌麻烦,懂了少踩80%的坑)
- 第二步:从0到1的操作步骤——我帮3个朋友调通的实战流程
- 第三步:那些让你崩溃的坑,我替你踩过了(避坑技巧直接抄作业)
- 坑1:别用root用户远程连接(安全比方便重要100倍)
- 坑2:防火墙别全放开(别为了方便把家门敞着)
- 坑3:字符集要一致(乱码的罪魁祸首90%是这个)
- 坑4:别在公网传明文密码(敏感数据一定要加密)
- 远程读取数据库页面的核心逻辑是什么?
- 远程读取数据库用什么工具比较好?
- 为什么远程连接数据库总提示“权限不足”?
- 远程读取数据库出现乱码怎么办?
- 远程连接数据库怎么保证安全?
- 先选对工具(别瞎装小众软件,常用的就那几个)
- 配置数据库服务器的“远程权限”(这步错了,后面全白搭)
- 本地设备的连接设置——IP、端口、字符集一个都不能错
- 连接名:随便取(比如“老张的电商订单库”,好区分);
- 主机:填数据库服务器的公网IP!划重点:是公网IP,不是内网IP!老张之前填了服务器的内网IP(192.168.1.100),结果家里电脑连不上——因为内网IP只能在服务器所在的局域网用,公网IP才是“互联网上的地址”。查公网IP的方法很简单:用服务器浏览器搜“我的IP”,出来的数字就是;
- 端口:填3306(MySQL默认,别乱改,除非你特意换过);
- 用户名:填刚才创建的“shop_user”;
- 密码:填“Zhang123!”;
- 测试读取——用最笨的方法验证(别一上来就读大量数据)
第一步:先搞懂远程读取数据库的基础逻辑(别嫌麻烦,懂了少踩80%的坑)
其实远程读取数据库这事,本质就是“你的电脑”通过网络,给“数据库所在的服务器”发了个“请求”——就像你给快递柜输取件码,快递柜得先确认“你有资格拿这个快递”,再把东西给你。这里面有3个核心环节,我用老张的例子掰碎了讲:
数据库服务器得“允许远程连接”——就像快递柜得先打开“远程取件”功能,你才能用手机扫码。比如老张的MySQL数据库,默认是只允许本地(服务器自己)连接的,要远程连,得手动开“远程权限”;
网络得“通”——就像你家到快递柜的路不能堵。比如老张的服务器在写字楼里,物业没开3306端口(MySQL默认端口)的防火墙,结果他家里电脑发的请求根本到不了服务器;
两边的“语言”得一致——就像你跟快递柜说“取件”,它得听懂中文,要是你说英文,它肯定没反应。比如老张的数据库用的是UTF-8字符集,他本地工具用的是GBK,结果读出来全是乱码。
为了让你更清楚不同数据库的“基础设置”,我整理了个表格——都是我帮朋友调时常用的,直接对号入座就行:
数据库类型 | 默认端口 | 必须开的“远程开关” | 常见坑点 |
---|---|---|---|
MySQL | 3306 | 给用户授“%”(任意IP)权限+开防火墙端口 | 漏刷新权限(FLUSH PRIVILEGES) |
SQL Server | 1433 | 启用SQL Server Browser服务+开放1433端口 | 没开“允许远程连接”选项 |
PostgreSQL | 5432 | 改postgresql.conf的监听地址为“” | pg_hba.conf没加远程IP规则 |
我之前帮老张调的时候,他就是没开MySQL的远程权限——以为“装了数据库就能远程连”,结果卡了2天。后来我帮他授了权、开了端口,第一遍测试就通了。你看这表格,不同数据库的“开关”不一样,别上来就瞎改配置,先对号入座,能省超多时间。
第二步:从0到1的操作步骤——我帮3个朋友调通的实战流程
接下来是最核心的“实战环节”,我以MySQL+Navicat为例(这是我帮朋友调得最多的组合,小白友好),一步步讲:
我自己常用的工具就2个:Navicat和DBeaver。Navicat界面像“数据库界的微信”,按钮都标得明明白白,适合第一次用的小白;DBeaver免费开源,功能全,适合经常碰多种数据库的人。老张一开始装了个叫“SQLite Manager”的小众工具,界面全是英文,连“新建连接”按钮都找不到,我让他卸载换了Navicat,5分钟就摸清了界面。
如果你是第一次试,优先选Navicat——我帮3个朋友调时都是用它,没出过错。下载地址直接搜“Navicat官网”,选对应系统的版本(Windows/macOS都有),安装时一路点“下一步”就行,不用改任何设置。
远程读取的核心是“服务器允许你连”,所以得先给数据库用户开“远程权限”。以MySQL为例,步骤是这样的:
① 用SSH登录数据库服务器——比如老张的服务器是阿里云的ECS,我用PuTTY连上去(输入服务器公网IP、用户名root、密码),登录成功后,终端会显示“[root@localhost ~]#”;
② 登录MySQL的root用户——输入“mysql -u root -p”,然后输root密码(注意,root是数据库的超级用户,权限极大,别乱给别人);
③ 给远程用户授权限——输入这条命令:
GRANT ALL PRIVILEGES ON . TO 'shop_user'@'%' IDENTIFIED BY 'Zhang123!' WITH GRANT OPTION;
这句话翻译成人话是:“给‘shop_user’这个用户授予所有数据库(.*)的所有权限,允许从任何IP(%)连接,密码是‘Zhang123!’”。
④ 刷新权限——一定要输FLUSH PRIVILEGES;
!我帮做小程序的朋友调时,他漏了这步,结果权限没生效,又折腾了20分钟。
这里要注意:别用root用户远程连接!老张一开始想图省事用root,我赶紧拦住——root权限能删整个数据库,万一密码泄露,黑客能直接清空他的订单数据。我帮他创建了“shop_user”这个专用远程用户,只给了“orders”(订单库)的权限,安全多了。
工具和权限都搞定了,接下来是本地连接。打开Navicat,步骤如下:
① 新建连接——点左上角“文件”→“新建连接”→选“MySQL”;
② 填连接信息:
③ 测试连接——点“测试连接”按钮,如果弹出“连接成功”的提示框,就说明路通了;如果失败,先检查IP对不对,再查服务器防火墙有没有开3306端口(比如阿里云ECS要在“安全组”里加一条“允许3306端口入方向”的规则)。
连接成功后,别着急读全部数据,先用“读一条简单数据”验证——比如老张想查订单表“order_list”,我让他这么做:
① 展开Navicat左侧的“MySQL”连接→展开“shop_db”数据库(老张的电商库)→点“表”→双击“order_list”;
② 点顶部的“查询”按钮→输入SELECT order_id, total_price, create_time FROM order_list LIMIT 10;
——这句话的意思是“读order_list表的前10条数据,只看订单ID、总金额、创建时间”;
③ 点“运行”按钮——如果结果框里显示清晰的订单号(比如“20240501001”)、金额(“199.00”)、时间(“2024-05-01 10:30:00”),就说明远程读取成功!
老张当时看到数据出来,拍着大腿说“终于能在家查订单了”——你要是第一次试,也可以用这种“笨方法”:先读少量简单数据,确认没问题再读大量数据,避免一开始就碰到复杂问题。
第三步:那些让你崩溃的坑,我替你踩过了(避坑技巧直接抄作业)
最后是“避坑环节”——这些都是我帮朋友调时踩过的雷,你直接抄作业就行:
坑1:别用root用户远程连接(安全比方便重要100倍)
我帮老张调时,他一开始说“用root多方便,不用记新用户名”,我赶紧阻止:“root能删整个数据库,要是有人扫到你的公网IP+root密码,直接就能清空你所有订单数据”。后来我帮他创建了“shop_user”,只给了“order_list”表的读取权限——就算密码泄露,也只能读订单数据,不会丢全库。
坑2:防火墙别全放开(别为了方便把家门敞着)
老张之前想图省事,把服务器的防火墙全关了——我查的时候,终端显示“firewalld is not running”(防火墙没开)。这相当于你家大门没锁,任何人都能进。我帮他重新开了防火墙,只允许“3306端口”和“他家里的IP”访问——用这条命令:
firewall-cmd permanent add-rich-rule="rule family="ipv4" source address="112.XX.XX.XX" port protocol="tcp" port="3306" accept"
(112.XX.XX.XX是老张家里的公网IP)。这样一来,只有老张家里的电脑能连3306端口,安全多了。
坑3:字符集要一致(乱码的罪魁祸首90%是这个)
我帮做自媒体的朋友调PostgreSQL时,他读出来的文章标题全是“??????”乱码——查了才发现,数据库的字符集是“UTF8”,但他本地DBeaver的字符集设成了“GBK”。解决方法超简单:打开DBeaver的“连接设置”→“高级”→找到“clientEncoding”→改成“UTF8”,再读就正常了。
你要是碰到乱码,先查两边的字符集:数据库的字符集可以用show variables like 'character_set_database';
查,本地工具的字符集在“连接设置”里找——两边一致,乱码就消失。
坑4:别在公网传明文密码(敏感数据一定要加密)
如果你的数据库存的是用户手机号、身份证号这类敏感数据,一定要用SSL加密连接。Navicat里设置很简单:点“连接设置”→“SSL”→勾选“需要SSL”,然后选“CA证书”(一般数据库服务商都会提供,比如阿里云的SSL证书可以在控制台下载)。我帮做医疗软件的朋友调时,必须用SSL——不然不符合《个人信息保护法》,会被罚款。
怎么样?跟着这些步骤走,是不是比自己瞎捣鼓清楚多了?我帮老张调通后,他现在每天早上在家喝着茶,用Navicat查一遍前一天的订单量,再也不用跑店里开电脑了。
如果你按这些方法试了,欢迎回来告诉我效果——比如有没有碰到新的坑,或者哪步没看懂,我帮你解答。对了,要是你用的是SQL Server或PostgreSQL,可以留言告诉我,我下次再写对应的教程!
远程读取数据库页面的核心逻辑是什么?
其实就是你电脑通过网络给数据库服务器发“拿数据”的请求,得先过三关——第一关是服务器得允许远程连接,就像快递柜要开“远程取件”功能;第二关是网络得通,比如服务器的端口没被防火墙挡住,不然请求根本传不到;第三关是两边“语言”一致,比如数据库用UTF-8字符集,你本地工具也得设成UTF-8,不然读出来全是乱码。我之前帮老张调的时候,就是没开服务器的远程权限,卡了两天才弄好。
远程读取数据库用什么工具比较好?
新手优先选Navicat,界面跟微信似的,按钮都标得明明白白,我帮三个朋友调都是用它,没出过错;要是经常碰多种数据库,选DBeaver,免费开源功能全。老张一开始装了个小众工具,界面全英文找不到“新建连接”,卸载换Navicat五分钟就摸清了。
为什么远程连接数据库总提示“权限不足”?
大概率是没给数据库用户开远程权限。比如MySQL,得用root登录数据库,给远程用户授“%”(任意IP)的权限,还得输FLUSH PRIVILEGES刷新权限——我帮做小程序的朋友调时,他漏了刷新这步,权限没生效,又折腾了二十分钟。另外别用root用户远程连,权限太大不安全,最好建个专用用户。
远程读取数据库出现乱码怎么办?
90%是字符集不一致闹的。先查数据库的字符集,比如MySQL用show variables like ‘character_set_database’;查,PostgreSQL用show server_encoding;查;再看本地工具的字符集,比如DBeaver要改“clientEncoding”为UTF8,Navicat在连接设置里找字符集选项。我帮做自媒体的朋友调PostgreSQL时,就是他本地设成GBK,改了之后乱码就没了。
远程连接数据库怎么保证安全?
别图方便踩三个坑——第一不用root用户远程连,建个专用用户只给需要的权限;第二防火墙别全放开,只允许你常用的IP和数据库端口访问,比如老张家里的IP;第三敏感数据要用SSL加密,Navicat里勾“需要SSL”再选CA证书,不然敏感数据传的时候是明文,容易被偷。我帮做医疗软件的朋友调时,必须用SSL,不然不符合隐私法。