- DBA職業(yè)規(guī)劃
2.1 需要學習的內(nèi)容
(1)MySQL 5.7 安裝部署(二進制)*****
(2)MySQL升級步驟擴展 ***
(3)MySQL5.7 體系結構原理 *****
(4)MySQL基礎管理 *****
(5)基礎SQL語句使用 *****
(6)SQL高級應用 ***
(7)Information_schema獲取元數(shù)據(jù) ***
(8)索引、執(zhí)行計劃管理(基礎優(yōu)化)*****
(9)存儲引擎 *****
(10)日志管理 *****
(11)備份與恢復 ******
(12)主從復制及架構演變 ******
(13)傳統(tǒng)的高可用及讀寫分離(MHA&Atlas)****
(14)傳統(tǒng)分布式架構設計與實現(xiàn)-擴展(Mycat--->DBLE,DRDS)**
(15)MySQL 5.7 高可用及分布式架構-擴展(MGR,InnoDB Cluster)***
(16)MySQL優(yōu)化(安全、性能) ****
(17)MySQL 監(jiān)控(zabbix、Open-falcon) ****
(18) RDS(阿里云課程) *****
額外要會的:
Redis
mongodb
了解:
PG
Oracle
RDBMS ---> NOSQL+RDBMS ---> NoSQL(RDBMS),RDBMS(NoSQL)----> NewSQL (spanner TiDB PDB)
3、DBA職業(yè)素養(yǎng)
3.1、人品
責任-----權利
3.2
3.2.1 嚴謹
磁帶庫----->備份軟件-----17樓
數(shù)據(jù)庫修改\刪除類的命令時 再三考慮,而且要有理論或者實踐的支撐
3.2.2 請收起你的好奇心?。。。?!
注意規(guī)范:
脫庫? “脫敏”!!!!!。
學會保護自己!!!
3.3、細心
把最簡單的事情做的最漂亮,最專業(yè)。
3.4、心態(tài)
別惹事,出事別怕事
職業(yè)技能有關:
3.5、熟悉操作系統(tǒng)(精通)
3.6、熟悉公司業(yè)務
業(yè)務?
產(chǎn)品的功能
用戶的行為(熱功能,熱數(shù)據(jù))
3.7、熟悉行業(yè)
熟悉行業(yè)發(fā)展趨勢
版本
數(shù)據(jù)庫產(chǎn)品類型
https://db-engines.com/en/ranking
- 數(shù)據(jù)庫產(chǎn)品
4.1 什么是數(shù)據(jù)?
4.2 DBMS 數(shù)據(jù)庫管理系統(tǒng)
RDBMS : Oracle ,MySQL ,PG,MSSQL
NoSQL : MongoDB ,Redis ,ES
NEWSQL (分布式): TiDB,Spanner ,AliSQL ,OB ,PolarDB
4.3 MySQL 企業(yè)版本GA選擇
5.6 : 5.6.34 5.6.36 5.6.38(2017913) 5.6.40
5.7 : 5.7.18 ,20(2017913) ,24 ,(上課版本:5726)
8.0 : 8014, 8015 ,8016
4.4 關于數(shù)據(jù)庫版本面試
你們公司用的什么版本的MySQL? 你在公司干幾年了?
4.5 MySQL 5.7.26 二進制版本安裝
4.5.1 下載并上傳軟件至/server/tools
[root@db01 ~]# mkdir -p /server/tools
[root@db01 ~]# cd /server/tools/
[root@db01 /server/tools]# yum install -y lrzsz
[root@db01 /server/tools]# ls
mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
4.5.2 解壓軟件
[root@db01 /server/tools]# tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
[root@db01 ~]# mkdir /application
[root@db01 /server/tools]# mv mysql-5.7.26-linux-glibc2.12-x86_64 /application/mysql
4.5.3 用戶的創(chuàng)建處理原始環(huán)境
[root@db01 ~]# yum remove mariadb-libs-5.5.60-1.el7_5.x86_64 -y
[root@db01 ~]# rpm -qa |grep mariadb
[root@db01 ~]# useradd -s /sbin/nologin mysql
4.5.4 設置環(huán)境變量
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
4.5.5 創(chuàng)建數(shù)據(jù)路徑并授權
1. 添加一塊新磁盤模擬數(shù)據(jù)盤
2. 格式化并掛載磁盤
[root@db01 ~]# mkfs.xfs /dev/sdb
[root@db01 ~]# mkdir /data
[root@db01 ~]# blkid
[root@db01 ~]# vim /etc/fstab
[root@db01 ~]# UUID="b21ec3e0-e251-4ded-bc12-2d940f938dd5" /data xfs defaults 0 0
[root@db01 ~]# mount -a
[root@db01 ~]# df -h
3. 授權
[root@db01 ~]# chown -R mysql.mysql /application/*
[root@db01 ~]# chown -R mysql.mysql /data
4.5.6 初始化數(shù)據(jù)(創(chuàng)建系統(tǒng)數(shù)據(jù))
# 5.6 版本 初始化命令 /application/mysql/scripts/mysql_install_db
# 5.7 版本
[root@db01 ~]# mkdir /data/mysql/data -p
[root@db01 ~]# chown -R mysql.mysql /data
[root@db01 ~]# mysqld --initialize --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
說明:
--initialize 參數(shù):
1. 對于密碼復雜度進行定制:12位,4種
2. 密碼過期時間:180
3. 給root@localhost用戶設置臨時密碼
報錯:
mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解決:
[root@db01 ~]# yum install -y libaio-devel
[root@db01 ~]# mysqld --initialize --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
2019-06-13T04:21:27.706564Z 1 [Note] A temporary password is generated for root@localhost: =mrV)_16is4U
--initialize-insecure
參數(shù):
無限制,無臨時密碼
[root@db01 /data/mysql/data]# \rm -rf /data/mysql/data/*
[root@db01 ~]# mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
4.5.7 配置文件的準備
cat >/etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=6
port=3306
[mysql]
socket=/tmp/mysql.sock
EOF
4.5.8 啟動數(shù)據(jù)庫
1. sys-v
[root@db01 /etc/init.d]# cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@db01 /etc/init.d]# service mysqld restart
2. systemd
注意: sysv方式啟動過的話,需要先提前關閉,才能以下方式登錄
cat >/etc/systemd /mysqld.service <<EOF
[Unit]
Description=MySQL Server 描述= MySQL服務器
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
- 如何分析處理MySQL數(shù)據(jù)庫無法啟動
5.1 without updating PID 類似錯誤
查看日志:
在哪?
/data/mysql/data/主機名.err
[ERROR] 上下文
可能情況:
/etc/my.cnf 路徑不對等
/tmp/mysql.sock文件修改過 或 刪除過
數(shù)據(jù)目錄權限不是mysql
參數(shù)改錯了
6.管理員密碼的設定(root@localhost)
[root@db01 ~]# mysqladmin -uroot -p password oldboy123
Enter password:
- 管理員用戶密碼忘記了?
7.1 關閉數(shù)據(jù)庫
[root@db01 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
7.2 啟動數(shù)據(jù)庫到維護模式
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
7.3 登錄并修改密碼
mysql> alter user root@'localhost' identified by '1';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> flush privileges;
mysql> alter user root@'localhost' identified by '1';
Query OK, 0 rows affected (0.01 sec)
7.4 關閉數(shù)據(jù)庫,正常啟動驗證
- MySQL體系結構與管理
8.1 MySQL C/S結構介紹 ***
兩種連接方式:
TCP/IP:mysql -uroot -poldboy123 -h 10.0.0.51 -P3306
Socket:mysql -uroot -poldboy123 -S /tmp/mysql.sock
8.2 MySQL實例的構成 ***
公司: 老板 + 經(jīng)理 + 員工 + 辦公區(qū)
實例: mysqld + master thread(主線程) + 干活的Thread(普通線程) + 預分配的內(nèi)存
8.3 MySQL中mysqld服務器進程結構
8.3.1 SQL語句引入
結構化的查詢語言
DQL
DDL
DML
DCL
mysql> select user,host from mysql.user;
8.3.2 連接層
(1) 提供連接協(xié)議
Socket
TCPIP
(2) 驗證用戶名(root@localhost)密碼合法性,進行匹配專門的授權表。
(3) 派生一個專用連接線程(接收SQL,返回結果)
mysql> show processlist;
思考:
忘記密碼的參數(shù)在哪做的手腳?
--skip-grant-tables
--skip-networking
8.3.3 SQL層(優(yōu)化方面至關重要的)
(1)驗證SQL語法和SQL_MODE
(2)驗證語義
(3)驗證權限
(4)解析器進行語句解析,生成執(zhí)行計劃(解析樹)
(5)優(yōu)化器(各種算法,基于執(zhí)行代價),根據(jù)算法,找到代價最低的執(zhí)行計劃。
代價:CPU IO MEM
(6)執(zhí)行器按照優(yōu)化器選擇執(zhí)行計劃,執(zhí)行SQL語句,得出獲取數(shù)據(jù)的方法。
(7)提供query cache(默認不開),一般不開,會用redis
(8)記錄操作日志(binlog),默認沒開
8.3.4 存儲引擎層
真正和磁盤打交道的一個層次
根據(jù)SQL層提供的取數(shù)據(jù)的方法,拿到數(shù)據(jù),返回給SQL,結構化成表,再又連接層線程返回給用戶。