Linux学习笔记RHEL 7(八)--RedHat 7.0使用MariaDB数据库管理系统

MariaDB数据库安装步骤移步我的另一篇文章: RHEL 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)

一、管理用户以及授权

为了保障数据库系统的安全性,以及让其他用户协同管理数据库,我们可以在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
[root@linuxprobe ~]# mysql -u luke -p
Enter password: 此处输入luke账户的数据库密码(linuxprobe)
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命令的常见格式以及解释

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

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

[root@linuxprobe ~]# 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  '*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
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账户,移除刚才的授权。

[root@linuxprobe ~]# 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  '*55D9962586BE75F4B7D421E6655973DB07D6869F'  |
+-------------------------------------------------------------------------------------------------------------+
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)

管理表单及数据

下面我们使用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命令删除数据表单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命令中使用的参数以及作用

参数 作用
= 相等
<>或!= 不相等
> 大于
< 小于
>= 大于或等于
<= 小于或等于
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
 数据库的备份及恢复

本书的技术主线是Linux系统的运维方向,不会对数据库管理系统的操作进行深入的讲解,因此大家掌握了上面这些基本的数据库操作命令之后就足够了。下面要讲解的是数据库的备份以及恢复,这些知识比较实用,希望大家能够掌握。

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

[root@linuxprobe ~]# 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数据表单了。数据库恢复成功!

[root@linuxprobe ~]# mysql -u root -p linuxprobe < /root/linuxprobeDB.dump 
Enter password: 此处输入root管理员在数据库中的密码值
[root@linuxprobe ~]# 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)

本章节的重点作业:

1.RHEL 7系统为何选择使用MariaDB替代MySQL数据库管理系统?

答:因为MariaDB由开源社区进行维护,且不受商业专利限制。

2.初始化MariaDB或MySQL数据库管理系统的命令是什么?

答:是mysql_secure_installation命令,建议每次安装MariaDB或MySQL数据库管理系统后都执行这条命令。

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

答:要查看当前已有的数据库列表,需执行SHOW databases;命令;要查看已有的数据表单列表,则需执行SHOW tables;命令。

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

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

5.若想针对某个账户进行授权或取消授权操作,应该执行什么命令?

答:针对账户进行授权,需执行GRANT命令;取消授权则需执行REVOKE命令。

6.若只想查看mybook表单中的name字段,应该执行什么命令?

答:应执行SELECT name FROM mybook命令。

7.若只想查看mybook表单中价格大于75元的图书信息,应该执行什么命令?

答:应执行SELECT * FROM mybook WHERE price>75命令。

8. 要想把linuxprobe数据库中的内容导出为一个文件(保存到root管理员的家目录中),应该执行什么命令?

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


猜你喜欢

转载自blog.csdn.net/xiaotongbiji/article/details/79817933