把最簡(jiǎn)單的事情做的最漂亮么翰,最專業(yè)黔漂。
不要怕成功的門很擁擠,因?yàn)楹芏嗳嗽诎肼肪鸵呀?jīng)放棄了.
----oldguo
mysql掌握程度 | 星級(jí) |
---|---|
(1) MySQL 簡(jiǎn)介及安裝升級(jí) | ***** |
(2) MySQL 體系結(jié)構(gòu)和管理 | *** |
(3) SQL的基礎(chǔ)應(yīng)用和元數(shù)據(jù)獲取 Select | *** |
(4) 索引和執(zhí)行計(jì)劃管理 | **** |
(5) 存儲(chǔ)引擎 | *** |
(6) 日志管理 | **** |
(7) 備份恢復(fù)和遷移 | ****** |
(8) 主從復(fù)制 | ***** |
(9) 高可用和讀寫分離 | **** |
(10) 分布式架構(gòu) | ** |
(11) 全面優(yōu)化 | ** |
(12) NoSQL-Redis | **** |
(13) NoSQL-MongoDB | ** |
(14) ES ----> ELK | ***** |
第一章 MySQL 介紹和安裝
什么是數(shù)據(jù)?
我們認(rèn)知的數(shù)據(jù): 圖片,視頻,文字,表格,音頻,數(shù)字,符號(hào)
在計(jì)算機(jī)中數(shù)據(jù): 2進(jìn)制,16進(jìn)制
DBMS | 數(shù)據(jù)庫(kù)管理系統(tǒng) |
---|---|
RDBMS | 關(guān)系型數(shù)據(jù)庫(kù) |
NoSQL | 非關(guān)系型數(shù)據(jù)庫(kù) |
NewSQL | 分布式(云)數(shù)據(jù)庫(kù)架構(gòu) |
RDBMS: 關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)
比較適合于,安全級(jí)別要求高的數(shù)據(jù)以及關(guān)系較復(fù)雜的數(shù)據(jù)
NoSQL:非關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)
適合于高性能存取數(shù)據(jù),一般是配合RDBMS進(jìn)行使用的
針對(duì)大數(shù)據(jù)處理分析,分布式架構(gòu)更加擅長(zhǎng)
https://db-engines.com/en/ranking
筆試: 列舉你熟悉的數(shù)據(jù)庫(kù)產(chǎn)品?
數(shù)據(jù)庫(kù)類型 | 數(shù)據(jù)庫(kù)名稱 |
---|---|
RDBMS | Oracle MySQL MSSQL PG DB2 |
NoSQL | Redis MongoDB ES Memcahced HBASE |
NewSQL | TiDB PolarDB |
面試: 你們公司都用了哪些數(shù)據(jù)庫(kù)產(chǎn)品
MySQL Redis MongoDB ES , 自學(xué) Oracle PG HBASE
MySQL | 產(chǎn)品分支 |
---|---|
MySQL | 5.6 5.7 8.0 |
MariaDB | 10.x |
Percona | 5.6 5.7 .... |
MySQL 版本選擇
企業(yè)主流版本
大版本 | 小版本 |
---|---|
5.6 | 5.6.34 5.6.36 5.6.38 5.6.40 |
5.7 | 5.7.18 5.7.20 5.7.22 |
8.0 | 8.0.14 |
1.一般選擇官方主流版本:5.6,5.7
2.GA(穩(wěn)定發(fā)布版)
3.6-12月的產(chǎn)品版本
===========================
5.6.38 5.7.20 20170913
你們公司用什么MySQL版本?
我們現(xiàn)在公司8014版本,你能勝任嗎?
======================
MySQL 5.7.26 二進(jìn)制版本安裝
1 創(chuàng)建關(guān)鍵目錄
mkdir -p /data/
2 添加存儲(chǔ)磁盤,并掛載到/data ,設(shè)置自動(dòng)掛載
[root@db01 ~]# mkfs.xfs /dev/sdb
[root@db01 ~]# mount /dev/sdb /data
[root@db01 ~]# blkid /dev/sdb
/dev/sdb: UUID="85571a33-73e0-4f5e-af92-ec5bc8d510e8" TYPE="xfs"
[root@db01 ~]# vim /etc/fstab
UUID=85571a33-73e0-4f5e-af92-ec5bc8d510e8 /data xfs defaults 0 0
3 創(chuàng)建數(shù)據(jù)目錄和日志目錄
[root@db01 ~]# mkdir -p /data/mysql/data /data/binlog
4 上傳并處理軟件包
[root@db01 /usr/local]# tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
[root@db01 /usr/local]# mv mysql-5.7.26-linux-glibc2.12-x86_64 mysql
5 創(chuàng)建用戶并授權(quán)
[root@db01 /usr/local]# useradd mysql
[root@db01 /usr/local]# chown -R mysql. /data /usr/local/mysql
5.5.6 設(shè)置環(huán)境變量
vim /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
[root@db01 ~]# source /etc/profile
[root@db01 ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.26, for linux-glibc2.12 (x86_64) using EditLine wrapper
7 數(shù)據(jù)初始化
[root@db01 ~]# rpm -qa |grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@db01 ~]# yum remove mariadb-libs -y
[root@db01 ~]# yum install -y libaio-devel
[root@db01 ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
--- 初始化參數(shù)介紹:
--initialize-insecure 初始化參數(shù)(不安全)
--initialize 初始化參數(shù)(安全)
(1) 生成隨機(jī)12位的初始密碼(大寫,小寫,數(shù)字,符號(hào))
(2) 要求所有密碼都具備復(fù)雜度要求
(3) 密碼過(guò)期時(shí)間180天
8 生成配置文件
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=51
[mysql]
socket=/tmp/mysql.sock
9 準(zhǔn)備啟動(dòng)腳本
(1) sys-V啟動(dòng)方式:
[root@db01 ~]# cd /usr/local/mysql/support-files/
[root@db01 /usr/local/mysql/support-files]# cp mysql.server /etc/init.d/mysqld
[root@db01 ~]# service mysqld start
(2) systemd管理
vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
說(shuō)明:
先使用sysv關(guān)閉,在啟動(dòng)
[root@db01 ~]# /etc/init.d/mysqld stop
[root@db01 ~]# systemctl start mysqld
第一章小結(jié)
(1) 數(shù)據(jù)庫(kù)類型
RDBMS : Oracle MySQL MSSQL PG DB2
NoSQL : Redis MongoDB ES memcached Hbase
NewSQL : TiDB PolarDB
(2) MySQL的版本
5.6 34 36 38 40
5.7 18 20 22 24
8.0 14
GA 20170913
(3) MySQL 安裝方式
二進(jìn)制
源碼 : 二次開(kāi)發(fā) 定制化功能. ----> rpm
RPM : 官方, 定制
(4) 安裝
(1) 建目錄
(2) 建用戶
(3) 授權(quán)
(4) 初始化數(shù)據(jù): mysql_install_db(5.6) ,mysqld --initialize-insecure(5.7,8.0)
(5) 配置文件
(6) 啟動(dòng)腳本
第二章節(jié) 體系結(jié)構(gòu)及基礎(chǔ)管理
- C/S 工作模型
TCP/IP
mysql -uroot -p123 -h 10.0.0.51 -P3306
Socket
mysql -uroot -p123 -S /tmp/mysql.sock
- 實(shí)例
公司: Boss + 總經(jīng)理 + 員工 + 辦公室
實(shí)例: mysqld + master thread + workers線程 + 預(yù)分配的內(nèi)存
[root@db01 ~]# ps -ef |grep mysqld
[root@db01 ~]# top -H -p 3530
[root@db01 ~]# ps -T -p 3530
- 什么是SQL ?
MySQL 管理和使用專用的命令 相當(dāng)于 Linux Bash Shell中自帶的命令
DDL | 數(shù)據(jù)定義語(yǔ)言 |
---|---|
DCL | 數(shù)據(jù)控制語(yǔ)言 |
DML | 數(shù)據(jù)操作語(yǔ)言 |
DQL | 數(shù)據(jù)查詢語(yǔ)言 |
select user,host from mysql.user;
- mysqld 程序結(jié)構(gòu)(SQL執(zhí)行過(guò)程)
4.1 連接層
組成 | 模塊 |
---|---|
提供連接協(xié)議 | TCP/IP SOCKET [root@db01 ~]# netstat -lnp|grep mysqld |
驗(yàn)證模塊 | 驗(yàn)證用戶密碼 |
提供連接線程(show processlist;) | 接收SQL 返回結(jié)果 |
4.2 SQL層
語(yǔ)法檢測(cè)模塊 | 檢查語(yǔ)法 |
---|---|
SQL_MODE檢測(cè)模塊 | |
語(yǔ)義檢查模塊,權(quán)限檢查 | |
預(yù)處理 | 解析器: 解析樹: 執(zhí)行計(jì)劃 優(yōu)化器: 根據(jù)代價(jià),選擇一個(gè)代價(jià)最低的執(zhí)行計(jì)劃 代價(jià): IO CPU |
執(zhí)行器 | 按照選出來(lái)的執(zhí)行計(jì)劃,執(zhí)行SQL語(yǔ)句,得出一個(gè)結(jié)果?(結(jié)果: 在磁盤的xxxxxx 位置之上,將結(jié)果交給存儲(chǔ)引擎層繼續(xù)處理) |
query_cache | redis 緩存數(shù)據(jù) Tair |
記錄操作日志 | binlog |
4.3 存儲(chǔ)引擎層
相當(dāng)于Linux中的文件系統(tǒng).
根據(jù)SQL層給出的結(jié)果,去磁盤中將數(shù)據(jù)取出來(lái).取出16進(jìn)制的數(shù)據(jù),返回給SQL,結(jié)構(gòu)化成表,經(jīng)過(guò)連接層返回給用戶
5. MySQL 邏輯結(jié)構(gòu)
5.1
庫(kù)database(schema) | 相當(dāng)于 Linux中的目錄 |
---|---|
庫(kù)名 | 目錄名 |
屬性 | 目錄屬性 |
5.2
表 table | 相當(dāng)于Linux中的文件 |
---|---|
表名 | 文件名 |
表內(nèi)容(記錄,row) | 文件內(nèi)容 |
表屬性 | 文件屬性 |
列
6. MySQL 物理結(jié)構(gòu)基礎(chǔ)引入
庫(kù) : 存儲(chǔ)到數(shù)據(jù)目錄下同名目錄
表 :
MyISAM 引擎 :
user.frm | 列定義信息 |
---|---|
user.MYD | 數(shù)據(jù)行 |
user.MYI | 索引 |
InnoDB 引擎 :
time_zone.frm | 列定義信息 |
---|---|
time_zone.ibd | 數(shù)據(jù)行和索引 |
7. 頁(yè),區(qū),段 *****
頁(yè) | 默認(rèn)16KB,是最小的IO單元 |
---|---|
區(qū) | 連續(xù)的64個(gè)默認(rèn)大小page,總共1M空間 |
段 | 一個(gè)表(非分區(qū)表)就是一個(gè)段,會(huì)有一個(gè)或多個(gè)區(qū)構(gòu)成 |
小結(jié)
8.1 CS模型
8.2 實(shí)例
8.3 mysqld程序結(jié)構(gòu)
8.4 邏輯結(jié)構(gòu)
8.5 物理結(jié)構(gòu)
8.6 段\區(qū)\頁(yè)基礎(chǔ)管理
9.1 用戶管理
9.1.1 作用
登錄MySQL
管理MySQL對(duì)象
9.1.2 長(zhǎng)啥樣?
用戶名@'白名單'
白名單 :
oldguo@'10.0.0.51'
oldguo@'10.0.0.%'
oldguo@'10.0.0.5%'
oldguo@'10.0.0.0/255.255.254.0'
oldguo@'%'
9.1.3 用戶的操作
創(chuàng)建用戶:
mysql> create user oldguo@'10.0.0.%';
查看用戶:
mysql> select user,host from mysql.user;
修改用戶:
mysql> alter user oldguo@'10.0.0.%' identified by '123';
刪除用戶:
drop user oldguo@'10.0.0.%';
說(shuō)明:
8.0 以前可以用以下命令授權(quán)并建用戶
grant all on . to wordpress@'%' identified by '1322';
9.2 權(quán)限管理
9.2.1 語(yǔ)法介紹
grant all on *.* to wordpress@'%' identified by '1322';
GRANT 權(quán)限 ON 范圍 TO 用戶 IDENTIFIED BY 密碼 ;
(1) 權(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
Mysql 數(shù)據(jù)庫(kù)層面(db表)權(quán)限
權(quán)限 | 說(shuō)明 |
---|---|
SELECT | 查詢 |
INSERT | 插入 |
UPDATE | 更新 |
DELETE | 刪除 |
CREATE | 創(chuàng)建表或者索引 |
DROP | 刪除庫(kù)濒生、表 |
GRANT | 賦予權(quán)限選項(xiàng) |
INDEX | 索引 |
ALTER | 更改表 |
CREATE_TMP_TABLE | 創(chuàng)建臨時(shí)表 |
LOCK_TABLES | 鎖表 |
SHOW_VIEW | 查看視圖 |
CREATE_VIEW | 創(chuàng)建視圖 |
CREATE_ROUTION | 創(chuàng)建存儲(chǔ)過(guò)程 |
ALTER_ROUTION | 更改存儲(chǔ)過(guò)程 |
EXECUTE | 執(zhí)行存儲(chǔ)過(guò)程 |
EVENT | 創(chuàng)建時(shí)間調(diào)度器 |
TRIGGER | 創(chuàng)建觸發(fā)器 |
with grant option;
(2) 范圍:
*.* | -R / |
---|---|
wordpress.* | -R /wordpress |
wordpress.t1 | -R /wordpress/t1 |
9.2.2 授權(quán)操作
(1) 授權(quán)管理員用戶admin,能夠通過(guò)10網(wǎng)段中所有地址管理數(shù)據(jù)庫(kù)
mysql> grant all on . to admin@'10.0.0.%' identified by '123';
(2) 授權(quán)一個(gè)應(yīng)用用戶app,可用通過(guò)10網(wǎng)段,連接并使用wordpress庫(kù)的數(shù)據(jù)
mysql> grant select,update,delete,insert on wordpress.* to app@'10.0.0.%' identified by '123';
注意:
1. 不要將公司內(nèi)容任何賬號(hào),給非本公司人員
2. 不要流程范圍外,授予非業(yè)務(wù)部門業(yè)務(wù)系統(tǒng)用戶密碼信息
3. 所有核心文檔在通過(guò)互聯(lián)傳輸時(shí),都要脫敏處理.
9.2.3 查看用戶權(quán)限
show grants for admin@'10.0.0.%';
9.2.4 回收權(quán)限
mysql> grant all on . to test@'10.0.0.%' identified by '123' with grant option;
mysql> revoke grant option on . from 'test'@'10.0.0.%';