【树莓派】使用数据库前
安装
$ 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】