2019-04-19 MySQL_day2_體系結(jié)構(gòu)與管理

1. 體系結(jié)構(gòu)

1.1 C/S(客戶端/服務(wù)端)模型介紹

image.png

TCP/IP方式(遠程绰筛、本地):
mysql -uroot -poldboy123 -h 10.0.0.51 -P3306
Socket方式(僅本地):
mysql -uroot -poldboy123 -S /tmp/mysql.sock

1.2 實例介紹

實例=mysqld后臺守護進程+Master Thread +干活的Thread+預(yù)分配的內(nèi)存
公司=老板+經(jīng)理+員工+辦公室

1.3 mysqld程序運行原理

1.3.1 mysqld程序結(jié)構(gòu)

image.png

1.3.2 一條SQL語句的執(zhí)行過程

1.3.2.1 連接層

(1)提供連接協(xié)議:TCP/IP 焚鲜、SOCKET
(2)提供驗證:用戶、密碼对嚼,IP舆吮,SOCKET
(3)提供專用連接線程:接收用戶SQL援所,返回結(jié)果
通過以下語句可以查看到連接線程基本情況

mysql> show processlist;  查看線程
1.3.2.2 SQL層 (重點)
(1)接收上層傳送的SQL語句
(2)語法驗證模塊:驗證語句語法
(3)語義檢查:判斷SQL語句的類型

  DDL :數(shù)據(jù)定義語言
  DCL :數(shù)據(jù)控制語言
  DML :數(shù)據(jù)操作語言
  DQL :數(shù)據(jù)查詢語言

(4)權(quán)限檢查:用戶對庫表有沒有權(quán)限
(5)解析器:對語句執(zhí)行前,進行預(yù)處理莫秆,生成解析樹(執(zhí)行計劃)
*解析樹:指生成多種執(zhí)行方案
(6)優(yōu)化器:根據(jù)解析器得出的多種執(zhí)行計劃匈子,進行判斷,選擇最優(yōu)的執(zhí)行計劃
        代價模型:資源(CPU IO MEM)的耗損評估性能好壞
(7)執(zhí)行器:根據(jù)最優(yōu)執(zhí)行計劃柱嫌,執(zhí)行SQL語句,產(chǎn)生執(zhí)行結(jié)果
執(zhí)行結(jié)果:在磁盤的xxxx位置上
(8)提供查詢緩存(默認是沒開啟的)滔岳,會使用redis tair替代查詢緩存功能
(9)提供日志記錄(日志管理章節(jié)):binlog杠娱,默認是沒開啟的。
1.3.2.3 存儲引擎層(類似于Linux中的文件系統(tǒng))

負責(zé)根據(jù)SQL層執(zhí)行的結(jié)果谱煤,從磁盤上拿數(shù)據(jù)摊求。將16進制的磁盤數(shù)據(jù),交由SQL架構(gòu)化成表刘离,由連接層的專用線程返回給用戶室叉。

1.4 邏輯結(jié)構(gòu)

1.4.1 庫:

庫名,庫權(quán)限硫惕,庫數(shù)據(jù)類型等

1.4.2 表(二維表)

列:字段
行:記錄
MySQL為了將來數(shù)據(jù)的準(zhǔn)確茧痕、規(guī)范、有意義恼除,對于傳統(tǒng)認知的二維表添加了更多的功能
表屬性:權(quán)限踪旷,存儲引擎,字符集
列屬性:數(shù)據(jù)類型豁辉、約束令野、其他屬性(默認值,自增長徽级,注釋)

1.5 物理存儲結(jié)構(gòu)引入

image.png

1.5.1 庫的物理存儲結(jié)構(gòu)

用文件系統(tǒng)的目錄來存儲

1.5.2 表的物理存儲結(jié)構(gòu)

MyISAM(一種引擎)的表:
-rw-r----- 1 mysql mysql   10816 Apr 18 11:37 user.frm
-rw-r----- 1 mysql mysql     396 Apr 18 12:20  user.MYD
-rw-r----- 1 mysql mysql    4096 Apr 18 14:48 user.MYI

InnoDB(默認的存儲引擎)的表:
-rw-r----- 1 mysql mysql    8636 Apr 18 11:37 time_zone.frm
-rw-r----- 1 mysql mysql   98304 Apr 18 11:37 time_zone.ibd
time_zone.frm:存儲列相關(guān)信息
time_zone.ibd:數(shù)據(jù)行+索引

1.5.3 表的段气破、區(qū)、頁(16k)(了解)

頁:最小的存儲單元
區(qū):1個或多個連續(xù)的頁
段:一個表就是一個段餐抢,包含一個或多個區(qū)

2. 基礎(chǔ)管理

2.1 用戶堵幽、權(quán)限管理

2.1.1 用戶

作用:
登錄,管理數(shù)據(jù)庫邏輯對象

定義:

用戶名@'白名單'
白名單支持的方式弹澎?
wordpress@'10.0.0.%'    
wordpress@'%'
wordpress@'10.0.0.200'
wordpress@'localhost'
wordpress@'db02'
wordpress@'10.0.0.5%'
wordpress@'10.0.0.0/255.255.254.0'

管理操作:

增:
mysql> create user oldboy@'10.0.0.%' identified by '123';
查:
mysql> desc mysql.user;    ---->  authentication_string
mysql> select user ,host ,authentication_string from mysql.user
改:
mysql> alter user oldboy@'10.0.0.%' identified by '456';
刪:
mysql> drop user oldboy@'10.0.0.%';

2.1.2 權(quán)限

權(quán)限管理操作:

mysql> grant all on wordpress.* to wordpress@'10.0.0.%' identified  by '123';

常用權(quán)限介紹:

ALL:
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
ALL : 以上所有權(quán)限朴下,一般是普通管理員擁有的
with grant option:超級管理員才具備的,給別的用戶授權(quán)的功能

權(quán)限作用范圍:

*.*                         ---->管理員用戶
wordpress.*          ---->開發(fā)和應(yīng)用用戶
wordpress.t1

需求1:windows機器的navicat登錄到linux中的MySQL苦蒿,管理員用戶殴胧。

mysql> grant all on *.* to root@'10.0.0.%' identified by '123';

需求2:創(chuàng)建一個應(yīng)用用戶app用戶,能從windows上登錄mysql佩迟,并能操作app庫

mysql> grant select ,update,insert,delete on app.* to app@'10.0.0.%' identified by '123';

2.1.3 開發(fā)人員用戶授權(quán)流程

1.權(quán)限
2.對誰操作
3.你從哪來
4.密碼要求

2.1.4 提示:8.0在grant命令添加新特性

建用戶和授權(quán)分開了
grant 不再支持自動創(chuàng)建用戶了团滥,不支持改密碼
授權(quán)之前,必須要提前創(chuàng)建用戶报强。

2.1.5 查看授權(quán)

mysql> show grants for app@'10.0.0.%';

2.1.6 回收權(quán)限

revoke  delete on app.*  from app@'10.0.0.%'灸姊;

2.1.7 本地管理員用戶密碼忘記.

[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
mysql
mysql> flush privileges;
mysql>  alter user root@'localhost' identified by '123';

2.2 連接管理

2.2.1 自帶客戶端命令

mysql 常用參數(shù):

-u                   用戶
-p                   密碼
-h                   IP
-P                  端口
-S                  socket文件
-e                   免交互執(zhí)行命令
<                    導(dǎo)入SQL腳本

登錄方法——遠程登錄

[root@db01 ~]# mysql -uroot -p -h 10.0.0.51 -P3306
Enter password:

登錄方法——遠程登錄

mysql> select @@socket;
+-----------------+
| @@socket        |
+-----------------+
| /tmp/mysql.sock |
[root@db01 ~]# mysql -uroot -p -S /tmp/mysql.sock
Enter password:
[root@db01 ~]# mysql -uroot -p -e "select user,host from mysql.user;"
Enter password:
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| abc          | 10.0.0.%  |
| app          | 10.0.0.%  |
| root          | 10.0.0.%  |
| mysql.session | localhost |
| mysql.sys    | localhost |
| root          | localhost |
+---------------+-----------+
[root@db01 ~]#
[root@db01 ~]# mysql -uroot -p <world.sql
Enter password:

2.3 多種啟動方式介紹

image.png

提示:
以上多種方式,都可以單獨啟動MySQL服務(wù)
mysqld_safe和mysqld一般是在臨時維護時使用秉溉。
另外力惯,從Centos 7系統(tǒng)開始碗誉,支持systemd直接調(diào)用mysqld的方式進行啟動數(shù)據(jù)庫

2.4 初始化配置

2.4.1 初始化配置的方法

預(yù)編譯
配置文件
命令行

2.4.2 初始配置文件

初始化配置文件的默認讀取路徑
[root@db01 ~]# mysqld --help --verbose |grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
初始化配置文件讀取順序
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
默認情況下,MySQL啟動時父晶,會依次讀取以上配置文件哮缺,如果有重復(fù)選項,會以最后一個文件設(shè)置的為準(zhǔn)甲喝。
但是尝苇,如果啟動時加入了--defaults-file=xxxx時,以上的所有文件都不會讀取
配置文件的書寫方式
[標(biāo)簽]
配置項=xxxx
標(biāo)簽類型:服務(wù)端埠胖、客戶端
服務(wù)器端標(biāo)簽:
[mysqld]
[mysqld_safe]
[server]
客戶端標(biāo)簽:
[mysql]
[mysqldump]
[client]
配置文件的示例展示:
[root@db01 ~]# cat /etc/my.cnf
[mysqld]
user=mysql
basedir=/data/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=6
port=3306
log_error=/data/mysql/mysql.log
[mysql]
socket=/tmp/mysql.sock
prompt=Master [\d]>

2.5 多實例的應(yīng)用

2.5.1 準(zhǔn)備多個目錄

mkdir -p /data/330{7,8,9}/data

2.5.2 準(zhǔn)備配置文件

vim /data/3307/my.cnf
[mysqld]
basedir=/data/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7

vim /data/3308/my.cnf
[mysqld]
basedir=/data/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8

vim /data/3309/my.cnf
[mysqld]
basedir=/data/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9

2.5.3 初始化三套數(shù)據(jù)

mv /etc/my.cnf /etc/my.cnf.bak
mysqld --initialize-insecure  --user=mysql --datadir=/data/3307/data --basedir=/data/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3308/data --basedir=/data/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3309/data --basedir=/data/mysql

2.5.4 systemd管理多實例

cd /etc/systemd/system
cp mysqld.service mysqld3307.service
cp mysqld.service mysqld3308.service
cp mysqld.service mysqld3309.service
vim mysqld3307.service
ExecStart=/data/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
vim mysqld3308.service
ExecStart=/data/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
vim mysqld3309.service
ExecStart=/data/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf

2.5.5 授權(quán)

chown -R mysql.mysql /data/*

2.5.6 啟動

systemctl start mysqld3307.service
systemctl start mysqld3308.service
systemctl start mysqld3309.service

2.5.7 驗證多實例

netstat -lnp|grep 330


image.png

mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"
mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'"
mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末糠溜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子直撤,更是在濱河造成了極大的恐慌诵冒,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谊惭,死亡現(xiàn)場離奇詭異汽馋,居然都是意外死亡,警方通過查閱死者的電腦和手機圈盔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門豹芯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人驱敲,你說我怎么就攤上這事铁蹈。” “怎么了众眨?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵握牧,是天一觀的道長。 經(jīng)常有香客問我娩梨,道長沿腰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任狈定,我火速辦了婚禮颂龙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纽什。我一直安慰自己措嵌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布芦缰。 她就那樣靜靜地躺著企巢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪让蕾。 梳的紋絲不亂的頭發(fā)上浪规,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天或听,我揣著相機與錄音,去河邊找鬼罗丰。 笑死神帅,一個胖子當(dāng)著我的面吹牛再姑,可吹牛的內(nèi)容都是我干的萌抵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼元镀,長吁一口氣:“原來是場噩夢啊……” “哼绍填!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起栖疑,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤讨永,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后遇革,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卿闹,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年萝快,在試婚紗的時候發(fā)現(xiàn)自己被綠了锻霎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡揪漩,死狀恐怖旋恼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奄容,我是刑警寧澤冰更,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站昂勒,受9級特大地震影響蜀细,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜戈盈,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一审葬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奕谭,春花似錦涣觉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至难捌,卻和暖如春膝宁,著一層夾襖步出監(jiān)牢的瞬間鸦难,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工员淫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留合蔽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓介返,卻偏偏與公主長得像拴事,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子圣蝎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容