Seb*_*Nik 3 mysql sql linux mariadb raspberry-pi
我有一个正在运行的 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)
Run Code Online (Sandbox Code Playgroud)
但我希望不仅能够从本地网络访问它,我还希望能够从世界各地访问它。我怎么做 ?
我不建议您向世界公开数据库。通常,数据库位于应用程序服务器后面,该服务器将提供网页、Web 服务(或休息调用)。该应用程序服务器将根据需要读取或写入数据库。
话虽如此,公开数据库在技术上是可能的。再说一次,不要这样做。...但如果你必须:
配置引擎以服务远程主机,而不仅仅是本地应用程序:
sudo vi /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)
并将绑定地址设置为:
bind-address = 0.0.0.0
Run Code Online (Sandbox Code Playgroud)
然后,重新启动引擎:
sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)
创建一个可以从任何地方访问的 MariaDB 用户(使用@'%'),如下所示:
create user 'myuser'@'%' identified by 'mypass';
Run Code Online (Sandbox Code Playgroud)
授予此用户对数据库的访问权限(假设您已经创建了数据库):
grant all on my_database.* to 'myuser'@'%';
Run Code Online (Sandbox Code Playgroud)
最后,打开你的家庭防火墙。进入路由器的管理页面并找到“端口转发”部分。在那里,添加一条规则来侦听端口 3306 (TCP) 的世界并将其重定向到您本地的树莓派 IP 地址。保存规则。您可能需要重新启动路由器。
就是这样。您的树莓派数据库现在正在倾听世界的声音。我建议至少在连接上配置 SSL,这样密码(和数据)就不会通过网络以纯文本形式发送。
额外,价格相同:您可能会问收听哪个地址?您的 ISP 看到的您的家庭地址。现在,您可能会问,如果 IP 发生变化,我可以使用假域名吗?您可以使用免费的 DNS 服务,例如 duckdns.org。它是免费的,并且像树莓派中的魅力一样工作(我从 2015 年开始使用它)。