一.數(shù)據(jù)庫課程介紹
1.課程大綱(作為DBA必會)
數(shù)據(jù)庫介紹
mysql版本為5.7 介紹及安裝
mysql的體系結(jié)構(gòu)及基礎管理
sql基礎 語句+元數(shù)據(jù)獲取
索引及執(zhí)行計劃管理
存儲引擎
日志
備份恢復
主從復制
高可用及讀寫分離
分布式數(shù)據(jù)庫
mysql全面優(yōu)化
DBA就業(yè)指導
redis MongoDB ElasticSearch
2.IT人員具備的職業(yè)素養(yǎng)
1.人品
2.嚴謹
3.心態(tài)
4.細心
3.熟悉操作系統(tǒng)(精通)
Linux centos6/7/8
4.熟悉云架構(gòu)
docker
5.熟悉業(yè)務
業(yè)務
產(chǎn)品的功能
用戶的行為
6.熟悉行業(yè)
數(shù)據(jù)排名https://db-engines.com/en/
參加數(shù)據(jù)庫大會
跟行業(yè)牛人交流
7.喜歡數(shù)據(jù)庫
堅持
自己品P狡丁!T捌ァ深纲!
====================================
二.數(shù)據(jù)庫產(chǎn)品介紹
1.數(shù)據(jù)庫管理系統(tǒng)(DBMS)database management servier/Database Management System
RDBMS 關系型數(shù)據(jù)庫
oracle
mysql
mssql
PG
NOSQL 非關系型數(shù)據(jù)庫
mongodb
redis
ES
memcached
MEWSQL 分布式數(shù)據(jù)庫
RDS,DRDS ---->alisql TDDL
polarDB ---->OB(做成一體機)
pincap tidb
2.MySQL產(chǎn)品分支(了解)
oracle MySQL
MariaDB 5.5 -----> 10.0
percona MySQL
RDS/TDSQL 云數(shù)據(jù)庫
3.MySQL 企業(yè)版本選擇
5.6 5.6.34 5.6.36 5.6.38
5.7 5.7.18 5.7.20 5.7.22 5.7.24 5.7.26(現(xiàn)在使用的)
8.0 8.0.10之前都是測試版本 8.0.11
GA時間:5.6.38 5.7.20 2017-09-13
MySQL二進制版本下載地址https://downloads.mysql.com/archives/community/
三.MySQL 5.7.26 二進制版本 手撕(安裝)
1.規(guī)劃
OS: Centos 7.6
磁盤: 20G(system)+50G(/data)
IP:10.0.0.51
hostname: db01
/etc/hosts10.0.0.51 db01
iptables: OFF
SELINUX: disabled
2.數(shù)據(jù)目錄規(guī)劃
[root@db01 ~]# mkfs.xfs /dev/sdb
[root@db01 ~]# blkid
/dev/sda1: UUID="fd2e0ca7-32be-425f-86a2-85c02b9ec5ea" TYPE="xfs"
/dev/sda2: UUID="79a3924b-739e-48dc-ab0c-0444b9ac6591" TYPE="swap"
/dev/sda3: UUID="3a3a295f-88f8-456d-94dc-1a3eeb517c02" TYPE="xfs"
/dev/sdb: UUID="8c6d28bb-4c6e-4ea3-a59d-5a256b3b56fc" TYPE="xfs"
[root@db01 ~]# vim /etc/fstab
添加:
UUID="8c6d28bb-4c6e-4ea3-a59d-5a256b3b56fc" /data xfs defaults 0 0
[root@db01 ~]# mkdir /data
[root@db01 ~]# mount -a
[root@db01 ~]# df -h
3.軟件上傳解壓
[root@db01 /usr/local]# tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
文件該名稱或者創(chuàng)建軟連接:mv mysql-5.7.26-linux-glibc2.12-x86_64 mysql
4.原始環(huán)境檢查
①檢查有沒有原來版本的軟件霞丧,如果有就 卸載:
檢查:rpm -qa|grep mariadb
卸載:yum remove mariadb-libs -y
5.用戶權(quán)限準備
創(chuàng)建虛擬用戶:useradd -s /sbin/nologin -M mysql
修改目錄權(quán)限:chown -R mysql.mysql /data
chown -R mysql.mysql /usr/local/mysql
6.設置環(huán)境變量
vim /etc/profile
添加:export PATH=/usr/local/mysql/bin:$PATH
讓這個文件重啟一下生效:source /etc/profile
檢查一下有沒有安裝成功:mysql -V(大寫)
顯示結(jié)果:mysql Ver 14.14 Distrib 5.7.26, for linux-glibc2.12 (x86_64) using EditLine wrapper
5.7以后的版本有兩種方法可以設置密碼
一種是系統(tǒng)自動生成的 但是密碼非常的麻煩呢岗,不容易記住:mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
另外一種是自己設置的:mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
(密碼可以要也可以不要)
報錯:mysqld: error while loading shared libraries libaio.so.1: cannot open shared object file: No such file or directory
解決方法:yum install -y libaio-devel
說明
--initialize 使用一種安全的模式初始化數(shù)據(jù).
特點: 1. 初始密碼 2. 密碼復雜度 3. 密碼過期時間??
--initialize-insecure 使用一種不安全的模式初始化數(shù)據(jù).
1. 無密碼 2. 無密碼復雜度
5.7以前的版本只有一種方法
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
7.編寫配置文件
vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
##四.MySQL的體系結(jié)構(gòu)
#####1.MySQL c/s結(jié)構(gòu)
server端:mysqld
clint端:mysql蛹尝,mysqldump后豫,第三方程序(開發(fā))
#####2.
公司: BoSS + 經(jīng)理 + 員工 + 辦公區(qū)
實例: mysqld + Mater Thread + 干活Thread + 專用內(nèi)存
#####3.mysqld核心程序結(jié)構(gòu)
0.面試:1條sql語句在mysql中是如何處理的?
1.sql語句:結(jié)構(gòu)化查詢語句
2.sql分類:DDL(數(shù)據(jù)定義語言)突那,DCL(數(shù)據(jù)控制語言)挫酿,DML(數(shù)據(jù)操作語言)
3.一條sql語句:
![圖片.png](https://upload-images.jianshu.io/upload_images/18572205-6e413c2a5a8fb8a7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4.sql語句的執(zhí)行過程
連接層:
①提供連接協(xié)議
TCP/IP:網(wǎng)絡scoke=IP+Port
本地socket:socket文件
②驗證用戶名密碼,ip
③提供連接線程
負責:sql接受和結(jié)果的反饋
sql層
(1):語法檢查
(2):語義檢查
(3):權(quán)限檢查
(4):解析:生成多種執(zhí)行計劃數(shù)
(5):優(yōu)化器:判斷哪一種執(zhí)行計劃愕难,代價最低
資源代價:CPU早龟,IO,MEM
(6):執(zhí)行器:執(zhí)行優(yōu)化器選擇后的執(zhí)行計劃執(zhí)行猫缭。得到需要查詢數(shù)據(jù)的存儲位置
存儲引擎層:(文件系統(tǒng))
和磁盤打交道的層次拄衰,
轉(zhuǎn)回給sql層,結(jié)構(gòu)域化成表饵骨,通過連接線程返回結(jié)果翘悉。
五.物理存儲結(jié)構(gòu)
宏觀(角度觀察):
myisam存儲引擎
-rw-r----- 1 mysql mysql 10816 Nov 11 12:03 user.frm 表結(jié)構(gòu)
-rw-r----- 1 mysql mysql 340 Nov 11 12:03 user.MYD 表數(shù)據(jù)
-rw-r----- 1 mysql mysql 4096 Nov 11 12:03 user.MYI 索引
INNODB 存儲引擎表(5.5以后主用innodb):
time_zone.frm 表結(jié)構(gòu)
time_zone.ibd 數(shù)據(jù)+索引(IOT)
微觀(角度觀察):
segment(段):一個(非分區(qū)表)表就是一個段,由一個或多個區(qū)構(gòu)成居触。
extent(區(qū) :《連續(xù)》的64個page妖混,默認1M
page(頁) :MySQL的最小物理IO單元,默認IO(1頁=16kb)轮洋,《連續(xù)》的4個OS block
六.MySQL邏輯結(jié)構(gòu)(邏輯概念)
庫 -------> 目錄
表 ------->表文件
列 :列名+列屬性(約束制市,數(shù)據(jù)類型,其他屬性)
行 :記錄
屬性:數(shù)據(jù)行弊予,權(quán)限等....
七:mysql基礎管理
1.mysql的用戶管理
作用祥楣?
登錄mysql 管理mysql
2.用戶的定義
用戶名@'白名單'
什么是白名單?允許用戶登錄的"范圍" (ip段)
oldguo@'10.0.0.5%'
oldguo@'10.0.0.%'
oldguo@'10.0.0.0/255.255.254.0'
==================
oldguo@'10.0.0.254'
oldguooldguo@'%'
oldguo@'%'
oldguo@'localhost'
oldguo@'oldguo.com'
3.用戶的管理命令
1.查
5.7+:mysql> select user,host ,authentication_string from mysql.user;
5.7-:mysql> select user,host ,password from mysql.user;
2.增(創(chuàng)建用戶)
mysql> create user oldboy@'10.0.0.%';
3.改
alter user oldboy@'10.0.0.%' identified by '123';
4.刪
drop user oldboy@'10.0.0.%';
4.權(quán)限的定義
權(quán)限定義方法: GRANT ALL ON 權(quán)限作用范圍 TO 用戶 IDENTIFIED BY 密碼;
GRANT SELECT, INSERT, UPDATE, DELETE ON oldguo.* TO oldguo@'10.0.0.%' IDENTIFIED BY '123'
權(quán)限作用范圍:
*.* -R /
oldboy.* -R /oldboy
oldboy.t1 /oldboy/t1
5.權(quán)限管理
①授權(quán)
例子:創(chuàng)建并授權(quán)超級管理員用戶root汉柒,能夠通過10網(wǎng)段任意地址管理數(shù)據(jù)庫.
grant all on *.* to root@'10.0.0.%' identified by '123' with grant option;
2.查詢用戶權(quán)限
show grants for root@'10.0.0.%';
例子2: 創(chuàng)建一個應用用戶app,能夠通過10網(wǎng)段訪問(SELECT, INSERT, UPDATE, DELETE)app庫的所有表
grant SELECT,INSERT,UPDATE,DELETE on app.* to app@'10.0.0.%' identified by '123';
回收:
說明:多次授權(quán)是疊加關系误褪,修改權(quán)限只能回收
收回app的刪除權(quán)限
show grants for app@'10.0.0.%';
grant SELECT,INSERT,UPDATE,DELETE on app.* to app@'10.0.0.%' identified by '123';
給權(quán)限
revoke delete on app.* from app@'10.0.0.%';收回權(quán)限的方法
新特性:
8.0以前:命令權(quán)限
all
SELECT, INSERT, UPDATE, DELETE, CREATE, 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,DROP
with grant option
8.0以后:支持角色功能,自由打包需要的權(quán)限
作業(yè):
實現(xiàn)systemd模式管理mysql啟動關閉(systemd); systemctl start/stop/restart mysqld
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=/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
或者:
chkconfig --add mysqld
systemctl start/stop/restart mysqld