使用 MariaDB 数据库管理系统

        MySQL 数据库项目自从被Oracle 公司收购之后,从开源软件转变成为了“闭源”软件,这导致 IT 行业中的很多企业以及厂商纷纷选择使用了数据库软件的后起之秀 — MariaDB 数据库管理系统。MariaDB 数据库管理系统也因此快速占据了市场。

        本章将介绍数据库以及数据库管理系统的理论知识,然后再介绍 MariaDB 数据库管理系统的内容,最后将通过动手实验的方式,帮助各位读者掌握 MariaDB 数据库管理系统的一些常规操作。比如,账户的创建与管理、账户权限的授权;新建数据库、新建数据库表单;对数据库执行新建、删除、修改和查询等操作。本章最后还介绍了数据库的备份与恢复方法。

        在学完本章内容之后,读者不但可以胜任生产环境中的数据库管理工作,还可以掌握RHCE 考试中数据库管理主题相关的内容。

        一、数据库管理系统

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

        数据库管理系统是一种能够对数据库中存放的数据进行建立、修改、删除、查找、维护等操作的软件程序。 它通过把计算机中具体的物理数据转换成适合用户理解的抽象逻辑数据,有效地降低数据库管理的技术门槛,因此即便是从事 Linux 运维工作的工程师也可以对数据库进行基本的管理操作。但是,有必要提醒各位读者,本书的技术主线依然是 Linux系统的运维,而数据库管理系统只不过是在此主线上的一个内容不断横向扩展、纵向加深的分支,不能指望在一两天之内就可以精通数据库管理技术。如果有读者在学完本章内容之后对数据库管理技术产生了浓厚兴趣,并希望谋得一份相关的工作,那么就需要额外为自己定制一个学习规划了。

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

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

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

        二、初始化 MariaDB 服务

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

# yum install mariadb mariadb-server

Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos,

              : subscription-manager

………………省略部分输出信息………………

Installing:

mariadb                    x86_64    1:5.5.60-1.el7_5      base    8.9 M

mariadb-server              x86_64    1:5.5.60-1.el7_5      base      11 M

Installing for dependencies:

perl-Compress-Raw-Bzip2    x86_64    2.061-3.el7            base      32 k

perl-Compress-Raw-Zlib      x86_64    1:2.061-4.el7          base      57 k

perl-DBD-MySQL              x86_64    4.023-6.el7            base    140 k

perl-DBI                    x86_64    1.627-4.el7            base    802 k

perl-Data-Dumper            x86_64    2.145-3.el7            base      47 k

perl-IO-Compress            noarch    2.061-2.el7            base    260 k

perl-Net-Daemon            noarch    0.48-5.el7            base      51 k

perl-PlRPC                  noarch    0.2020-14.el7          base      36 k

Transaction Summary

====================================================================

Install  2 Packages (+8 Dependent packages)

Total download size: 21 M

Installed size: 110 M

Is this ok [y/d/N]: y

Downloading packages:

Total 700 kB/s | 21 MB 00:30

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

………………省略部分输出信息………………

Installed:

  mariadb.x86_64 1:5.5.60-1.el7_5    mariadb-server.x86_64 1:5.5.60-1.el7_5 

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-6.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!

# systemctl start mariadb

# systemctl enable mariadb

Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

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

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

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

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

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

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

        对于上述数据库初始化的操作步骤,已经在下面的输出信息旁边进行了简单注释,确保各位读者更直观地了解要输入的内容:

# 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:(设置要为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 管理员从远程访问。然后还需要设置防火墙,使其放行对数据库服务程序的访问请求,数据库服务程序默认会占用 3306 端口,在防火墙策略中服务名称统一叫作 mysql:

# firewall-cmd --permanent --add-service=mysql

success

# firewall-cmd --reload

success

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

# 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)]>

        在登录 MariaDB 数据库后执行数据库命令时,都需要在命令后面用分号(;)结尾,这也是与 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)

        三、管理账户以及授权

        在生产环境中总不能一直“死啃”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

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

# 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命令用于为账户进行授权,其常见格式如表 18-1 所示。在使用 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 授予查询、更新、删除以及插入等权限。

# mysql -u root –p

Enter password: (只处输入root管理员在数据库中的密码)

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 '*55D9962586

BE75F4B7D421E6655973DB07D6869F' |

| GRANT SELECT, INSERT, UPDATE, DELETE ON `mysql`.`user` TO 'luke'@'localhost' |

+-----------------------------------------------------------------------------+

2 rows in set (0.00 sec)

        上面输出信息中显示账户 luke 已经拥有了针对 mysql 数据库中 user 表单的一系列权限了。这时我们再切换到账户 luke,此时就能够看到 mysql 数据库了,而且还能看到表单 user(其余表单会因无权限而被继续隐藏) :

# mysql -u luke –p

Enter password: (此处输入luke用户在数据库中的密码)

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 账户,移除刚才的授权。

# mysql -u root -p

Enter password: root

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)

        可以看到,除了移除授权的命令(revoke)与授权命令(grant)不同之外,其余部分都是一致的。这不仅好记而且也容易理解。执行移除授权命令后,再来查看账户 luke 的信息:

MariaDB [(none)]>SHOW GRANTS FOR luke@localhost;

+-----------------------------------------------------------------------------+

| Grants for luke@localhost |

+-----------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'luke'@'localhost' IDENTIFIED BY PASSWORD '*55D9962586

BE75F4B7D421E6655973DB07D6869F' |

+-----------------------------------------------------------------------------+

1 row in set (0.00 sec)


        四、创建数据库与表单

        在 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,然后进行表单的初始化,即定义存储数据内容的结构。我们分别定义 3 个字段项,其中,长度为 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)

        五、管理表单及数据

        接下来向 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 命令将刚才插入的 linuxprobe 图书信息的价格修改为 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 命令删除某个数据表单中的内容。下面我们使用 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 命令是在数据库中进行匹配查询的条件命令。通过设置查询条件,就可以仅查找出符合该条件的数据。下表列出了 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

        六、数据库的备份及恢复

        mysqldump 命令用于备份数据库数据,格式为“mysqldump [参数] [数据库名称]” 。其中参数与 mysql 命令大致相同,-u 参数用于定义登录数据库的账户名称,-p 参数代表密码提示符。下面将 linuxprobe 数据库中的内容导出成一个文件,并保存到 root 管理员的家目录中:

# mysqldump -u root -p linuxprobe > /root/linuxprobeDB.dump

Enter password:(此处输入root管理员在数据库中的密码)

        然后进入 MariaDB 数据库管理系统,彻底删除 linuxprobe 数据库,这样 mybook 数据表单也将被彻底删除。然后重新建立 linuxprobe 数据库:

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 数据库,就又能看到 linuxprobe 数据库以及 mybook 数据表单了。数据库恢复成功!

# mysql -u root -p linuxprobe < /root/linuxprobeDB.dump

Enter password:  (此处输入root管理员在数据库中的密码)

# mysql -u root -p

Enter password:  (此处输入root管理员在数据库中的密码)

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)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容