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的权限:
+-------------------------------------------------------------------------------------------------------------+
| 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的信息:
+-------------------------------------------------------------------------------------------------------------+
| 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 | 在列中搜索多个值 |
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命令。