购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.3 MariaDB

MySQL是目前最流行的关系型数据库之一,在Web开发中离不开数据库。由于MySQL先后被Sun和Oracle公司收购,其开发团队意识到Oracle公司可能会将MySQL闭源,因此该团队将MariaDB作为MySQL的一个分支分离出来。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的替代品,因此,无论安装的是MySQL还是MariaDB,其使用方法基本一样。

使用以下命令安装最新版本的MySQL:

 

     sudo apt-get install mysql-server

如果为树莓派换了源可能会出现找不到软件包的错误,如下所示:

 

     正在读取软件包列表... 完成
     正在分析软件包的依赖关系树
     正在读取状态信息... 完成
     没有可用的软件包 mysql-server,但是它被其他的软件包引用了。
     这可能意味着这个缺失的软件包可能已被废弃,
     或者只能在其他发布源中找到
     然而下列软件包会取代它:
       mariadb-server-10.0
     E: 软件包 mysql-server 没有可安装候选

直接安装提示的mariadb-server软件包即可,命令如下:

 

     sudo apt-get install mariadb-server-10.0

当服务器安装完成后,运行以下命令为数据库设置安全密码:

 

     sudo mysql_secure_installation

在设置的过程中一般会依次询问以下几个问题:

(1)提示输入密码Enter current password for root (enter for none):,当前密码默认为空,直接按Enter键即可。

(2)是否设置root密码Set root password? [Y/n],输入y后按Enter键,再输入新密码(Linux下密码都为盲输入,不会显示出已按下的键),第二次重复确认密码时,依旧为盲输入。

(3)会是否移除匿名用户Remove anonymous users? [Y/n],输入y,按Enter键即可移除,即不允许匿名访问。

(4)是否禁止root用户远程登录Disallow root login remotely? [Y/n],此处可以根据需求进行设置,如果将3306端口映射到公网中,出于安全考虑,可以输入y,再单独新建一个专门用于远程访问的用户。

(5)是否删除test数据库并访问它Remove test database and access to it? [Y/n],默认情况下MariaDB带有一个名为test的数据库,任何人都可以访问。在生产环境中可以删除,但一般生产环境都部署在性能更好的云服务器上,可以输入n,为了测试方便不删除。

(6)是否现在重新加载配置表来保存当前的所有更改Reload privilege tables now? [Y/n],输入y,将保存当前的所有配置。

设置完成后,在树莓派的终端切换到root用户,并使用mysql命令登录到数据库,进入数据库后每行会提示类似MariaDB [(none)]>的信息,如下所示:

在数据库中执行以下SQL语句创建一个远程访问的MySQL账户,由于是SQL语句所以每句结尾都有一个分号。

 

     CREATE USER '新建的用户名'@'%' IDENTIFIED BY '新建用户的密码';
     GRANT USAGE ON *.* TO '新建的用户名'@'%';
     GRANT ALL PRIVILEGES ON *.* TO '新建的用户名'@'%' IDENTIFIED BY '新建用户的密码' WITH GRANT
     OPTION;
     FLUSH PRIVILEGES;

此时如果使用Navicat等数据库客户端软件连接MySQL,就会报10061错误,如图5.6所示。这是因为MySQL默认是不允许远程访问的。

图5.6 MySQL10061错误

使用Ctrl+4快捷键可以在终端退出数据库,然后执行以下命令编辑数据库的配置文件:

 

     sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

将配置文件中的bind-address=127.0.0.1使用#符号注释,修改完成后使用Ctrl+O快捷键保存,按Enter键确定写入,按Ctrl+X快捷键退出,再使用下面命令重启数据库:

 

     sudo service mysql restart

除了restart命令外,还有stop、start、enable和status等,分别代表着停止、启动、开机自启和状态信息。此时,再使用Navicat等数据库客户端软件就可以成功连接到数据库了。

如果在树莓派上使用pi用户登录MySQL时提示“ERROR 1698 (28000): Access denied for user'root'@'localhost'”错误,可以查看MySQL配置的验证方式是否为系统验证“UNIX auth_socket plugin”,执行如下命令:

 

     sudo mysql -u root -p
     use mysql
     select User,Host,plugin from user;

查询出来的结果中,如果plugin字段为“unix_socket”即为系统验证,此时将其更改为密码验证方式,SQL语句如下:

 

     update user set plugin='mysql_native_password' where user='root';
     flush privileges;
     exit

退出后,在pi用户下不加sudo命令重新登录,输入正确密码即可。 V83fzmn9y4vcsy8Jihur2zKs/e33+nmc8nHcIRZs4+yhb97cBIvwJqdvhd9WNs9t

点击中间区域
呼出菜单
上一章
目录
下一章
×