MySQL的體系結構與管理

2021-10-21 02:19:33 字數 4475 閱讀 3004

1.mysql的例項

乙個mysql例項的構成是:mysqld程序 + master thread程序 + worker thread程序 + 預分配的記憶體

簡單的說,mysql例項就是在一台伺服器上開啟乙個服務埠,同時執行mysql服務程序。同理,常說的mysql多例項就是在一台伺服器上開啟多個不同的服務埠(如3306、3307),同時執行多個mysql服務程序,這些服務程序通過不同的socket監聽不同的服務埠來提供服務

tips:mysql是典型的c/s結構,提供了兩種連線方式 tcp/ip和socket(1

)tcp/ip連線方式: 例如-->mysql -uroot -p123456 -h 10.0.0.51 -p3306 此種方式適用於遠端和本地連線,當一台伺服器中有多例項時,可通過"-p"引數來指定連線哪個例項(2

)socket連線方式: 例如-->mysql -uroot -p123456 -s /tmp/mysql.sock 此種方式只能用於本地連線,當一台伺服器中有多例項時,可通過不同例項的"***.sock"檔案來指定連線哪個例項

1.1通過一張圖來詳細了解一下mysqld的程式結構

(1)mysql> show processlist; 執行此語句後會顯示所有的已經和本資料庫建立的會話,每乙個會話就是乙個連線線程;其中yigemysql資料庫例項最大允許會話數是可以通過引數設定的,預設是151個。

(2)優化mysql功能的主要是在sql層進行操作的

1.2 mysql邏輯儲存結構

mysql>show charset;  檢視mysql資料庫中支援哪些字符集

常用的字符集為:utf8mb4、utf8

兩者的區別為:

utf8:最大支援3個位元組編碼乙個位元組,這樣有些編碼較長的字元就無法儲存了。若是想節省空間,那就選擇utf8字符集

例:修改乙個資料庫的字符集為utf8mb4:

mysql>alter database 資料庫名 charset utf8mb4;

修改一張表的字符集為utf8mb4:

mysql>alter table 表名 charset utf8mb4

修改表中某一字段的字符集為utf8mb4,並使用utf8mb4_general_ci校對規則:

mysql>alter table 表名 change 欄位名 欄位名 字段約束 character set utf8mb4 collate utf8mb4_general_ci;

或mysql>alter table 表名 modify 欄位名 字段約束 character set utf8mb4 collate utf8mb4_general_ci;

tip:

1、若建立資料庫時指定了字符集和儲存引擎,那麼在此資料庫中建立的表會自動繼承資料庫的字符集型別和儲存引擎的型別。

2、執行"alter database 資料庫名 charset utf8mb4;"語句後,mysql中的"character_set_database"引數也會被修改。

"character_set_database"此引數決定著新建資料庫的字符集型別。

mysql>show collaton;  檢視所有的校對規則

例如:utf8mb4_general_ci 是針對utf8mb4字符集,按照普通的字母排序且不區分大小寫的校對規則,如:a b c d。(以"_ci"結尾的校對規則,都是大小寫不敏感的校對規則;以"_cs"結尾的校對規則,都是大小寫敏感的校對規則)

utf8mb4_bin 是針對utf8mb4字符集,按照二進位制排序的校對規則,如:b d a c

數字型別:

整數:tinyint 乙個位元組

int 四個位元組

浮點數:

字串型別:

char(最大允許255個字元) 定長字串型別,一旦設定成功,系統就會立即分配指定字元長度的儲存空間。若儲存的字串長度小於設定的長度,為佔滿的空間使用"空格"填充

例如:char(

11)設定成功後,系統就會立馬分配11個字元長度的儲存空間

varchar(最大允許65535個字元) 變長字串型別,每次儲存資料前,系統都要計算一下此字串的長度,按需分配磁碟空間

例如:varchar(

11)設定成功後,系統並不會立馬分配磁碟空間,而是根據儲存的字串的長度來分配空間,但是最大字串長度不能超過11個字元

此外,varchar()型別系統會根據所儲存字串的長度來單獨申請相應的空間來儲存"字元長度"。比如字串長度小於255,那麼只需要分配1個位元組的空間;大於255,就需要分配兩個位元組及以上的空間了

enum列舉型別

如:city enum(

'sz','sh','bj'

) 建表時可用於列舉一些同類的事務

時間型別

datetime 範圍:1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999

timestamp 範圍:1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999

二進位制型別

建表舉例:

create table study.test(

'id' int not null,

'city' enum(

'sz','bj','sh'

), 'time' datatime null,

primary key(

'id');

)插入資料:

insert into study.test(id,city,time) values(

1,'sz','2020-03-05 08:08:08'

);

1.3mysql物理儲存結構

)innodb儲存引擎下,資料儲存的基本單位稱為page(頁),大小為16k,可通過設定"innodb_page_size"引數改變(2

)當mysql資料庫中要申請空間儲存資料時,就會一次性直接分配連續的64頁儲存空間,即1m的連續空間。這64頁連續的空間稱之為"區"(3

)page的大小可以通過引數改變,但是區的大小時固定的

1.mysql的啟動和關閉

1.1日常的啟停

tip:

以上的兩種方式啟動mysql服務都無法在命令列指定引數,來檢視mysql服務相應的運**況,從而也就無法進行維護。centos 6啟動mysql服務是命令列只允許"mysql.server start|stop|restart"

;centos 7啟動mysql服務雖然可以在配置檔案my.cnf指定引數,但是每次要檢視mysql服務不同的狀態就得修改配置檔案,比較麻煩

所以若想在命令列中指定具體的引數來檢視mysql服務的相應執行狀態,需要使用維護模式,就是我們自己呼叫mysql服務啟動中所需的指令碼:mysqld_safe、mysqld

1.2維護性任務

[root@db01 ~]

#mysqld_safe & 啟動維護模式

[root@db01 ~]

#mysqladmin -uroot -p123456 shutdown 關閉維護模式

我們忘記mysql使用者密碼時使用的"mysqld_safe --skip-grant-tables --skip-networking &"命令就是進入維護模式了,

其中"--skip-grant-tables"、"--skip-networking"就是我們指定的引數,讓我們登入mysql服務是跳過授權表。

tip:

mysql服務允許有多個配置檔案:

[root@db01 ~]

# mysqld --help --verbose |grep my.cnf 檢視mysql服務有哪些配置檔案

/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

[root@db01 ~]

#mysqld_safe --default-file=/tmp/***.txt & 強制使用自定義的配置檔案

mysql服務啟動時,配置檔案的讀取順序為依次從左到右。後面配置檔案的配置資訊會覆蓋前面配置檔案的配置資訊。(不建議使用多個配置檔案容易出錯)

mysql 體系結構 了解MySQL體系結構

mysql 資料庫體系結構圖 mysql 由以下幾部分組成 1 connectors 不同語言中與 sql 的互動 show variables like connection variable name value character set connection utf8 collation c...

簡述mysql體系結構 MySQL體系結構

一 mysql登入方式 一 tcp ip方式 遠端 本地 mysql uroot poldboy123 h 10.0.0.51 p3306 二 socket方式 mysql uroot poldboy123 s tmp mysql.sock 二 例項介紹 例項 mysqld後台守護程序 主線程 ma...

Mysql體系結構管理

1 資料是乙個典型的c s結構的服務1.mysql自帶的客戶端工具 mysql mysqladmin mysqldump 3.mysql是乙個二進位制程式,後台守護程序 單程序多執行緒2 mysql的連線方式1.tcp ip連線 2.socket連線 tcp ip連線 mysql uroot p h...