MariaDB数据库管理系统安装及操作

数据库管理系统

数据库是指按照某些特定结构来存储数据资料的数据仓库。在当今这个大数据技术迅速崛起的年代,互联网上每天都会生成海量的数据信息,数据库技术也从最初只能存储简单的表格数据的单一集中存储模式,发展到了现如今存储海量数据的大型分布式模式。在信息化社会中,能够充分有效地管理和利用各种数据,挖掘其中的价值,是进行科学研究与决策管理的重要前提。同时,数据库技术也是信息管理系统、办公自动化系统、决策支持系统等各类信息系统的核心组成部分,是进行科学研究和决策管理的重要技术手段。

既然是讲解数据库管理技术,就肯定绕不开MySQL。MySQL是一款市场占有率非常高的数据库管理系统,技术成熟,配置步骤相对简单,而且具有良好的可扩展性。但是,由于Oracle公司在2009年收购了MySQL的母公司Sun,因此MySQL数据库项目也随之纳入Oracle麾下,逐步演变为保持着开源软件的身份,但又申请了多项商业专利的软件系统。开源软件是全球黑客、极客、程序员等技术高手在开源社区的大旗下的公共智慧的结晶,自己的劳动成果被其他公司商业化自然也伤了一大批开源工作者的心,因此MySQL项目的创始人重新研发了一款名为MariaDB的全新数据库管理系统。

MariaDB和MySQL的Logo如图所示。

第18章 使用MariaDB数据库管理系统第18章 使用MariaDB数据库管理系统

MariaDB是由MySQL项目创始人Michael Widenius带领着团队开发的。根据MariaDB官网的介绍,Michael Widenius有两个可爱的小天使女儿,大女儿叫My,而二女儿叫Maria,因此MariaDB成为他用亲人名字命名的第二款软件(第一款显然是MySQL)

Why is the Software Called MariaDB?

The 'MySQL' name is trademarked by Oracle, and they have chosen to keep that trademark to themselves. The name MySQL (just like the MyISAM storage engine) comes from Monty's first daughter My. The first part of 'MySQL' is pronounced like the English adjective, even if this doesn't match the correct pronunciation of the Finnish name.

MariaDB continues this tradition by being named after his younger daughter, Maria.

The name Maria was initially given to a storage engine. After MariaDB was started, to avoid confusion, it was renamed to Aria. The new name was decided as a result of a contest.

MariaDB当前由开源社区进行维护,是MySQL的分支产品,而且与MySQL具有高度的兼容性,与MySQL API和命令均保持一致。并且MariaDB还自带了一个新的存储引擎Aria,用于替代MyISAM。因此,MariaDB与MySQL一样好用。

与此同时,由于各大公司之间存在着竞争关系或利益关系,外加MySQL在被收购之后逐渐由开源向闭源软件转变,很多公司抛弃了MySQL。当前,谷歌、维基百科等决定将MySQL数据库上的业务转移到MariaDB数据库,Linux开源系统的领袖红帽公司也决定在RHEL 8、CentOS 8以及最新的Fedora系统中,将MariaDB作为默认的数据库管理系统,而且红帽公司更是将数据库知识加入到了RHCE认证的考试内容中。随后,还有数十个常见的Linux系统(如openSUSE、Slackware等)也做出了同样的表态。

但是,坦白来讲,虽然IT行业巨头都决定采用MariaDB数据库管系统,但这并不意味着MariaDB较之于MySQL有明显的优势。刘遄老师用了近两周的时间测试了MariaDB与MySQL的区别,并进行了多项性能测试,并没有发现媒体所说的那种明显的优势。可以说,MariaDB和MySQL在性能上基本保持一致,两者的操作命令也十分相似。从务实的角度来讲,在掌握了MariaDB数据库的命令和基本操作之后,在今后的工作中即使遇到MySQL数据库,也可以快速上手。

初始化mariaDB服务

相较于MySQL,MariaDB数据库管理系统有了很多新鲜的扩展特性,例如对微秒级别的支持、线程池、子查询优化、进程报告等。在配置妥当软件仓库后,即可安装部署MariaDB数据库主程序及服务端程序了。

[root@linuxprobe ~]# dnf install -y mariadb mariadb-server
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Last metadata expiration check: 0:00:19 ago on Tue 27 Apr 2021 05:04:27 PM CST.
Dependencies resolved.
===========================================================================================
 Package                    Arch   Version              Repository             Size
===========================================================================================
Installing:
 mariadb                    x86_64 3:10.3.11-1.module+el8+2765+cfa4f87b    AppStream 6.2 M
 mariadb-server             x86_64 3:10.3.11-1.module+el8+2765+cfa4f87b    AppStream  16 M
Installing dependencies:
 mariadb-common             x86_64 3:10.3.11-1.module+el8+2765+cfa4f87b    AppStream  62 k
 mariadb-connector-c        x86_64 3.0.7-1.el8                             AppStream 148 k
 mariadb-connector-c-config noarch 3.0.7-1.el8                             AppStream  13 k
 mariadb-errmsg             x86_64 3:10.3.11-1.module+el8+2765+cfa4f87b    AppStream 232 k
 perl-DBD-MySQL             x86_64 4.046-2.module+el8+2515+0650e81c        AppStream 156 k
Installing weak dependencies:
 mariadb-backup             x86_64 3:10.3.11-1.module+el8+2765+cfa4f87b    AppStream 6.2 M
 mariadb-gssapi-server      x86_64 3:10.3.11-1.module+el8+2765+cfa4f87b    AppStream  49 k
 mariadb-server-utils       x86_64 3:10.3.11-1.module+el8+2765+cfa4f87b    AppStream 1.6 M
Enabling module streams:
 mariadb                           10.3
 perl-DBD-MySQL                    4.046

Transaction Summary
===========================================================================================
Install  10 Packages
………………省略部分输出信息………………
Installed:
  mariadb-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64
  mariadb-server-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64
  mariadb-backup-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64
  mariadb-gssapi-server-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64
  mariadb-server-utils-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64
  mariadb-common-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64
  mariadb-connector-c-3.0.7-1.el8.x86_64
  mariadb-connector-c-config-3.0.7-1.el8.noarch
  mariadb-errmsg-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64
  perl-DBD-MySQL-4.046-2.module+el8+2515+0650e81c.x86_64

Complete!

在安装完毕后,记得启动服务程序,并将其加入到开机启动项中:

[root@linuxprobe ~]# systemctl start  mariadb
[root@linuxprobe ~]# systemctl enable mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.

在确认mariadb数据库软件程序安装完毕并成功启动后请不要立即使用。为了确保数据库的安全性和正常运转,需要先对数据库程序进行初始化操作。这个初始化操作涉及下面5个步骤。

设置root管理员在数据库中的密码值(注意,该密码并非root管理员在系统中的密码,这里的密码值默认应该为空,可直接按回车键)。

设置root管理员在数据库中的专有密码。

删除匿名用户,并使用root管理员从远程登录数据库,以确保数据库上运行的业务的安全性。

删除默认的测试数据库,取消测试数据库的一系列访问权限。

刷新授权列表,让初始化的设定立即生效。

[root@linuxprobe ~]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 输入管理员原始密码,默认为空值,直接回车即可
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y(设置管理员密码)
New password: 输入新的密码
Re-enter new password: 再次输入密码
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y(删除匿名账户)
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y(禁止管理员从远程登录)
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y(删除测试数据库及其访问权限)
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y(刷新授权表,让初始化后的设定立即生效)
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

在很多生产环境中都需要使用站库分离的技术(即网站和数据库不在同一个服务器上),如果需要让root管理员远程访问数据库,可在上面的初始化操作中设置策略,以允许root管理员从远程访问。然后还需要设置防火墙,使其放行对数据库服务程序的访问请求。数据库服务程序默认会占用3306端口,在防火墙策略中服务名称统一叫作mysql:

[root@linuxprobe ~]# firewall-cmd --permanent --add-service=mysql
success
[root@linuxprobe ~]# firewall-cmd --reload
success

一切准备就绪。现在我们将首次登录MariaDB数据库。管理数据库的命令为mysql,其中,-u参数用来指定以root管理员的身份登录,而-p参数用来验证该用户在数据库中的密码值。

[root@linuxprobe ~]# mysql -u root -p
Enter password: 输入刚才设置的管理员密码后敲击回车
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 16
Server version: 10.3.11-MariaDB MariaDB Server

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

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

初次使用数据库管理工具的读者,可以输入help命令查看mariadb服务能做的操作,语句的用法与MySQL一模一样:

MariaDB [(none)]> help

General information about MariaDB can be found at http://mariadb.org

List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
?         (?) Synonym for `help'.
clear     (c) Clear the current input statement.
connect   (r) Reconnect to the server. Optional arguments are db and host.
delimiter (d) Set statement delimiter.
edit      (e) Edit command with $EDITOR.
ego       (G) Send command to mysql server, display result vertically.
exit      (q) Exit mysql. Same as quit.
go        (g) Send command to mysql server.
help      (h) Display this help.
nopager   (n) Disable pager, print to stdout.
notee     (t) Don't write into outfile.
pager     (P) Set PAGER [to_pager]. Print the query results via PAGER.
print     (p) Print current command.
prompt    (R) Change your mysql prompt.
quit      (q) Quit mysql.
rehash    (#) Rebuild completion hash.
source    (.) Execute an SQL script file. Takes a file name as an argument.
status    (s) Get status information from the server.
system    (!) Execute a system shell command.
tee       (T) Set outfile [to_outfile]. Append everything into given outfile.
use       (u) Use another database. Takes database name as argument.
charset   (C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (W) Show warnings after every statement.
nowarning (w) Don't show warnings after every statement.

For server side help, type 'help contents'

在登录MariaDB数据库后执行数据库命令时,都需要在命令后面用分号(;)结尾,这也是与Linux命令最显著的区别。大家需要慢慢习惯数据库命令的这种设定。下面执行如下命令查看数据库管理系统中当前都有哪些数据库:

MariaDB [(none)]> SHOW databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.000 sec)

小试牛刀过后,接下来使用数据库命令将root管理员在数据库管理系统中的密码值修改为linuxprobe。这样退出后再尝试登录,如果还坚持输入原先的密码,则将提示访问失败。

MariaDB [(none)]> SET password = PASSWORD('linuxprobe');
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> exit
Bye
[root@linuxprobe ~]# mysql -u root -p
Enter password: 此处输入管理员在数据库中的旧密码
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

输入新密码(linuxprobe)后,便可顺利进入数据库管理工具中:

[root@linuxprobe ~]# mysql -u root -p
Enter password: 此处输入管理员在数据库中的新密码
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 20
Server version: 10.3.11-MariaDB MariaDB Server

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

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

管理用户以及授权

在生产环境中总不能一直“死啃”root管理员。为了保障数据库系统的安全性,以及让其他用户协同管理数据库,可以在MariaDB数据库管理系统中为他们创建多个专用的数据库管理用户,然后再分配合理的权限,以满足他们的工作需求。为此,可使用root管理员登录数据库管理系统,然后按照“CREATE USER用户名@主机名IDENTIFIED BY ‘密码’;”的格式创建数据库管理用户。再次提醒大家,一定不要忘记每条数据库命令后面的分号(;)。

MariaDB [(none)]> CREATE USER luke@localhost IDENTIFIED BY 'linuxprobe';
Query OK, 0 rows affected (0.00 sec)

创建的用户信息可以使用SELECT命令语句来查询。下面命令查询的是用户luke的主机名称、用户名称以及经过加密的密码值信息:

MariaDB [(none)]> use mysql;
Database changed
MariaDB [mysql]> SELECT HOST,USER,PASSWORD FROM user WHERE USER="luke";
+-----------+------+-------------------------------------------+
| HOST      | USER | PASSWORD                                  |
+-----------+------+-------------------------------------------+
| localhost | luke | *55D9962586BE75F4B7D421E6655973DB07D6869F |
+-----------+------+-------------------------------------------+
1 row in set (0.001 sec)

不过,用户luke仅仅是一位普通用户,没有数据库的任何操作权限。不信的话,可以切换到luke用户来查询数据库管理系统中当前都有哪些数据库。可以发现,该用户甚至没法查看完整的数据库列表(刚才使用root用户时可以查看到3个数据库列表):

MariaDB [mysql]> exit
Bye
[root@linuxprobe ~]# mysql -u luke -p
Enter password: 输入luke用户的数据库密码
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 21
Server version: 10.3.11-MariaDB MariaDB Server

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

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

MariaDB [(none)]> SHOW databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.001 sec)

数据库管理系统所使用的命令一般都比较复杂。我们以GRANT命令为例进行说明。GRANT命令用于为用户进行授权,其常见格式如表下所示。在使用GRANT命令时需要写上要赋予的权限、数据库及表单名称,以及对应的用户及主机信息。其实,只要理解了命令中每个字段的功能含义,也就不觉得命令复杂难懂了。

GRANT命令的常见格式以及解释

命令作用
GRANT 权限 ON 数据库.表单名称 TO 用户名@主机名对某个特定数据库中的特定表单给予授权
GRANT 权限 ON 数据库.* TO 用户名@主机名对某个特定数据库中的所有表单给予授权
GRANT 权限 ON *.* TO 用户名@主机名对所有数据库及所有表单给予授权
GRANT 权限1,权限2 ON 数据库.* TO 用户名@主机名对某个数据库中的所有表单给予多个授权
GRANT ALL PRIVILEGES ON *.* TO 用户名@主机名对所有数据库及所有表单给予全部授权(需谨慎操作)

当然,用户的授权工作肯定是需要数据库管理员来执行的。下面以root管理员的身份登录到数据库管理系统中,针对mysql数据库中的user表单向用户luke授予查询、更新、删除以及插入等权限。

THE END
点赞0赞赏 分享
抢沙发
头像
提交
头像

昵称

取消
昵称表情

    暂无评论内容