【树莓派】使用数据库前

安装

$ sudo apt-get install mariadb-server-10.0
$ sudo apt-get install apache2

已安装的内容如下:

    • mariaDB

 

    apache2

由于无法安装mysql-server,所以安装mariadb-server-10.0。

登录到数据库

$ sudo mysql -u root

请注意已经加上了sudo。

用户确认

select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+

检查插件

select host,user,password,plugin from user;
+-----------+------+----------+-------------+
| host      | user | password | plugin      |
+-----------+------+----------+-------------+
| localhost | root |          | unix_socket |
+-----------+------+----------+-------------+

禁用unix_socket

UPDATE user SET plugin='' WHERE User='root';

unix_socket插件要求使用树莓派的用户名才能登录到数据库,因此在首次登录时需要添加sudo命令。

然后重新启动数据库。

MariaDB [mysql]> exit;
Bye
pi4@raspi4:~ $ sudo systemctl restart mysql

这样就可以在没有sudo的情况下登录

$ mysql -uroot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.0.28-MariaDB-2+b1 Raspbian testing-staging

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

最初的设置

设置root密码

 $ mysql_secure_installation

使用上述的命令可以设置root密码及其他一些设置。
如果不明白的话,只需按下“y”键即可。
请确认密码是否已生效。

$ mysql -u root -p

普通用户创建

CREATE USER 'user'@'%' IDENTIFIED BY 'pass';

创建具有用户名为”user”、密码为”pass”的用户。
请先注销并使用创建的用户登录以确保切换。

$ mysql -u user -p pass

确认连接的用户

select user();

远程访问授权

从连接源输入以下命令以确认无法连接。如果在此阶段可以连接,则可以跳过此项。

$ mysql -h 接続先のDBのIPアドレス -u user -p user 

在树莓派上,默认情况下不允许远程访问。要禁用此设置,请将以下文件的第29行设置为注释。

#bind-address=127.0.0.0

稍后重新启动数据库。

sudo systemctl restart mysql

试着连接

mysql -h IPアドレス -u user -p user

然而,发生错误但是

$ mysql -h xxx.xxx.xxx.xxx -u root -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (61)

是端口的问题吗?

我来确认一下端口。

show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+

尝试在先前的连接命令中添加端口信息后,端口为3306。

$ mysql -h xxx.xxx.xxx.xxx -P 3306 -u root -p 

不行。。。。。。。。。

MySQL的配置文件有没有问题?

我正在参考关于如何处理出现 “ERROR 2003 (HY000): Can’t connect to MySQL server” 错误的方法。

尝试修改之前允许远程连接的值。
试着添加bind-address=0.0.0.0。
通过这样的写法,允许来自所有主机的连接。

#bind-address=127.0.0.0
bind-address=0.0.0.0

我尝试了一下,但还是不行。。。。。。

可能是连接目标树莓派端口的问题吗?

因为3306端口被占用了,所以无法连接上。。。
有这样尴尬的事情吗??

暫時先安裝ufw。

$ sudo apt-get install ufw

启动ufw

$ sudo ufw enable

这是如何启动
如果你没有做这个操作,尝试设置各种参数然后执行sudo ufw status,却没有显示任何内容而感到有些困扰

Command may disrupt existing ssh connections. Proceed with operation

执行上述命令时会被询问:“即使SSH可能会中断,你还可以吗?”选择Y即可,SSH不会中断。

暂时先允许DB的端口和22端口。
可以通过以下命令限制22端口的连续连接。

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
3306                       ALLOW       Anywhere
22                         LIMIT       Anywhere
3306 (v6)                  ALLOW       Anywhere (v6)
22 (v6)                    LIMIT       Anywhere (v6)

让我们应用“不允许连续访问的IP地址进行连接”的设定。这将设置一个规则,即“在30秒内尝试连接超过6次的IP地址不被允许”。请参考:由于iptables复杂,所以使用ufw进行Web服务器的防火墙设置。

这样行了吗?

这个。。。不行。

$ mysql -h X.X.X.X -uuser -puser -P 3306
ERROR 2003 (HY000): Can't connect to MySQL server on 'X.X.X.X' (111 "Connection refused")

原来如此

当我觉得一切都已经无望之际,重新启动后不知怎地竟然能够远程连接上了…

暂且列出到此为止的设定。

#bind-address=127.0.0.0

最終结果是将它保留在评论中。

由于未设置自动启动,即使重新启动ufw也不会启动,因此可以认为没有影响。

为什么成功的私人观点

我觉得即使我改变了/etc/mysql/mariadb.conf.d/50-server.cnf的设置并重新启动了数据库,可能还没有完全生效。

请参阅

    Raspberry Pi にデータベースを構築する【MySQL,MariaDB】
bannerAds