我的树莓派上运行着一个工作的 MySQL (MariaDB) 服务器。当我想从本地网络连接到它时,它工作正常。
我的规范如下:
MariaDB [mysql]> SHOW VARIABLES LIKE "%version%";
+-----------------------------------+------------------------------------------+
| Variable_name | Value |
+-----------------------------------+------------------------------------------+
| in_predicate_conversion_threshold | 1000 |
| innodb_version | 10.3.22 |
| protocol_version | 10 |
| slave_type_conversions | |
| system_versioning_alter_history | ERROR |
| system_versioning_asof | DEFAULT |
| version | 10.3.22-MariaDB-0+deb10u1 |
| version_comment | Raspbian 10 |
| version_compile_machine | armv8l |
| version_compile_os | debian-linux-gnueabihf |
| version_malloc_library | system |
| version_source_revision | 0152704ae3f857668dbc05803950adcf131b8685 |
| version_ssl_library | YaSSL 2.4.4 |
| wsrep_patch_version | wsrep_25.24 |
+-----------------------------------+------------------------------------------+
14 rows in set (0.013 sec)
但我不仅希望能够从我的本地网络访问它,我还希望能够从世界各地访问它。我该怎么做?
最佳答案
我不建议您向全世界公开数据库。通常,数据库将位于为网页、网络服务(或休息电话)提供服务的应用程序服务器后面。此应用服务器将根据需要读取或写入数据库。
话虽如此,公开数据库在技术上是可行的。再一次,不要这样做。 ...但是如果你必须:
将引擎配置为服务于远程主机,而不仅仅是本地应用:
sudo vi /etc/mysql/my.cnf
并将绑定(bind)地址设置为:
bind-address = 0.0.0.0
然后,重新启动引擎:
sudo service mysql restart
创建一个可以从任何地方访问的 MariaDB 用户(使用
@'%'
),如:create user 'myuser'@'%' identified by 'mypass';
授予该用户访问数据库的权限(假设您已经创建了一个数据库):
grant all on my_database.* to 'myuser'@'%';
最后,打开您的家庭防火墙。进入路由器的管理页面,找到“端口转发”部分。在那里,添加一个规则来监听世界到端口 3306 (TCP) 并将其重定向到您本地的树莓派 IP 地址。保存规则。您可能需要重新启动路由器。
就是这样。您的 raspberri pi 数据库现在正在倾听世界。我建议至少在连接上配置 SSL,这样密码(和数据)就不会以纯文本形式通过网络发送。
额外的,同样的价格:听哪个地址,你可能会问? ISP 看到的您的家庭住址。现在,您可能会问,如果 IP 发生变化,我可以使用假域名吗?您可以使用免费的 DNS 服务,例如 duckdns.org。它是免费的,在 raspoberry pi 中就像一个魅力(我从 2015 年开始使用它)。
关于MySQL MariaDB 服务器树莓派远程访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62564439/