00:00/00:00

本章节已编写及校对完毕,现有奖征集建议、若您发现本章中有错别字或补充欢迎联系刘遄老师QQ:5604583。

章节简述:

本章节将会由介绍数据库及数据库管理系统理论引入MariaDB数据库软件知识内容,Mysql数据库项目被Oracle公司收购后从开源转向成为了封闭软件,导致众多IT领袖企业及厂商纷纷选择使用了后起之秀MariaDB数据库管理系统,也因此快速拥有了很大市场占有率。刘遄老师会带领同学们进行多项MariaDB数据库管理系统的操作实验,例如对数据库内用户帐户进行创建管理、权限授权等管理命令学习,以及尝试新建数据库、数据库表单,进而对数据库内容进行新建、删除、修改、查询等的数据库常用操作,课程最后还额外增添了数据库的备份及恢复方法。总之学完本章节课程后,不仅可以完全满足了红帽RHCE考题要求,更能够帮助读者在今后从事Linux运维工程师工作期间解决基本数据库管理需求。

18.1 数据库管理系统

数据库是指按照某些特定结构来存储数据资料的软件仓库程序,在当今这个互联网及大数据技术迅速崛起的疯狂时代,在人们生活中也无时无刻都在接触着海量的数据信息,数据库技术已经从最初只能够存储简单表格发展到了存储海量数据的大型分布式模式。尤其是在信息化社会环境下,能够充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的重要前提条件,同时现在数据库技术也是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心组成部分,是进行科学研究和决策管理的重要技术手段。

数据库管理系统是一种能够对数据库内容进行建立、修改、删除、查找、维护等等操作的软件程序,数据库管理系统通过把计算机中具体的物理数据转换成适合用户理解的抽象逻辑数据,有效降低管理数据库的技术门槛,因此即便是学习Linux运维方向的工程师也能够对数据库内容进行基本的管理操作。但刘遄老师有必要提醒同学们您手中的这本《Linux就该这么学》书籍的技术主线依然是学习Linux系统的运维技术,数据库管理系统的学习是在主线之上的不断扩展内容之一,不能指望用一两天时间就能精通某门计算机语言或某项技术,因此如果学习本章节内容后对数据库管理系统技术变得兴趣十足,那么就为自己再定下一个长远学习目标。

Mysql是一款当前市场占有率非常高的数据库管理系统,它的技术十分成熟,配置步骤相对简单、并且具有良好的可扩展性,但由于2009年Sun公司被收购了,Mysql项目也被转入到了oracle公司中变成了一项虽然开源、但却又存在多项专利封闭的软件程序。咱们在书籍第0章中介绍过开源软件是全球黑客、极客、程序员等技术高手在开源社区的大旗下的公共智慧结晶,自己的劳动成果被其他公司商业化自然也伤了一大批开源工作者的心,因此由Mysql项目创始者重新研发了一款名为MariaDB的全新数据库管理系统,这款软件当前是由开源社区维护的分支产品,几乎完全兼容Mysql数据库管理系统。同时由于各大公司之间也存在着竞争关系或利益关系,因此在Mysql软件被收购后逐渐从开源陷入封闭的过程中,已经有类似于谷歌公司、维基百科公司等等技术领袖决定转移Mysql数据库的业务到MariaDB数据库,Linux开源系统的领袖厂商红帽 公司也已经决定把RHEL7系统、Centos7系统以及最新Fedora系统的全线产品的默认数据库管理系统定为mariadb,并在这十几年的发展中,首次把数据库课程加入到了红帽RHCE认证的考核内容中,随后还有大量如Opensuse、Slackware等等数十个常见Linux系统做出了同样的表态。

但坦白讲,虽然谷歌、维基百科及红帽公司这样的行业巨头都已经决定采用了最新的MariaDB数据库管理系统,但这并不意味着就比Mysql有明显的优势了,刘遄老师用了将近两周的时间亲测了MariaDB与Mysql的区别,并进行了多项性能测试,认为其实并没有像媒体说的那样有了明显优势。在性能上MariaDB与Mysql基本是保持一致的,而操作命令上更是十分相似,不夸张的说,当咱们学会了MariaDB数据库的命令后,在今后的工作中遇到遇到了Mysql数据库也能够轻松上手。因此刘遄老师认为这两款数据库系统学习哪一个都是可以的,而在书中选择MariaDB数据库的原因主要是从红帽RHCE考试认证和技术垄断的角度而作出的决定。
marialANDmysql

图18-1 MariaDB与Mysql数据库管理系统著名LOGO

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

18.2 初始化mariaDB服务

MariaDB数据库管理系统相比于Mysql数据库管理系统有了很多新鲜的扩展特性,例如对微秒级别的支持、线程池、子查询优化、进程报告等等技术,决定学习MariaDB数据库管理系统绝对是一个非常正确的选择。配置妥当Yum软件仓库后即可开始安装部署MariaDB数据库主程序及服务端程序了,当然刘遄老师又要啰嗦一下,记得启动服务程序,并加入到开机启动中哦~

[root@linuxprobe ~]# yum install mariadb mariadb-server
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分输出信息………………
Installing:
 mariadb x86_64 1:5.5.35-3.el7 rhel 8.9 M
 mariadb-server x86_64 1:5.5.35-3.el7 rhel 11 M
Installing for dependencies:
 perl-Compress-Raw-Bzip2 x86_64 2.061-3.el7 rhel 32 k
 perl-Compress-Raw-Zlib x86_64 1:2.061-4.el7 rhel 57 k
 perl-DBD-MySQL x86_64 4.023-5.el7 rhel 140 k
 perl-DBI x86_64 1.627-4.el7 rhel 802 k
 perl-Data-Dumper x86_64 2.145-3.el7 rhel 47 k
 perl-IO-Compress noarch 2.061-2.el7 rhel 260 k
 perl-Net-Daemon noarch 0.48-5.el7 rhel 51 k
 perl-PlRPC noarch 0.2020-14.el7 rhel 36 k
Transaction Summary
================================================================================
Install 2 Packages (+8 Dependent packages)
Total download size: 21 M
Installed size: 107 M
Is this ok [y/d/N]: y 
Downloading packages:
--------------------------------------------------------------------------------
Total 82 MB/s | 21 MB 00:00 
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
………………省略部分输出信息………………
Installed:
 mariadb.x86_64 1:5.5.35-3.el7 mariadb-server.x86_64 1:5.5.35-3.el7 
Dependency Installed:
 perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7 
 perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7 
 perl-DBD-MySQL.x86_64 0:4.023-5.el7 
 perl-DBI.x86_64 0:1.627-4.el7 
 perl-Data-Dumper.x86_64 0:2.145-3.el7 
 perl-IO-Compress.noarch 0:2.061-2.el7 
 perl-Net-Daemon.noarch 0:0.48-5.el7 
 perl-PlRPC.noarch 0:0.2020-14.el7
Complete!
[root@linuxprobe ~]# systemctl start mariadb 
[root@linuxprobe ~]# systemctl enable mariadb 
 ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'

确认MariaDB数据库软件程序安装完毕并启动成功后请不要立即使用,为了确保数据库的安全性和正常运转,咱们需要先进行对数据库程序初始化操作。这个过程需要经历五个步骤,首先需要让用户来设置root用户在数据库中的密码值,但需要注意该密码并非root管理员用户在系统中的密码,因此默认密码值应该为空,直接回车即可。然后设置root用户在数据库中的专有密码,然后是一次删除匿名帐户以及进行root管理员帐户从远程登陆数据库,这样做能够很有效的保证数据库上运行业务的安全性,然后是删除默认的测试数据库,并取消对其测试数据库的一系列访问权限,最后是刷新授权表,让初始化的设定立即生效。对于上面所谈到的数据库初始化步骤,刘遄老师已经在下面输出信息旁边又进行了简单注释,同学们可以更直观的明白要输入的内容:

[root@linuxprobe ~]# mysql_secure_installation 
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found
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: 输入要为root用户设置的数据库密码。
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(禁止root用户从远程登录)
 ... 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(删除test数据库并取消对其的访问权限)
 - 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管理员帐户从远程访问的策略,然后再设置防火墙允许对本机mysql服务程序的访问请求即可:

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

一切就绪!~快来尝试初次登陆到您的MariaDB数据库中吧,分别用-u参数来指定用超级管理员root用户来登陆,而-p参数作用是验证该用户的密码值:

[root@linuxprobe ~]# mysql -u root -p
Enter password: 此处输入root用户在数据库中的密码
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.35-MariaDB MariaDB Server
Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>

同学们最不习惯的地方一定是每次执行数据库命令后都要用;(分号)结尾,这应该也是与Linux命令最显著的区别的,每条数据库命令后面都要加上结束符,一定要记住并且慢慢习惯这种设定哦~例如可以尝试查看下当前数据库管理系统都有那些数据库:

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

小试牛刀后感觉如何呢?接下来用数据库命令修改下超级管理员root用户在数据库管理系统中的密码值为linuxprobe吧,这样退出后再尝试登陆,就会被提示访问失败啦~

MariaDB [(none)]> set password = password('linuxprobe');
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
[root@linuxprobe ~]# mysql -u root -p
Enter password:此处输入root用户在数据库中的新密码
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
18.3 管理用户以及授权

在生产环境中总不能一直“死啃”root管理员帐户吧~为了保证数据库系统的安全性,以及让其他工程师人员协同管理数据库内容,咱们可以在MariaDB数据库管理系统中为他们创建出多个数据库专用的帐户,然后再进行合理的权限分配,这样还一定能大大的提升工作效率呢。登陆数据库管理系统后便可以按照CREATE USER 用户名@主机名 IDENTIFIED BY '密码';的格式来创建出数据库专用帐号信息,同学们一定要切记每条数据库命令后面还有个不能省略的;(分号)呦~

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

帐户信息可以使用select命令语句来进行查询,下面代码查询的是该用户的主机名称、帐户名称以及经过加密的密码值信息:

MariaDB [(none)]> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mysql]> select host,user,password from user where user="luke";
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | luke | *55D9962586BE75F4B7D421E6655973DB07D6869F |
+-----------+------+-------------------------------------------+

不过当前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 6
Server version: 5.5.35-MariaDB MariaDB Server
Copyright (c) 2000, 2013, Oracle, Monty Program 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.03 sec)

数据库管理系统中的命令一般是比较复杂的,比如给用户进行授权而使用的grant命令吧,它就要求在使用时需要写上要赋予的权限,数据库及表单名称,以及对应的用户及主机信息,但实际只要一旦理解了每个字段的功能含义,其实命令复杂一些也不难懂,GRANT授权命令的常见格式如下表:

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

普通用户当然不能够随便给自己授权啦,就像给每位公民都赠送了一台印钞机,那人们肯定就不会再继续踏实工作了,人类社会协作关系也就会瞬间崩塌啦。所以在做这种高级操作前需要先登陆到root管理员帐户身份上来,然后再进行授权操作,给予luke用户对mysql数据库中user表单的查询、更新、删除及插入权限:

[root@linuxprobe ~]# mysql -u root -p
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mysql]> GRANT SELECT,UPDATE,DELETE,INSERT on mysql.user to luke@localhost;
Query OK, 0 rows affected (0.00 sec)

刘遄老师特别懂同学们现在心里想的是什么~哈哈,我起初也觉得在每条数据库命令后都要加上;(分号)来结束特别的不方便,时常还会忘记,但敲的命令多了也就自然习惯了。授权操作执行后来查看下luke用户的权限吧:

MariaDB [(none)]> show grants for luke@localhost;
+-------------------------------------------------------------------------------------------------------------+
| Grants for luke@localhost |
+-------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'luke'@'localhost' IDENTIFIED BY PASSWORD '*55D9962586BE75F4B7D421E6655973DB07D6869F' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `mysql`.`user` TO 'luke'@'localhost' |
+-------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

上面输出信息中已经明确显示luke用户有对mysql数据库中user表单的一系列操作权限了,那么这时再尝试切换到luke用户就会发现能够看到mysql这个数据库了,切换进去后发现能够看到一个叫做user的表单(其余表单会因无权限而被继续隐藏):

[root@linuxprobe ~]# mysql -u luke -p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
+--------------------+
2 rows in set (0.01 sec)
MariaDB [(none)]> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mysql]> show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| user            |
+-----------------+
1 row in set (0.01 sec)
MariaDB [mysql]> exit
Bye

同学们不要心急,咱们接下来会慢慢来学习对数据库内容的修改方法,先切换成root管理员帐户试试把刚刚的授权给移除掉吧~

[root@linuxprobe ~]# mysql -u root -p
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [(none)]> revoke SELECT,UPDATE,DELETE,INSERT on mysql.user from luke@localhost; 
Query OK, 0 rows affected (0.00 sec)

授权命令是grant、移除授权命令是revoke,其余部分都是一致的,不仅好记而且也好理解,执行移除授权命令后再来查看下luke用户的信息吧:

MariaDB [(none)]> show grants for luke@localhost;
+-------------------------------------------------------------------------------------------------------------+
| Grants for luke@localhost |
+-------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'luke'@'localhost' IDENTIFIED BY PASSWORD '*55D9962586BE75F4B7D421E6655973DB07D6869F' |
+-------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

18.4 创建数据库与表单

MariaDB数据库管理系统最重要的作用之一就是能够管理数据库及表单内容,一个数据库中可以存放多个数据表,数据表是数据库中最实质的内容,咱们可以定义独一无二的数据库表结构,然后合理的存放数据内容,这样在今后的维护、修改时都会体验到十分便捷,刘遄老师把接下来会使用到的数据库命令及对应的作用先总结一下把:

用法 作用
CREATE database 数据库名称。 创建新的数据库。
DESCRIBE 表单名称; 描述表单。
UPDATE 表单名称 SET attribute=新值 WHERE attribute > 原始值; 更新表单中的数据。
USE 数据库名称; 指定使用的数据库。
SHOW databases; 显示当前已有的数据库。
SHOW tables; 显示当前数据库中的表单。
SELECT * FROM 表单名称; 从表单中选中某个记录值。
DELETE FROM 表单名 WHERE attribute=值; 从表单中删除某个记录值。

建立数据库是管理一切数据内容的起点,尝试创建一个名称为linuxprobe的数据库,然后再查看数据库列表就能看到它了:

MariaDB [(none)]> create database linuxprobe;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| linuxprobe         |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.04 sec)

想创建数据表单,就要先切换到某个指定的数据库中,例如可以在新建的linuxprobe数据库中创建一个叫做mybook的表单。表单初始化即需要定义存储数据内容的结构,咱们分别定义三个字段项,能够存储15个字符的name字段是用来保存书籍名称的,而整数类型的price与pages则分别是一会存储书籍价格和页数用的~这样当创建命令执行成功后,即可看到表单的结构信息啦:

MariaDB [(none)]> use linuxprobe;
Database changed
MariaDB [linuxprobe]> create table mybook (name char(15),price int,pages int);
Query OK, 0 rows affected (0.16 sec)
MariaDB [linuxprobe]> describe mybook;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(15) | YES  |     | NULL    |       |
| price | int(11)  | YES  |     | NULL    |       |
| pages | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.02 sec)
18.5 管理表单及数据

接下来向刚刚创建的mybook数据库表单写入一条书籍信息,插入数据库内容要使用insert命令,写清表单名称以及对应的字段项目,就可以插入一条名称叫做linuxprobe的书籍啦,它的价格和页数分别是60元和518页。命令执行后也就意味着书籍信息已经被写入成功了,咱们便可以来查询表单中的内容啦,使用select命令查询表单内容的时候需要加上想要查询的字段,如果想查看表单中的所有内容也可以干脆使用*(星号)通配符来显示所有内容:

MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprobe','60','518');
Query OK, 1 row affected (0.00 sec)
MariaDB [linuxprobe]> select * from mybook;
+------------+-------+-------+
| name       | price | pages |
+------------+-------+-------+
| linuxprobe |    60 |   518 |
+------------+-------+-------+
1 rows in set (0.01 sec)

数据库运维人员讲究四门功课——增、删、改、查,这意味着创建和插入数据库表单内容仅仅是第一步,还需要进一步学习数据库表内容的修改方法,例如咱们可以用update命令把刚刚插入的书籍价格修改为55元,然后再用select命令指定查看下书籍的名称和价格信息,不要再用*(星号)通配符显示所有内容啦:

MariaDB [linuxprobe]> update mybook set price=55 ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
MariaDB [linuxprobe]> select name,price from mybook;
+------------+-------+
| name       | price |
+------------+-------+
| linuxprobe |    55 |
+------------+-------+
1 row in set (0.00 sec)

同学们还可以用delete命令来删除某个表单中的内容,例如可以清空删除mybook表单中的所有内容,这样再来查询的话也看不到书籍信息啦:

MariaDB [linuxprobe]> delete from mybook;
Query OK, 1 row affected (0.01 sec)
MariaDB [linuxprobe]> select * from mybook;
Empty set (0.00 sec)

一般数据库表单中都会有成千上万条的数据条目,例如刚刚创建用于保存书籍信息的mybook表单,如果经过时间的推移里面的书籍信息也会变得越来越多,那么如果只是想查看售卖价格大于某个价格的书籍时又该如何定义查询语句呢?咱们先使用刚刚学习过的insert插入命令来依次插入4条书籍信息:

MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprobe1','30','518');
Query OK, 1 row affected (0.05 sec)
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprobe2','50','518');
Query OK, 1 row affected (0.05 sec)
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprobe3','80','518);
Query OK, 1 row affected (0.01 sec)
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprobe4','100','518');
Query OK, 1 row affected (0.00 sec)

要想让查询结果更加精准,那么就需要把select结合where命令来一起使用了,where是用于在数据库中进行匹配查询的条件命令,咱们可以设置一个查询的条件,那么就仅会查找出符合该条件的数据内容,常用的参数包括有:

参数 作用
= 相等。
<>或!= 不相等。
> 大于。
< 小于。
>= 大于或等于。
<= 小于或等于。
BETWEEN 在某个范围内。
LIKE 搜索一个例子。
IN 在列中搜索多个值。

实践动手操作下啦,分别在mybook表单中查找出价格大于75元或价格不等于80元的书籍,这两个查询条件练熟之后还可以再自己试试挑战下精准查询名称为linuxprobe2的书籍信息吧~

MariaDB [linuxprobe]> select * from mybook where price>75;
+-------------+-------+-------+
| name        | price | pages |
+-------------+-------+-------+
| linuxprobe3 |    80 |   518 |
| linuxprobe4 |   100 |   518 |
+-------------+-------+-------+
2 rows in set (0.06 sec)
MariaDB [linuxprobe]> select * from mybook where price!=80;
+-------------+-------+-------+
| name | price | pages        |
+-------------+-------+-------+
| linuxprobe1  | 30  | 518    |
| linuxprobe2  | 50  | 518    |
| linuxprobe4  | 100 | 518    |
+-------------+-------+-------+
3 rows in set (0.01 sec)
MariaDB [mysql]> exit
Bye
18.6 数据库的备份及恢复

由于咱们的技术主线是成为Linux系统运维工程师,因此在学完上面这些数据库管理命令后能够对数据库管理系统有一定的了解就已经足够了,另外数据库的备份及恢复也是比较实用的技术。mysqldump命令用于备份数据库数据,格式为:“mysqldump [参数] [数据库名称],其中参数与mysql命令大致相同,-u参数用于定义登陆数据库的用户名称,而-p参数代表密码提示符。例如接下来把linuxprobe数据库内容导出成一个文件保存到root管理员用户的家目录中:

[root@linuxprobe ~]# mysqldump -u root -p linuxprobe > /root/linuxprobeDB.dump
Enter password: 

进入到MariaDB数据库管理系统中把linuxprobe数据库完整的删除掉再重新建立,这样mybook数据库表单也将被彻底的清空掉:

MariaDB [(none)]> drop database linuxprobe;
Query OK, 1 row affected (0.04 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.02 sec)
MariaDB [(none)]> create database linuxprobe;
Query OK, 1 row affected (0.00 sec)

接下来就是见证数据恢复效果的时刻啦,使用输入重定向符把刚刚备份的数据库文件导入到mysql命令中,命令执行成功后再登陆到MariaDB数据库中就会发现又能看到数据库以及表单了,恢复数据库内容成功!~

[root@linuxprobe ~]# mysql -u root -p linuxprobe < /root/linuxprobeDB.dump 
Enter password: 此处输入root管理员帐户在数据库中的密码值
[root@linuxprobe ~]# mysql -u root -p
MariaDB [(none)]> use linuxprobe;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [linuxprobe]> show tables;
+----------------------+
| Tables_in_linuxprobe |
+----------------------+
| mybook               |
+----------------------+
1 row in set (0.05 sec)
MariaDB [linuxprobe]> describe mybook;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(15) | YES  |     | NULL    |       |
| price | int(11)  | YES  |     | NULL    |       |
| pages | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.02 sec)

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

本章节的复习作业(答案就在问题的下一行哦,用鼠标选中即可看到的~)

1:红帽RHEL7系统为何选择使用MariaDB替代MYSQL数据库管理系统?

答案:因为MariaDB基于开放的开源社区,遵守GPL协议且不受商业封闭垄断。

2:对MariaDB或Mysql数据库管理系统的初始化操作命令是什么?

答案:初始化操作是执行mysql_secure_installation命令,建议每次安装后都执行它。

3:查看已有数据库或数据库表单的命令是什么?

答案:查看数据库列表需执行show databases;命令,而查看数据库表单列表则需执行show tables;命令。

4:切换至某个数据库的命令是什么?

答案:执行“use 数据库名称”命令即可切换成功。

5:若想为某个用户进行授权或取消授权操作,应该执行什么命令?

答案:对用户授权应执行grant命令,而取消授权操作应执行revoke命令。

6:若想要只查看mybook表单中的name书籍名称字段,应该执行什么命令?

答案:应执行select name from mybook命令。

7:若想要只查看mybook表单中的price销售价格大于75元的书籍信息,应该执行什么命令?

答案:应执行select * from mybook where price>75命令。

8:若想要把数据库linuxprobe备份导出为文件,应该执行什么命令?

答案:应执行mysqldump -u root -p linuxprobe > /root/linuxprobeDB.dump命令。