Linux 資料庫操作(一)

z.^me發表於2021-08-09

我們可以將用於資料服務的資料庫分為關係型資料庫和非關係型資料庫,關係型資料庫最典型的就是Mysql,以及和他同源的MariaDB資料庫,oracle等,非關係型資料庫則有redis資料庫,mongodb(文件型的資料庫),ES等,未來很火的NewSQL資料庫,TiDB、Tdengine等等。

下面我們以MariaDB資料庫為例來說在Linux中的各種操作。

1.安裝MariaDB資料庫

[root@local ~]# yum install mariadb-server mariadb -y

2.開啟資料庫服務和設定開機自動啟動

[root@local ~]# systemctl start mariadb
[root@local ~]# systemctl enable mariadb

如果在安裝或操作的過程中,程式出現了錯誤,我們可以在日誌裡面去檢視

[root@local ~]# cat /var/log/mariadb/mariadb.log

3.安裝完成之後,我們用命令檢查下資料庫3306埠(預設)是否開放

[root@local ~]# netstat -lntup|grep mysql

或者用管道命令檢視3306埠是否開放

[root@local ~]# netstat -lntup|grep 3306

4.在較高版本的MariaDB中,預設登入時會產生一串隨機數密碼,但是在較低的版本(5.7.0)中,預設值是空,我們使用的是(5.5.68-MariaDB)版本,所以給Mariadb配置登陸密碼,並使用新密碼進行登入資料庫。

[root@local ~]# mysqladmin password 'test123'

這裡我們將密碼設定為test123.,設定好之後沃恩可以用命令登入到資料庫

[root@local ~]# mysql -uroot -ptest123

上面一行程式碼表示,我們用root賬戶,密碼為test123登入到MariaDB,退出時鍵入quit即可。

5.修改MariaDB資料庫密碼,在修改資料庫密碼時,必須輸入原登入賬戶和密碼,後接新密碼才可以,

[root@local ~]# mysqladmin -uroot -ptest123 password 'test'

以上命令就是將資料庫的密碼由test123改為test,這時我們再登入資料庫就要用test登入,原密碼不能再使用

可以看到,已經登入成功了,此時如果我們再用原密碼登入,則會失敗

6.找回資料庫的密碼,如果我們忘記了root使用者的密碼,怎麼樣能夠找回,我們可以用命令忽略授權表啟動,就是繞過密碼啟動,首先停掉資料庫,再啟動

[root@local ~]# systemctl stop mariadb
[root@local ~]# /bin/sh /usr/bin/mysqld_safe --basedir=/usr --skip-grant-table &
--skip-grant-table    #此選項就是忽略授權表
&              #&符號是放在後臺啟動

MariaDB>mysql

MariaDB> UPDATE mysql.user SET password=PASSWORD("oldboy123") WHERE user='root' and host='localhost';
MariaDB> flush privileges;

用以上命令將資料庫密碼設定為test123,flush privileges命令就是讓配置生效

 

 下面我們就可以用新密碼進行資料庫登入操作

因為資料庫是講究及其安全的,我們剛才用了忽略授權表啟動,所以我們要將其程式殺掉

現在3306埠已經停掉了,我們再用密碼登入

[root@local ~]# systemctl start mariadb
[root@local ~]# mysql -uroot -ptest123

 

7.資料庫使用者管理

7.1檢視資料庫有哪些使用者

 

以上命令就是從資料庫的使用者表裡面查詢有哪些使用者

7.2 刪除使用者

drop user 'user'@'主機域';

 

以上程式碼我們就刪掉了一個host名為"::1"的使用者

7.3建立使用者

因為使用者的許可權大多涉及到對資料庫的各種操作,比如root使用者,它的許可權極大,我們就賦予它l域名為localhost訪問,也就是說它只能再本地進行登入操作,在我們自己建立使用者的時候,可以指定域名欄位,允許在其規定的域名段內訪問資料庫,建立使用者名稱的語法:create user  ceshi@'10.0.0.%' identified by 'ceshi123';(ceshi:資料庫使用者名稱,10.0.0.%:規定使用者只能在此端內訪問資料庫,ceshi123:資料庫使用者密碼)

使用者預設是沒有許可權的,下面是授權的方法

7.3.1檢視使用者許可權:show grants for ceshi@'10.0.0.%';

 

顯示可以登入但是沒有許可權,並且我們設定的密碼系統經過了加密。

7.3.2 使用者授權

我們授權某一個使用者管理某一個資料庫,前提是我們在整個資料庫中有此庫存在,我們先來看一下有哪些資料庫

我們就以test庫為例,將ceshi使用者賦予管理此庫的許可權

以上命令旨在ceshi使用者擁有管理test庫下所有資料的一切許可權,檢視一下授權,測試使用者就會有一個管理資料庫的許可權

7.4 直接增加使用者許可權

grant all privileges on dbname.* to username@localhost identified by 'passwd';

但是新版的MariaDB資料庫支援使用者和許可權分離,這樣安全性更高一些,當我們所有使用者建立完成後,都要執行:flush privileges;讓配置生效。

這裡有一個重要的問題,就是自己建立的使用者,其使用者本身是否再有執行建立使用者的許可權,這個是至關重要的,所以我們在實際的工作當中,不能給建立的使用者:grant all privileges,所有許可權

all privileges包含以下所有能執行的許可權:

SELECT 查詢(資料)
INSERT 插入(資料)
UPDATE 修改(資料)
DELETE 刪除(資料)
=============================================
CREATE 建立(資料庫、表等物件)
DROP 刪除(資料庫、表等物件)
RELOAD 過載
SHUTDOWN 關閉

PROCESS 程式
FILE 檔案
REFERENCES 參考資料
INDEX 索引
ALTER 修改(資料庫、表等物件)
SHOW DATABASES 檢視資料庫
SUPER 超級許可權
CREATE TEMPORARY TABLES 建立臨時表
LOCK TABLES 鎖表
EXECUTE 執行
REPLICATION SLAVE 從複製許可權
REPLICATION CLIENT 從客戶端複製
CREATE VIEW 建立檢視
SHOW VIEW 檢視檢視
CREATE ROUTINE 建立儲存過程
ALTER ROUTINE 修改儲存過程
CREATE USER 建立使用者
EVENT 事件
TRIGGER 觸發器
CREATE TABLESPACE 建立表空間

所以在實際生產環境中,我們可以給建立的使用者分配部分許可權,命令可以這樣:

grant SELECT,INSERT,UPDATE,DELETE on test.* to ceshi@localhost identified by 'test123';

只允許有增刪改查的許可權。

7.資料庫表管理

7.1檢視庫

7.2檢視當前使用的庫

我們目前在test庫下

7.3 檢視庫下的表

 

 這裡顯示為空,因為我們還沒有在此庫下建立表,為更加直觀的表示,我們選擇blog庫,檢視其資料表的結構

可以看到blog庫下建立了資料表,我們現在可以檢視一下blog_users一列的資訊

以下方法也是檢視blog_users一列的資訊,兩者一樣

8.資料庫管理

8.1建立資料庫

8.2檢視建庫的語句

可以看見資料庫預設的字元是拉丁字元,稍後我們在配置檔案中修改預設字符集,工作字元是:utf8,gbk,utf8mb4,修改之一的做法就是我們建立一個utf8的資料庫,這樣在插入中文的時候就不會亂碼

8.3刪除庫

9.資料表

9.1建立資料表

9.2 檢視建表語句:

 

這裡需要注意的是,表是在庫下面,所以先有庫,再有表。

 9.3 修改表的名稱

9.4刪除表

9.5 表中插入資料

9.6 檢視錶結構

9.7解決表中中文亂碼,修改字符集配置檔案

9.7.1備份和修改配置服務端檔案

9.7.2修改客戶端配置檔案

這個時候我們回到資料庫裡面,發現依然是亂碼

檢視建庫和建表語句,發現原來他們的初始預設字元是拉丁

9.8更改字符集

可以將資料庫檔案匯出來,做一次備份,臨時放到/tmp下面

[root@local ~]# mysqldump -uroot -ptest123 -B test>/tmp/a.sql

[root@local /tmp]# vim a.sql

 

現在我們將修改過的檔案匯入到資料庫中,因為我們已經做過備份,所以可以將資料庫中的表刪除

利用寫入重定向命令,將編輯好的檔案匯入資料庫

可以看到,test資料庫已經存在了,為保證修改過的資料庫文能夠正常載入執行,我們建議先停掉資料庫服務,再重新啟動

1 [root@local /tmp]# systemctl stop mariadb
2 [root@local /tmp]# systemctl start mariadb
3 [root@local /tmp]# mysql -uroot -ptest123

可以看到,我們已經成功將字符集修改,在表中插入中文,不再顯示亂碼,這就是修改字符集的方法之一。當然還可以用命令列去修改字符集。

9.9更新資料庫(update)

我們以test庫為例,來修改(更新)資料表中id=4的欄位

再有,我們也可以修改(更新)資料表中某一行的某一列,比如我們修改test1表中的第一行的第四列

或者

以上我們取name或者id都可以將資料更新,因為他們都在同一行。

9.10 刪除資料表中的欄位

仍然使用test1資料表,現在刪除id=4的行,我們就可以有如下操作

當然,我們也可以同時刪除多個行

在這裡,有個邏輯概念,就是我們在刪除多個id行的時候,不能用and,因為一個表中不可能同時有兩者或兩者以上id是相同的情況,所以我們如果在命令中使用and來並列刪除,會出現邏輯錯誤。

還有一個需要注意的是,我們在刪除的時候,極其危險,我們一定要在delete 後面跟條件where ,如若不然,會將整個資料表刪除,那將是天大的災難。

下面再刪除年齡大於28歲的欄位

也可以多個條件套用進行刪除,這裡的邏輯和上面的例子是一樣的,比如要刪除年齡小於26歲,並且大於27歲的欄位

 

綜合以上就是資料庫的增刪改查,以及資料表的增刪改查,包括修改預設字符集等等,希望對有需要的小夥伴有所幫助。

---《墨雲流香》

QQ:1757468585

 

 

 

 

 

 

 

 

 

 

 

相關文章