IT人的職業(yè)素養(yǎng)
人品
責(zé)任(權(quán)利)
嚴(yán)謹(jǐn)
細(xì)心 :把最簡(jiǎn)單的事情做的最漂亮 最專業(yè)
心態(tài): 不惹事 不怕事
工作環(huán)境收起好奇心
熟悉操作系統(tǒng) 精通
熟悉公司業(yè)務(wù): 產(chǎn)品功能 用戶行為
熟悉行業(yè)的發(fā)展趨勢(shì) :技術(shù)的版本與類型
喜歡自己從事的工作 體驗(yàn)很重要
數(shù)據(jù)庫(kù)全球排行
牢記前五名

嗶哩嗶哩DBA免費(fèi)課程視頻 https://www.bilibili.com/video/av53865503?from=search&seid=9747436813733100017
思維導(dǎo)圖

索引

一、MySQL簡(jiǎn)介及安裝升級(jí)

1.1 什么是數(shù)據(jù)
圖片、文字、表格、附件、視頻、軟件、用戶賬戶信息、訂單
1.2 數(shù)據(jù)庫(kù)管理系統(tǒng) DBMS
RDBMS:關(guān)系型
NoSQL:非關(guān)系型
NewSQL:分布式型
1.3 筆試題:請(qǐng)你列舉熟悉的數(shù)據(jù)庫(kù)產(chǎn)品?
RDBMS: Oracle ,MySQL ,MSSQL(微軟),PG
NoSQL:Redis,Mongo,ES
NewSQL:TiDB(一套系統(tǒng) pinCap公司),Spanner(Google),OceanBase(阿里巴巴),PolarDB(阿里云)
什么是POLARDB
1.4 面試題:你們公司用了哪些數(shù)據(jù)庫(kù)產(chǎn)品或者你熟悉哪些?
只說(shuō)擅長(zhǎng)的,主要負(fù)責(zé)的部分 以最擅長(zhǎng)的地方碾壓面試官
MySQL,Redis,MongoDB,ES面試的結(jié)果是好或不好,回來(lái)后都要把內(nèi)容捋一捋,最好將此家公司的架構(gòu)整理出來(lái)變成自己的。
( 引出 版本 )
( 引出 公司 的數(shù)據(jù)庫(kù)架構(gòu) )
( 引出 公司 的備份策略 )
( 引出 公司 遇到的故障和性能問(wèn)題 )
( 總結(jié):... 詢問(wèn)面試官是否還有問(wèn)題 )
1.5 MySQL 軟件分支
Oracle MySQL
MariaDB
PerconaDB
#云數(shù)據(jù)庫(kù)
RDS MySQL
騰訊DB等
1.6 MySQL企業(yè)版本選擇
- 企業(yè)主流版本
5.6版本: 5.6.34 5.6.36 5.6.38 5.6.40
5.7版本: 5.7.18 5.7.19 5.7.20 5.7.24√ 5.7.26
# MySQL RC apl beta 不要選擇,一定要選擇GA版
官網(wǎng) https://downloads.mysql.com/archives/community
關(guān)于版本GA時(shí)間,盡量記兩個(gè)版本的準(zhǔn)確GA時(shí)間,以免面試出錯(cuò)
5.6.38和5.7.20 # 時(shí)間 2017年09月13日
5.7.24 # 2018年10月4日
5.6.40 # 2018年2月26日
企業(yè)版本新環(huán)境介紹
5.7版本 GA 6-12個(gè)月的版本(偶數(shù)版)
2. MySQL 5.7.26 二進(jìn)制版規(guī)劃和部署
2.1 規(guī)劃
| 硬件環(huán)境 | DELL R720 ,CPU*2*8,128G內(nèi)存 ,RAID10*8*600G(SAS) |
|---|---|
| OS系統(tǒng)版本 | CentOS 7.6.1810 db01 3.10.0-957.el7.x86_64 |
| 網(wǎng)絡(luò)規(guī)劃 | eth0 10.0.0.51/24 eth1 172.16.1.51 主機(jī)名: db01 |
| 存儲(chǔ) | /dev/sdb 20G |
2.2 實(shí)施
# 創(chuàng)建目錄
[root@db01 ~]# mkdir /application
[root@db01 ~]# mkdir -p /data/3306
2.3 創(chuàng)建mysql用戶
[root@db01 ~]# useradd -s /sbin/nologin -M mysql
[root@db01 ~]# id mysql
uid=1001(mysql) gid=1001(mysql) groups=1001(mysql)
2.4 上傳軟件并解壓處理
[root@db01 /application]# tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
[root@db01 /application]# mv mysql-5.7.26-linux-glibc2.12-x86_64 mysql
[root@db01 /application]# ls
mysql mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
2.5 卸載mariadb和配置環(huán)境變量
# 卸載原有的mairadb
[root@db01 ~]# rpm -qa |grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64
[root@db01 ~]# yum remove mariadb-libs.x86_64
[root@db01 ~]# vim /etc/profile
export PATH=/application/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
2.6 數(shù)據(jù)初始化
[root@db01 ~]# yum install -y libaio-devel
[root@db01 ~]# mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/3306/data
參數(shù)說(shuō)明
- --initialize-insecure # 啟用非安全模式進(jìn)行數(shù)據(jù)初始化
- --initialize # 啟用安全模式進(jìn)行數(shù)據(jù)初始化
5.7版本以后,加強(qiáng)了用戶密碼安全管理的功能
(1) 密碼長(zhǎng)度
(2) 密碼復(fù)雜度
(3) 初始化時(shí)自動(dòng)生成密碼,不允許空密碼
初始化成功的樣子
2.7 書寫配置文件
cat >/etc/my.cnf <<EOF
[mysqld] #數(shù)據(jù)庫(kù)啟動(dòng)時(shí)所應(yīng)用的
user=mysql
basedir=/application/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
[mysql] #數(shù)據(jù)庫(kù)登錄時(shí)所應(yīng)用的
socket=/tmp/mysql.sock
prompt=3306 [\\d]>
EOF
2.8 準(zhǔn)備啟動(dòng)腳本
# 修改權(quán)限
chown -R mysql.mysql /data/* /application/mysql/*
[root@db01 ~]# cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@db01 ~]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/3306/data/db01.err'.
. SUCCESS!
啟動(dòng)方式說(shuō)明
systemd (centos7)sys-V (centos6)
service xxx start/restart/status/stop
2.9 使用systemd管理mysql
cat > /etc/systemd/system/mysqld.service <<EOF
[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=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF
# 先關(guān)閉sys-V的方式再用systemd啟動(dòng)
[root@db01 /application]# /etc/init.d/mysqld stop
[root@db01 /application]# systemctl start mysqld.service
2.10 進(jìn)入數(shù)據(jù)庫(kù)
[root@db01 ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.26 MySQL Community Server (GPL)
....
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
3 rows in set (0.00 sec)
mysql>
3. 同主機(jī)版本升級(jí)(擴(kuò)展)
3.1 先拍攝快照并備份
測(cè)試的空環(huán)境可忽略備份
3.2 安裝8.0版本軟件到新位置
# 上傳mysql8.0版本并解壓
[root@db01 /application]# ls
mysql
mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz
[root@db01 /application]# tar xf mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz
[root@db01 /application]# mv mysql-8.0.16-linux-glibc2.12-x86_64 mysql8
[root@db01 /application]# ls
mysql
mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
mysql8
mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz
3.3 停掉原庫(kù)
[root@db01 /application]# systemctl stop mysqld.service
3.4 修改已有配置
[root@db01 /application]# vim /etc/profile
#export PATH=/application/mysql/bin:$PATH
export PATH=/application/mysql8/bin:$PATH
[root@db01 /application]# source /etc/profile
[root@db01 /application]# mysql -V #查看軟件版本是否成功替換
mysql Ver 8.0.16 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)
[root@db01 /application]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/application/mysql8
datadir=/data/3306/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
prompt=MySQL [\\d]>
[root@db01 /application]# 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=/application/mysql8/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
3.5 啟動(dòng)mysql8.0
# 查看版本
[root@db01 /application]# cd /data/3306/data/
[root@db01 /data/3306/data]# cat mysql_upgrade_info
8.0.16[root@db01 /data/3306/data]#
# 啟動(dòng)
[root@db01 /application]# systemctl restart mysqld.service
[root@db01 /application]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.16 MySQL Community Server - GPL
...
3.6 mysql 8.0以前版本,需要進(jìn)行數(shù)據(jù)升級(jí)
mysql_upgrade
學(xué)習(xí)完成后再次恢復(fù)到mysql5.7.26版本,恢復(fù)快照或修改配置文件
3.7 簡(jiǎn)單的管理操作
#設(shè)定密碼
mysqladmin -uroot -p password 123456
mysql -uroot -p #輸入密碼回車
#進(jìn)入用戶
use mysql
#查看用戶
select user,host from mysql.user;
#查詢密碼方法
mysql5.7以前
select user,host,password from mysql.user;
mysql5.7以后
select user,host ,authentication_string from mysql.user;
4. 小結(jié)
1.版本選擇(熟悉)
2.安裝方式(熟悉)
3.規(guī)劃和部署(重點(diǎn)掌握)
4.升級(jí)(了解)
5.簡(jiǎn)易管理(熟悉)
二、MySQL體系結(jié)構(gòu)和管理
1.MySQL C/S模型
Server:mysqld
Client:
socket 僅本地連接使用
tcp/ip 應(yīng)用連接使用
TCP/IP方式(遠(yuǎn)程、本地):
mysql -uroot -p123456 -h 10.0.0.51 -P3306
Socket方式(僅本地):
mysql -uroot -p123456 -S /tmp/mysql.sock
2. 實(shí)例
mysqld主進(jìn)程 ----> master thread主線程 ----> 干活的線程 + 預(yù)分配的內(nèi)存結(jié)構(gòu)
Boss ----> 經(jīng)理 ----> 員工 + 辦公室
3.mysqld服務(wù)器程序結(jié)構(gòu)
3.1 MySQL的專用管理和操作命令SQL
DDL 數(shù)據(jù)定義語(yǔ)言
DCL 數(shù)據(jù)控制語(yǔ)言
DML 數(shù)據(jù)操作語(yǔ)言
DQL 數(shù)據(jù)查詢語(yǔ)言
3.2 SQL語(yǔ)句的執(zhí)行過(guò)程
3.2.1連接層
提供連接協(xié)議:sokcet TCP/IP
驗(yàn)證 user password host port
提供連接線程
show processlist;
how full processlist; #功能:接收SQL語(yǔ)句,返回結(jié)果
3.2.2 SQL層
語(yǔ)法檢查和SQL_MODE檢查 (約束規(guī)定)
語(yǔ)義檢查和權(quán)限檢查
解析預(yù)處理,生成解析樹(shù)(執(zhí)行計(jì)劃樹(shù))
優(yōu)化會(huì)根據(jù)自帶算法,選擇最優(yōu)的方案(代價(jià)模型)
代價(jià)? CPU io mem
選擇最優(yōu)的方案進(jìn)行執(zhí)行SQL
3.2.3 存儲(chǔ)引擎層
負(fù)責(zé)根據(jù)SQL層執(zhí)行的結(jié)果,從磁盤上拿數(shù)據(jù)。
將16進(jìn)制的磁盤數(shù)據(jù),交由SQL結(jié)構(gòu)轉(zhuǎn)化成表,
連接層的專用線程返回給用戶。
(相當(dāng)于文件系統(tǒng),將數(shù)據(jù)取出,再交給SQL層結(jié)構(gòu)換成表,返回給用戶)
小擴(kuò)展:忘記密碼怎么辦







