Linux就該這么學》最新正式版已出版上市,同學們可在線上京東網當當網淘寶網亞馬遜等電商平臺購買。

*亦可就近在新華書店購買*

章節簡述:

MySQL數據庫項目自從被Oracle公司收購之后,從開源軟件轉變成為了“閉源”軟件,這導致IT行業中的很多企業以及廠商紛紛選擇使用了數據庫軟件的后起之秀—MariaDB數據庫管理系統。MariaDB數據庫管理系統也因此快速占據了市場。

本章將介紹數據庫以及數據庫管理系統的理論知識,然后再介紹MariaDB數據庫管理系統的內容,最后將通過動手實驗的方式,幫助各位讀者掌握MariaDB數據庫管理系統的一些常規操作。比如,賬戶的創建與管理、賬戶權限的授權;新建數據庫、新建數據庫表單;對數據庫執行新建、刪除、修改和查詢等操作。本章最后還介紹了數據庫的備份與恢復方法。

在學完本章內容之后,讀者不但可以勝任生產環境中的數據庫管理工作,還可以掌握RHCE考試中數據庫管理主題相關的內容。

18.1 數據庫管理系統

數據庫是指按照某些特定結構來存儲數據資料的數據倉庫。在當今這個大數據技術迅速崛起的年代,互聯網上每天都會生成海量的數據信息,數據庫技術也從最初只能存儲簡單的表格數據的單一集中存儲模式,發展到了現如今存儲海量數據的大型分布式模式。在信息化社會中,能夠充分有效地管理和利用各種數據,挖掘其中的價值,是進行科學研究與決策管理的重要前提。同時,數據庫技術也是管理信息系統、辦公自動化系統、決策支持系統等各類信息系統的核心組成部分,是進行科學研究和決策管理的重要技術手段。

數據庫管理系統是一種能夠對數據庫中存放的數據進行建立、修改、刪除、查找、維護等操作的軟件程序。它通過把計算機中具體的物理數據轉換成適合用戶理解的抽象邏輯數據,有效地降低數據庫管理的技術門檻,因此即便是從事Linux運維工作的工程師也可以對數據庫進行基本的管理操作。但是,劉遄老師有必要提醒各位讀者,本書的技術主線依然是Linux系統的運維,而數據庫管理系統只不過是在此主線上的一個內容不斷橫向擴展、縱向加深的分支,不能指望在一兩天之內就可以精通數據庫管理技術。如果有讀者在學完本章內容之后對數據庫管理技術產生了濃厚興趣,并希望謀得一份相關的工作,那么就需要額外為自己定制一個學習規劃了。

marialANDmysql

圖18-1 MariaDB與Mysql數據庫管理系統著名LOGO

既然是講解數據庫管理技術,就肯定繞不開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認證考試和技術壟斷的角度作的決定。

出現問題?大膽提問!

因讀者們硬件不同或操作錯誤都可能導致實驗配置出錯,請耐心再仔細看看操作步驟吧,不要氣餒~

Linux技術交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群

*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學》的讀者,答疑更有針對性,不定期免費領取定制禮品。

18.2 初始化mariaDB服務

相較于MySQL,MariaDB數據庫管理系統有了很多新鮮的擴展特性,例如對微秒級別的支持、線程池、子查詢優化、進程報告等。在配置妥當Yum軟件倉庫后,即可安裝部署MariaDB數據庫主程序及服務端程序了。

在安裝完畢后,記得啟動服務程序,并將其加入到開機啟動項中。

[[email protected] ~]# 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!
[[email protected] ~]# systemctl start mariadb 
[[email protected] ~]# systemctl enable mariadb 
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'

在確認MariaDB數據庫軟件程序安裝完畢并成功啟動后請不要立即使用。為了確保數據庫的安全性和正常運轉,需要先對數據庫程序進行初始化操作。這個初始化操作涉及下面5個步驟。

  1. 設置root管理員在數據庫中的密碼值(注意,該密碼并非root管理員在系統中的密碼,這里的密碼值默認應該為空,可直接按回車鍵)。
  2. 設置root管理員在數據庫中的專有密碼。
  3. 隨后刪除匿名賬戶,并使用root管理員從遠程登錄數據庫,以確保數據庫上運行的業務的安全性。
  4. 刪除默認的測試數據庫,取消測試數據庫的一系列訪問權限。
  5. 刷新授權列表,讓初始化的設定立即生效。

對于上述數據庫初始化的操作步驟,劉遄老師已經在下面的輸出信息旁邊進行了簡單注釋,確保各位讀者更直觀地了解要輸入的內容:

[[email protected] ~]# 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管理員從遠程訪問。然后還需要設置防火墻,使其放行對數據庫服務程序的訪問請求,數據庫服務程序默認會占用3306端口,在防火墻策略中服務名稱統一叫作mysql:

[[email protected] ~]# firewall-cmd --permanent --add-service=mysql
success
[[email protected] ~]# firewall-cmd --reload
success

一切準備就緒。現在我們將首次登錄MariaDB數據庫。其中,-u參數用來指定以root管理員的身份登錄,而-p參數用來驗證該用戶在數據庫中的密碼值。

[[email protected] ~]# 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
[[email protected] ~]# mysql -u root -p
Enter password:此處輸入root管理員在數據庫中的新密碼
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
18.3?管理用戶以及授權

在生產環境中總不能一直“死啃”root管理員。為了保障數據庫系統的安全性,以及讓其他用戶協同管理數據庫,我們可以在MariaDB數據庫管理系統中為他們創建多個專用的數據庫管理賬戶,然后再分配合理的權限,以滿足他們的工作需求。為此,可使用root管理員登錄數據庫管理系統,然后按照“CREATE USER 用戶名@主機名 IDENTIFIED BY '密碼'; ”的格式創建數據庫管理賬戶。再次提醒大家,一定不要忘記每條數據庫命令后面的分號(;)。

MariaDB [(none)]> CREATE USER [email protected] 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
[[email protected] ~]# 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命令時需要寫上要賦予的權限、數據庫及表單名稱,以及對應的賬戶及主機信息。其實,只要理解了命令中每個字段的功能含義,也就不覺得命令復雜難懂了。

表18-1?????????????????????????????????????? GRANT命令的常見格式以及解釋

命令 作用
GRANT 權限 ON 數據庫.表單名稱 TO 用戶名@主機名 對某個特定數據庫中的特定表單給予授權
GRANT 權限 ON 數據庫.* TO 用戶名@主機名 對某個特定數據庫中的所有表單給予授權
GRANT 權限 ON *.* TO 用戶名@主機名 對所有數據庫及所有表單給予授權
GRANT 權限1,權限2 ON 數據庫.* TO 用戶名@主機名 對某個數據庫中的所有表單給予多個授權
GRANT ALL PRIVILEGES ON *.* TO 用戶名@主機名 對所有數據庫及所有表單給予全部授權(需謹慎操作)

當然,賬戶的授權工作肯定是需要數據庫管理員來執行的。下面以root管理員的身份登錄到數據庫管理系統中,針對mysql數據庫中的user表單向賬戶luke授予查詢、更新、刪除以及插入等權限。

劉遄老師特別懂同學們現在心里想的是什么~哈哈,我起初也覺得在每條數據庫命令后都要加上;(分號)來結束特別的不方便,時常還會忘記,但敲的命令多了也就自然習慣了。授權操作執行后來查看下luke用戶的權限吧:

[[email protected] ~]# 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 [email protected];
Query OK, 0 rows affected (0.00 sec)

在執行完上述授權操作之后,我們再查看一下賬戶luke的權限:

[cc lang="bash"]
MariaDB [(none)]>? [email protected];
+-------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+-------------------------------------------------------------------------------------------------------------+
| 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)
[/cc]

上面輸出信息中顯示賬戶luke已經擁有了針對mysql數據庫中user表單的一系列權限了。這時我們再切換到賬戶luke,此時就能夠看到mysql數據庫了,而且還能看到表單user(其余表單會因無權限而被繼續隱藏):

[[email protected] ~]# 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賬戶,移除剛才的授權。

[[email protected] ~]# 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,[email protected];
Query OK, 0 rows affected (0.00 sec)

可以看到,除了移除授權的命令(revoke)與授權命令(grant)不同之外,其余部分都是一致的。這不僅好記而且也容易理解。執行移除授權命令后,再來查看賬戶luke的信息:

[cc lang="bash"]
MariaDB [(none)]> [email protected];
+-------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+-------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'luke'@'localhost' IDENTIFIED BY PASSWORD '*55D9962586BE75F4B7D421E6655973DB07D6869F' |
+-------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
[/cc]
出現問題?大膽提問!

因讀者們硬件不同或操作錯誤都可能導致實驗配置出錯,請耐心再仔細看看操作步驟吧,不要氣餒~

Linux技術交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群

*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學》的讀者,答疑更有針對性,不定期免費領取定制禮品。

18.4 創建數據庫與表單

在MariaDB數據庫管理系統中,一個數據庫可以存放多個數據表,數據表單是數據庫中最重要最核心的內容。我們可以根據自己的需求自定義數據庫表結構,然后在其中合理地存放數據,以便后期輕松地維護和修改。表18-2羅列了后文中將使用到的數據庫命令以及對應的作用。

表18-2??????????????????????????????????????? 用于創建數據庫的命令以及作用

用法 作用
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)
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命令將剛才插入的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命令是在數據庫中進行匹配查詢的條件命令。通過設置查詢條件,就可以僅查找出符合該條件的數據。表18-3列出了where命令中常用的查詢參數以及作用。

表18-3?????????????????????????????????????? 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管理員的家目錄中:

[[email protected] ~]# 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數據表單了。數據庫恢復成功!

[[email protected] ~]# mysql -u root -p linuxprobe < /root/linuxprobeDB.dump 
Enter password: 此處輸入root管理員在數據庫中的密碼值
[[email protected] ~]# 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)

出現問題?大膽提問!

因讀者們硬件不同或操作錯誤都可能導致實驗配置出錯,請耐心再仔細看看操作步驟吧,不要氣餒~

Linux技術交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群

*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學》的讀者,答疑更有針對性,不定期免費領取定制禮品。

本章節的復習作業(答案就在問題的下一行哦,用鼠標選中即可看到的~)

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命令。

本文原創地址:http://www.9500870.com/chapter-18.html編輯:劉遄,審核員:暫無