1.? 數據庫管理系統
數據庫是指按照某些特定結構來存儲數據資料的數據倉庫。在當今這個大數據技術迅速崛起的年代,互聯網上每天都會生成海量的數據信息,數據庫技術也從最初只能存儲簡單的表格數據的單一集中存儲模式,發展到了現如今存儲海量數據的大型分布式模式。在信息化社會中,能夠充分有效地管理和利用各種數據,挖掘其中的價值,是進行科學研究與決策管理的重要前提。同時,數據庫技術也是信息管理系統、辦公自動化系統、決策支持系統等各類信息系統的核心組成部分,是進行科學研究和決策管理的重要技術手段。?
數據庫管理系統是一種能夠對數據庫中存放的數據進行建立、修改、刪除、查找、維護等操作的軟件程序。它通過把計算機中具體的物理數據轉換成適合用戶理解的抽象邏輯數據,有效地降低數據庫管理的技術門檻,因此即便是從事 Linux 運維工作的工程師也可以對數據庫進行基本的管理操作。但是,我們的技術主線依然是 Linux 系統的運維,而數據庫管理系統只不過是在此主線上的一個內容不斷橫向擴展、縱向加深的分支,不能指望在一兩天之內就可以精通數據庫管理技術。
既然是講解數據庫管理技術,就肯定繞不開 MySQL。MySQL 是一款市場占有率非常高的數據庫管理系統,技術成熟,配置步驟相對簡單,而且具有良好的可擴展性。但是,由于Oracle 公司在 2009年收購了 MySQL的母公司 Sun,因此 MySQL數據庫項目也隨之納入 Oracle麾下,逐步演變為保持著開源軟件的身份,但又申請了多項商業專利的軟件系統。開源軟件是全球黑客、極客、程序員等技術高手在開源社區的大旗下的公共智慧的結晶,自己的勞動成果被其他公司商業化自然也傷了一大批開源工作者的心,因此 MySQL 項目的創始人重新研發了一款名為 MariaDB 的全新數據庫管理系統。?
2.? 初始化 mariadb 服務?
相較于 MySQL,MariaDB 數據庫管理系統有了很多新鮮的擴展特性,例如對微秒級別的支持、線程池、子查詢優化、進程報告等。在配置妥當軟件倉庫后,即可安裝部署 MariaDB數據庫主程序及服務端程序了。
[root@linuxprobe~]# dnf install -y mariadb mariadb-server
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use
subscription-manager to register.
Last metadata expiration check: 0:00:19 ago on Tue 27 Apr 2021 05:04:27 PM CST.
Dependencies resolved.
=============================================================================== Package Arch Version Repository Size
===============================================================================
Installing: mariadb x86_64 3:10.3.11-1.module+el8+2765+cfa4f87b AppStream 6.2 M mariadb-server x86_64 3:10.3.11-1.module+el8+cfa4f87b AppStream 16 M
Installing dependencies: mariadb-common x86_64 3:10.3.11-1.module+el8+cfa4f87b AppStream 62 k mariadb-connector-c x86_64 3.0.7-1.el8 AppStream 148 k mariadb-connector-c-config noarch 3.0.7-1.el8 AppStream 13 k mariadb-errmsg x86_64 3:10.3.11-1.module+el8+cfa4f87b AppStream 232 k perl-DBD-MySQL x86_64 4.046-2.module+el8+0650e81c AppStream 156 k
Installing weak dependencies: mariadb-backup x86_64 3:10.3.11-1.module+el8+cfa4f87b AppStream 6.2 M mariadb-gssapi-server x86_64 3:10.3.11-1.module AppStream 49 k mariadb-server-utils x86_64 3:10.3.11-1.module+el8 AppStream 1.6 M
Enabling module streams: mariadb 10.3 perl-DBD-MySQL 4.046 Transaction Summary
===============================================================================
Install 10 Packages
………………省略部分輸出信息………………
Installed: mariadb-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64 mariadb-server-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64 mariadb-backup-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64 mariadb-gssapi-server-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64 mariadb-server-utils-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64 mariadb-common-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64 mariadb-connector-c-3.0.7-1.el8.x86_64 mariadb-connector-c-config-3.0.7-1.el8.noarch mariadb-errmsg-3:10.3.11-1.module+el8+2765+cfa4f87b.x86_64 perl-DBD-MySQL-4.046-2.module+el8+2515+0650e81c.x86_64 Complete!
在安裝完畢后,記得啟動服務程序,并將其加入到開機啟動項中:?
[root@linuxprobe~]# systemctl start mariadb
[root@linuxprobe~]# systemctl enable mariadb
Created symlink /etc/systemd/system/mysql.service→ /usr/lib/systemd/system/
mariadb.service.
Created symlink /etc/systemd/system/mysqld.service→ /usr/lib/systemd/system/
mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service→ /
usr/lib/systemd/system/mariadb.service.
在確認 mariadb 數據庫軟件程序安裝完畢并成功啟動后請不要立即使用。為了確保數據庫的安全性和正常運轉,需要先對數據庫程序進行初始化操作。這個初始化操作涉及下面 5個步驟。?
? ?設置 root 管理員在數據庫中的密碼值(注意,該密碼并非 root 管理員在系統中的密碼,這里的密碼值默認應該為空,可直接按回車鍵)。?
? ?設置 root 管理員在數據庫中的專有密碼。?
? ?刪除匿名用戶,并使用 root 管理員從遠程登錄數據庫,以確保數據庫上運行的業務的安全性。?
? ?刪除默認的測試數據庫,取消測試數據庫的一系列訪問權限。?
? ?刷新授權列表,讓初始化的設定立即生效。?
對于上述數據庫初始化的操作步驟,已經在下面的輸出信息旁邊進行了簡單注釋,確保各位讀者更直觀地了解要輸入的內容:?
[root@linuxprobe~]# 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: (輸入新的密碼)
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 (禁止管理員從遠程登錄)... 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 (刪除測試數據庫及其權限)- 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:?
[root@linuxprobe~]# firewall-cmd --permanent --add-service=mysql
success
[root@linuxprobe~]# firewall-cmd --reload
success
一切準備就緒。現在我們將首次登錄 MariaDB 數據庫。管理數據庫的命令為 mysql,其中,-u 參數用來指定以 root 管理員的身份登錄,而-p 參數用來驗證該用戶在數據庫中的密碼值。?
[root@linuxprobe~]# mysql -u root -p
Enter password: (輸入剛才設置的管理員密碼后敲擊回車)
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 10.3.11-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
初次使用數據庫管理工具的讀者,可以輸入 help 命令查看 mariadb 服務能做的操作,語句的用法與 MySQL 一模一樣:?
MariaDB [(none)]> help
General information about MariaDB can be found at http://mariadb.org List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
? (\?) Synonym for `help'.
clear (\c) Clear the current input statement.
connect (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to mysql server, display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
help (\h) Display this help.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file. Takes a file name as an argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to_outfile]. Append everything into given outfile.
use (\u) Use another database. Takes database name as argument.
charset (\C) Switch to another charset. Might be needed for processing binlog
with multi-byte charsets.
warnings (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement. For server side help, type 'help contents'
在登錄 MariaDB 數據庫后執行數據庫命令時,都需要在命令后面用分號(;)結尾,這也是與 Linux 命令最顯著的區別。大家需要慢慢習慣數據庫命令的這種設定。下面執行如下命令查看數據庫管理系統中當前都有哪些數據庫:?
MariaDB [(none)]> SHOW databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.000 sec )
小試牛刀過后,接下來使用數據庫命令將 root 管理員在數據庫管理系統中的密碼值修改為 linuxprobe。這樣退出后再嘗試登錄,如果還堅持輸入原先的密碼,則將提示訪問失敗。?
MariaDB [(none)]> SET password = PASSWORD('linuxprobe');
Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]> exit
Bye
[root@linuxprobe~]# mysql -u root -p
Enter password: (此處輸入管理員在數據庫中的舊密碼)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
輸入新密碼(linuxprobe)后,便可順利進入數據庫管理工具中:?
[root@linuxprobe~]# mysql -u root -p
Enter password: (此處輸入管理員在數據庫中的新密碼)
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 20
Server version: 10.3.11-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
3.? 管理用戶以及授權?
在生產環境中總不能一直“死啃”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;
Database changed
MariaDB [mysql]> SELECT HOST,USER,PASSWORD FROM user WHERE USER="luke";
+-----------+------+-------------------------------------------+
| HOST | USER | PASSWORD |
+-----------+------+-------------------------------------------+
| localhost | luke | *55D9962586BE75F4B7D421E6655973DB07D6869F |
+-----------+------+-------------------------------------------+
1 row in set (0.001 sec)
不過,用戶 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 21
Server version: 10.3.11-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation 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.001 sec)
數據庫管理系統所使用的命令一般都比較復雜。我們以 GRANT 命令為例進行說明。GRANT 命令用于為用戶進行授權,其常見格式如表所示。在使用 GRANT 命令時需要寫上要賦予的權限、數據庫及表單名稱,以及對應的用戶及主機信息。其實,只要理解了命令中每個字段的功能含義,也就不覺得命令復雜難懂了。?
當然,用戶的授權工作肯定是需要數據庫管理員來執行的。下面以 root 管理員的身份登錄到數據庫管理系統中,針對 mysql 數據庫中的 user 表單向用戶 luke 授予查詢、更新、刪除以及插入等權限。?
[root@linuxprobe~]# mysql -u root -p
Enter password: (輸入管理員的數據庫密碼)
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.001 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.000 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.000 sec) MariaDB [(none)]> use mysql;
Database changed MariaDB [mysql]> SHOW tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| user |
+-----------------+
1 row in set (0.001 sec) MariaDB [mysql]> exit
Byes
大家不要心急,我們接下來會慢慢學習數據庫內容的修改方法。當前,先切換回 root 管理員用戶,移除剛才的授權。?
[root@linuxprobe~]# mysql -u root -p
Enter password: (輸入管理員的數據庫密碼)
MariaDB [(none)]> use mysql;
Database changed
MariaDB [(none)]> REVOKE SELECT,UPDATE,DELETE,INSERT ON mysql.user FROM
luke@localhost;
Query OK, 0 rows affected (0.00 sec)
可以看到,除了移除授權的命令(REVOKE)與授權命令(GRANTS)不同之外,其余部分都是一致的。這不僅好記而且也容易理解。執行移除授權命令后,再來查看用戶 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.001 sec)
不再需要某個用戶時,可以直接用 DROP 命令將其刪除:
MariaDB [(none)]> DROP user luke@localhost;
Query OK, 0 rows affected (0.000 sec)
4.? 創建數據庫與表單?
在 MariaDB 數據庫管理系統中,一個數據庫可以存放多個數據表,數據表單是數據庫中最重要最核心的內容。我們可以根據自己的需求自定義數據庫表結構,然后在其中合理地存放數據,以便后期輕松地維護和修改。表羅列了后文中將使用到的數據庫命令以及對應的作用。?
建立數據庫是管理數據的起點。現在嘗試創建一個名為 linuxprobe 的數據庫,然后再查看數據庫列表,此時就能看到它了:?
MariaDB [(none)]> CREATE DATABASE linuxprobe;
Query OK, 1 row affected (0.001 sec) MariaDB [(none)]> SHOW databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| linuxprobe |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)
MariaDB 與 MySQL 同屬于關系型數據庫(Relational ?Database ?Management ?System,RDBMS)。關系型數據庫有些類似于表格的概念,一個關系型數據庫由一個或多個表格/表單組成,如圖 18-2 所示。?
在圖 18-2 中,表頭表示每一列的名稱;列表示具有相同數據類型的數據集合;行表示用來描述事物的具體信息;值表示行的具體信息,每個值均與該列的其他數據類型相同;鍵表示用來識別某個特定事物的方法,在當前列中具有唯一性。?
比如,在新建的 linuxprobe 數據庫中創建表單 mybook,然后進行表單的初始化,即定義存儲數據內容的結構。我們分別定義 3 個字段項,其中,字符型字段 name(長度為 15 字符)用來存放圖書名稱,整型字段 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.009 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.002 sec)
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.001 sec) MariaDB [linuxprobe]> SELECT * from mybook;
+------------+-------+-------+
| name | price | pages |
+------------+-------+-------+
| linuxprobe | 60 | 518 |
+------------+-------+-------+
1 row in set (0.000 sec)
對數據庫運維人員來講,需要做好 4 門功課—增、刪、改、查。這意味著創建數據表單并在其中插入內容僅僅是第一步,還需要掌握數據表單內容的修改方法。例如,可以使用UPDATE 命令將剛才插入的 linuxprobe 圖書信息的價格修改為 55 元,然后再使用 SELECT 命令查看該圖書的名稱和定價信息。注意,因為這里只查看圖書的名稱和定價,而不涉及頁碼,所以無須再用星號通配符來顯示所有內容。?
MariaDB [linuxprobe]> UPDATE mybook SET price=55 ;
Query OK, 1 row affected (0.002 sec)
Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [linuxprobe]> SELECT name,price FROM mybook;
+------------+-------+
| name | price |
+------------+-------+
| linuxprobe | 55 |
+------------+-------+
1 row in set (0.000 sec)
想修改指定的某一條記錄?沒問題的,用 WHERE 命令進行限定即可。我們先插入兩條圖書信息:?
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxcool','85', '300');
Query OK, 1 row affected (0.001 sec)
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxdown','105', '500');
Query OK, 1 row affected (0.001 sec)
然后使用 WHERE 命令僅將名稱為 linuxcool 的圖書價格修改為 60 元,不影響其他圖書信息:?
MariaDB [linuxprobe]> UPDATE mybook SET price=60 where name='linuxcool';
Query OK, 1 row affected (0.001 sec)
Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [linuxprobe]> select * from mybook;
+------------+-------+-------+
| name | price | pages |
+------------+-------+-------+
| linuxprobe | 55 | 518 |
| linuxcool | 60 | 300 |
| linuxdown | 105 | 500 |
+------------+-------+-------+
3 rows in set (0.001 sec)
還可以使用 DELETE 命令刪除某個數據表單中的內容。下面使用 DELETE 命令刪除數據表單 mybook 中的所有內容,然后再查看該表單中的內容,可以發現該表單內容為空了:?
MariaDB [linuxprobe]> DELETE FROM mybook;
Query OK, 3 row affected (0.001 sec) MariaDB [linuxprobe]> SELECT * FROM mybook;
Empty set (0.000 sec)
一般來講,數據表單中會存放成千上萬條數據信息。比如我們剛剛創建的用于保存圖書信息的 mybook 表單,隨著時間的推移,里面的圖書信息也會越來越多。在這樣的情況下,如果只想查看其價格大于某個數值的圖書,又該如何定義查詢語句呢??
下面先使用 INSERT 插入命令依次插入 4 條圖書信息:?
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprob
e1','30','518');
Query OK, 1 row affected (0.05 sec)
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprob
e2','50','518');
Query OK, 1 row affected (0.05 sec)
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprob
e3','80','518');
Query OK, 1 row affected (0.01 sec)
MariaDB [linuxprobe]> INSERT INTO mybook(name,price,pages) VALUES('linuxprobe
4','100','518');
Query OK, 1 row affected (0.00 sec)
要想讓查詢結果更加精準,就需要結合使用 SELECT 與 WHERE 命令了。其中,WHERE命令是在數據庫中進行匹配查詢的條件命令。通過設置查詢條件,就可以僅查找出符合該條件的數據。表 18-3 列出了 WHERE 命令中常用的查詢參數以及作用。?
現在進入動手環節。分別在 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.001 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.000 sec)
匹配的條件越多,獲得的信息就越精準。在 WHERE 命令的后面追加 AND 操作符,可以進行多次匹配。例如,執行下述命令,找到價格為 30 元、頁數為 518 的圖書的名稱:?
MariaDB [linuxprobe]> SELECT * from mybook WHERE price=30 AND pages=518 ;
+-------------+-------+-------+
| name | price | pages|
+-------------+-------+-------+
| linuxprobe1 | 30 | 518 |
+-------------+-------+-------+
1 row in set (0.000 sec)
6.? 數據庫的備份及恢復
前文提到,本書的技術主線是 Linux 系統的運維方向,不會對數據庫管理系統的操作進行深入的講解,因此大家掌握了上面這些基本的數據庫操作命令之后就足夠了。下面要講解的是數據庫的備份以及恢復,這些知識比較實用,希望大家能夠掌握。?
mysqldump 命令用于備份數據庫數據,格式為“mysqldump [參數] [數據庫名稱]”。其中參數與 mysql 命令大致相同,-u 參數用于定義登錄數據庫的用戶名稱,-p 參數表示密碼提示符。下面將 linuxprobe 數據庫中的內容導出為一個文件,并保存到 root 管理員的家目錄中:
[root@linuxprobe~]# mysqldump -u root -p linuxprobe > /root/linuxprobeDB.dump
Enter password: (輸入管理員的數據庫密碼)
然后進入 MariaDB 數據庫管理系統,徹底刪除 linuxprobe 數據庫,這樣 mybook 數據表單也將被徹底刪除。然后重新建立 linuxprobe 數據庫:?
[root@linuxprobe~]# mysql -u root -p
Enter password: (輸入管理員的數據庫密碼) 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@linuxprobe~]# mysql -u root -p
Enter password: (輸入管理員的數據庫密碼)
MariaDB [(none)]> use linuxprobe;
Database changed MariaDB [linuxprobe]> SHOW tables;
+----------------------+
| Tables_in_linuxprobe |
+----------------------+
| mybook |
+----------------------+
1 row in set (0.000 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.002 sec)