首先對於Centos7的系統,他是自帶的MariaDB數據庫的,可以使用
sudo rpm -qa | grep mariadb
但是阿里雲服務器中好像是沒有這個數據庫的,需要自己下載;如果虛擬機中的MariaDB數據庫中缺少什麼東西,再下載就好了
yum -y install mariadb-devel
yum -y install mariadb-server
前期準備
- 查看
mariadb
數據庫的狀態
service mariadb status
- 關閉
mariadb
數據庫服務
service mariadb stop
- 開啓
mariadb
數據庫服務
service mariadb start
中間所需要使用的密碼是root
用戶的密碼
- 配置登錄文件
一開始的時候,我們沒有設置數據庫的登錄密碼,可以使用這個方式,先跳過登錄時的權限驗證,等到成功登錄後,再進行設置登錄密碼。
sudo vim /etc/my.cnf
//插入
skip-grant-tables #跳過數據庫權限驗證
這樣就可以免密登錄數據庫了
- 重啓數據庫
service mariadb restart
- 查看版本信息
select version();
數據庫操作
- 登錄數據庫
mysql -u root
- 切換到MySQL數據庫
use mysql
- 更新數據庫的登錄密碼
update user set password=password('新的密碼')
where user='root' and host='localhost';
刷新MySQL權限相關的表
flush privileges;
- 退出數據庫
quit;
- 使用密碼進行登錄數據庫
先在/etc/my.cnf
文件中註釋掉剛纔加入的跳過權限驗證語句
在重啓mariadb
數據庫後,使用密碼進行登錄
mysql -u root -p
這裏的密碼和root用戶登錄時的密碼一樣,都是不會顯示出來的
MySQL 的連接原理
MySQL所佔用的端口號爲3306
,我們啓動MySQL服務端後,使用命令查看這個端口後
netstat -anp | grep 3306
可以看到他使用的TCP協議
我們在啓動MySQL服務端時,會先啓動守護進程mysqld
,再連接MySQL服務端。這樣我們在使用的過程中,萬一MySQL服務端崩潰的時候,就可以使用守護進程重新拉起MySQL服務端。
ps aux | grep mysqld
- 選擇連接的協議:
當客戶端發起連接的時候,服務端的處理過程
連接層中:
- 用戶驗證
- 選擇連接的協議
我們在自己的主機上連接的時候,也就是本地的MySQL客戶端,那麼是不用走網絡協議棧的,只是通過域套接字來完成客戶端與服務端的進程間通信
我們在linux下進行連接(本地客戶端)
的時候,3306這個端口並沒有產生新的連接;但是我們在windows下進行連接(遠端客戶端)
的時候,就發生了一次TCP連接。(telnet,使用時需要打開linux中的23和3306兩個端口)
域套接字
就是創建的一個文件,然後客戶端和服務端通過這個文件來進行通信(也就是進程間通信
)
因爲通信是通過文件來完成的,所以接收數據和發送數據使用的是文件操作,read,write
- 創建線程對客戶端進行服務(多線程通信)
server層中:
- 檢查SQL語句的語法是否正確
- 語義分析
- 權限檢查,判斷當前用戶是否有對該表操作的權限
- 分析SQL語句的查找方案,選擇一個執行效率最高的方案
- 執行SQL語句 --》
存儲引擎去執行
存儲引擎
相當於是一個Linux操作系統中的文件文件系統。不同的存儲引擎,可以決定着數據的存儲方式,索引類型,事務等方式。
而其中的數據都是在磁盤中的。
基本操作
sql語句即爲結構化的查詢語句,其中數據庫定義語言(DDL),數據庫操作語言(DCL),數據庫修改語言(DML)
- 使用數據庫
use [數據庫的名稱]; #可以切換數據庫
- 查看當前數據庫中的數據表
show tables;
- 數據庫的創建
create database [數據庫的名稱] charset=[字符集];
- 查看創建的數據庫的過程
show create database [數據庫的名稱];
如果MySQL的版本大於4.0,就默認採用latin1字符格式。
常見的幾個字符集
- ASCII字符集:採用的是1個字節的低7位表示字符,高位始終爲0
- LATIN1字符集:相對於ASCII字符集而言,他啓動了最高位
- GBK字符集:支持了中文字符,字符所佔的大小爲1個字節或者2個字節
- UTF8字符集:Unicode字符集,他支持所有國家的文字字符,用1-4個字節來表示字符大小。
當我們使用默認的字符集的時候,我們對一個表中插入中文字符,就會顯示爲亂碼的格式。
這就是因爲中文字符一般都是1-4個字節,但是默認的LATIN1字符集卻只有一個字節的大小,就會發生截取的現象,讀取後就會出現亂碼。(本來是一個數據,卻被分成了幾份顯示)
發生亂碼的原因就是前後端字符集不匹配
- 查詢數據庫中的字符集格式
show variables like '%character%';
校對規則
校對規則有什麼用呢? 當我們想要對插入的數據進行排序的時候,如果數據是一個(dcl)和(DCL),那麼該怎麼進行排序。。。。
校對規則的種類
- 區分大小寫,他的規則的後綴爲
_cs
- 不區分大小寫,他的規則的後綴爲
_ci
- 後綴爲
_bin
,表示以二進制進行區分,這也是大小寫敏感的
show collation; # 查看校對規則
校對規則的特徵:
- 不同的字符集有不同的校對規則
- 每一個字符集都有自己的默認校對規則
(UTF8字符集的默認校對規則爲utf8_general_ci
),不區分大小寫
MySQL 是不區分大小寫的
create databases [數據庫名稱]
collate [校對規則];
刪庫
drop database [數據庫名稱];
注意:刪除的數據庫如果沒有備份,那麼是不可能進行還原的。(跟linux中的 rm 命令是一個道理)
- 數據庫的備份
mysqldump -P[端口] -u[用戶] -p[密碼] -B[數據庫的名稱] > 數據庫備份存儲文件的路徑;
然後這個.sql的文件中,所存儲的就是在這個數據庫中所有執行的語句
- 備份的還原
source [備份數據庫文件的路徑,相對路徑,絕對路徑都可以];
- 表備份
mysqldump -P[端口] -u[用戶] -p[密碼] 數據庫名稱 表1 表2... > 數據表備份存儲的文件路徑;