1.MySQL C/S模型
Server : mysqld
Client :
socket : 僅本地連接使用
tcp/ip : 應(yīng)用連接使用
TCP/IP方式(遠(yuǎn)程、本地):
mysql -uroot -poldboy123 -h 10.0.0.51 -P3306
Socket方式(僅本地):
mysql -uroot -poldboy123 -S /tmp/mysql.sock
2. 實(shí)例 **
實(shí)例= mysqld ----> master thread ----> 干活的線程 + 預(yù)分配的內(nèi)存結(jié)構(gòu)
公司= boss 經(jīng)理 員工 辦公室
3.mysql的程序結(jié)構(gòu)
3.1 MySQL的專(zhuān)用管理和操作命令SQL
DDL 數(shù)據(jù)定義語(yǔ)言
DCL 數(shù)據(jù)控制語(yǔ)言
DML 數(shù)據(jù)操作語(yǔ)言
DQL 數(shù)據(jù)查詢(xún)語(yǔ)言
3.2 SQL語(yǔ)句的執(zhí)行過(guò)程
select user, host form mysql.user;
(1)mysql -u root -pxxxx
3.2.1 連接層
(1) 提供鏈接協(xié)議
socket
TCP/IP
(2) 驗(yàn)證 user password host port
(3) 提供連接線程
show [full] processlist;
功能: 接收SQL語(yǔ)句,返回結(jié)果.]
3.2.2 SQL層 *****
(1) 語(yǔ)法檢查和SQL_MODE檢查
(2) 語(yǔ)義檢查和權(quán)限檢查
(3) 解析預(yù)處理,生成解析樹(shù)(執(zhí)行計(jì)劃樹(shù))
(4) 優(yōu)化會(huì)根據(jù)自帶算法,選擇最優(yōu)的方案(代價(jià)模型算法)
代價(jià)? cpu io mem
(5) 選擇最優(yōu)的方案進(jìn)行執(zhí)行SQL
(6) 提供查詢(xún)緩存(默認(rèn)是沒(méi)開(kāi)啟的),會(huì)使用redis tair替代查詢(xún)緩存功能
(7) 提供日志記錄(日志管理章節(jié)):binlog,默認(rèn)是沒(méi)開(kāi)啟的。
3.2.3 存儲(chǔ)引擎層(簡(jiǎn)單介紹)
相當(dāng)于文件系統(tǒng),將數(shù)據(jù)取出,再交給SQL層結(jié)構(gòu)化成表,返回給用戶(hù).
4. MySQL的邏輯結(jié)構(gòu) ***
4.1 庫(kù):
庫(kù)名
庫(kù)屬性
4.2 表
表名
屬性
列:列名(字段),列屬性(數(shù)據(jù)類(lèi)型,約束等)
數(shù)據(jù)行(記錄)
5. MySQL的物理存儲(chǔ)結(jié)構(gòu)引入
5.1 庫(kù)的物理存儲(chǔ)結(jié)構(gòu)
用文件系統(tǒng)的目錄來(lái)存儲(chǔ)
5.2 表的物理存儲(chǔ)結(jié)構(gòu) ***
MyISAM(一種引擎)的表:
user.frm
user.MYD
user.MYI
InnoDB(默認(rèn)的存儲(chǔ)引擎)的表:
time_zone.frm:存儲(chǔ)列相關(guān)信息
time_zone.ibd:數(shù)據(jù)行+索引
5.3 InnoDB表底層存儲(chǔ)結(jié)構(gòu)引入(擴(kuò)展)*****
段 : 一個(gè)表就是一個(gè)的段(非分區(qū)表)
區(qū) : 固定大小1M, 連續(xù)的64個(gè)頁(yè)
頁(yè) : 最小的IO單元,默認(rèn)16K
6. MySQL基礎(chǔ)管理
6.1 用戶(hù)的管理
6.1.1 用戶(hù)的作用
6.1.2 用戶(hù)的定義
6.1.3 用戶(hù)管理操作
create user oldguo@'10.0.0.%';
drop user oldguo@'10.0.0.%';
alter user oldguo@'10.0.0.%' identified by '123';
select user,host from mysql.user;
create user oldboy@'10.0.0.%' identified by '123';
注:
(1)8.0以前,以上命令可以忽略,grant可以自動(dòng)創(chuàng)建用戶(hù)并授權(quán).
(2)8.0以后必須先建用戶(hù)后授權(quán),grant只做授權(quán)功能.
6.2 權(quán)限管理
6.2.1 作用
6.2.2 權(quán)限定義
6.2.3 授權(quán)范圍
6.2.4 授權(quán)管理命令
grant all on . to oldguo@'10.0.0.%' identified by '123';
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 : 普通管理員
ALL+ with grant option 超級(jí)管理員 .
grant select on . to oldguo@'10.0.0.%' identified by '123';
grant SELECT,INSERT, UPDATE, DELETE on . to oldguo@'10.0.0.%' identified by '123';
6.2.5 授權(quán)管理生產(chǎn)需求
(1) 授權(quán)一個(gè)管理員用戶(hù)admin ,密碼admin,能夠通過(guò)10網(wǎng)段管理數(shù)據(jù)庫(kù)
oldguo[(none)]>grant all on . to admin@'10.0.0.%' identified by 'admin';
(2) 開(kāi)放一個(gè)wordpress應(yīng)用的用戶(hù),密碼123,nginx服務(wù)器使172.16.1.%網(wǎng)段.
應(yīng)用用戶(hù)需要權(quán)限?
select,insert,update,delete
grant select,insert,update,delete on wordpress.* to wordpress@'172.16.1.%' identified by '123';
(3) 中小公司,開(kāi)發(fā)人員leader,需要開(kāi)發(fā)用戶(hù)dev通過(guò)10網(wǎng)段對(duì)wordpress進(jìn)行開(kāi)發(fā)和管理
grant SELECT,INSERT, UPDATE, DELETE,CREATE,ALTER,CREATE VIEW,SHOW VIEW,CREATE ROUTINE, ALTER ROUTINE,EVENT, TRIGGER on wordpress.* to dev@'10.0.0.%' identified by '123';
6.2.6 權(quán)限回收
oldguo[(none)]>show grants for dev@'10.0.0.%';
oldguo[(none)]>revoke delete on wordpress.* from dev@'10.0.0.%';
6.2.7 面試問(wèn)題
作為開(kāi)發(fā)人員開(kāi)用戶(hù)需要怎么溝通?
以郵件形式,進(jìn)行開(kāi)用戶(hù)的申請(qǐng)
向誰(shuí)申請(qǐng)?
DBA權(quán)限管理人員
分管部門(mén)領(lǐng)導(dǎo)
DBA主管
提供哪些信息?
需要哪些權(quán)限
操作對(duì)象
從哪來(lái)訪問(wèn)MySQL
最為DBA,開(kāi)發(fā)人員找你開(kāi)用戶(hù)需要怎么溝通?
提供哪些信息?
需要哪些權(quán)限
操作對(duì)象
從哪來(lái)訪問(wèn)MySQL
開(kāi)發(fā)人員找你私下要root用戶(hù)權(quán)限?
不給!
金融類(lèi):
非本業(yè)務(wù)部分,不得提供超級(jí)管理員用戶(hù)的權(quán)限
6.2.8 本地管理員用戶(hù)密碼忘記
(1) 關(guān)閉數(shù)據(jù)庫(kù)
(2) 將數(shù)據(jù)庫(kù)啟動(dòng)到無(wú)驗(yàn)證模式
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
(3) 修改密碼
oldguo[(none)]>flush privileges;
oldguo[(none)]>alter user root@'localhost' identified by '123456';
(4)重啟數(shù)據(jù)庫(kù)為正常模式
[root@db01 ~]# /etc/init.d/mysqld restart
(5)測(cè)試新密碼
[root@db01 ~]# mysql -uroot -p123456
6.3 MySQL連接管理
6.3.1 MySQL自帶命令
mysql
-u
-p
-h
-P
-S
-e
-V
<
--help
socket :
mysql -uroot -p123 -S /tmp/mysql.sock
mysql -uoldguo -p -S /tmp/mysql.sock
注意:本地登錄的用戶(hù),需要提前授權(quán)l(xiāng)ocalhost相關(guān)用戶(hù)
TCP/IP :
mysql -uoldguo -p -h10.0.0.51 -P3306
[root@db01 ~]# mysql -uroot -p123456 -e "show databases;"
[root@db01 ~]# mysql -uroot -p123456 <world.sql
6.3.2 客戶(hù)端工具連接
oldguo[(none)]>grant all on . to root@'10.0.0.%' identified by '123';
sqlyog
navicat
6.4 MySQL的啟動(dòng)和關(guān)閉方式
6.5 MySQL的初始化配置
6.5.1 提供的方法
1. 預(yù)編譯 **
2. 初始化配置文件*****
3. 命令行 ***
注意: 優(yōu)先級(jí) 3>2>1
6.5.2 初始化配置文件的默認(rèn)讀取順序
[root@db01 /tmp]# mysqld --help --verbose |grep my.cnf
/etc/my.cnf ----> /tmp/mysql.sock
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
~/.my.cnf ----> /tmp/a.sock
注意:一旦使用--defaults-file,以上的默認(rèn)配置就不會(huì)生效了
[root@db01 ~]# mysqld_safe --defaults-file=/opt/oldguo.cnf &
6.5.3 初始化配置文件作用
數(shù)據(jù)庫(kù)的啟動(dòng)
客戶(hù)端的登錄
6.5.4 初始化配置文件格式
[標(biāo)簽1]
xxxx=yyyy
[標(biāo)簽2]
xxxx=yyyy
[標(biāo)簽3]
xxxx=yyyy
標(biāo)簽 :
服務(wù)端
[mysqld]
[mysqld_safe]
[server]
客戶(hù)端
[mysql]
[mysqldump]
[mysqladmin]
[client]
6.5.5 配置文件模板
[mysqld]
user=mysql
server_id=6
port=3306
basedir=/application/mysql
datadir=/data/3306/data
log_error=/data/3306/data/3306.log
socket=/data/3306/mysql.sock
[mysql]
socket=/data/3306/mysql.sock
6.6 MySQL的多實(shí)例管理
6.6.1 準(zhǔn)備多個(gè)目錄
mkdir -p /data/330{7,8,9}/data
6.6.2 準(zhǔn)備配置文件
cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7
log_bin=/data/3307/mysql-bin
EOF
cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8
log_bin=/data/3308/mysql-bin
EOF
cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9
log_bin=/data/3309/mysql-bin
EOF
6.6.3 初始化三套數(shù)據(jù)
mv /etc/my.cnf /etc/my.cnf.bak
mysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/application/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/application/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/application/mysql
6.6.4 systemd管理多實(shí)例
cd /etc/systemd/system
cp mysqld.service mysqld3307.service
cp mysqld.service mysqld3308.service
cp mysqld.service mysqld3309.service
vim mysqld3307.service
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
vim mysqld3308.service
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
vim mysqld3309.service
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
6.6.5 授權(quán)
chown -R mysql.mysql /data/*
6.6.6 啟動(dòng)
systemctl start mysqld3307.service
systemctl start mysqld3308.service
systemctl start mysqld3309.service
6.6.7 驗(yàn)證多實(shí)例
netstat -lnp|grep 330
mysql -S /data/3307/mysql.sock -e "select @@server_id"
mysql -S /data/3308/mysql.sock -e "select @@server_id"
mysql -S /data/3309/mysql.sock -e "select @@server_id"