學習DBA得大綱
第一章節(jié) 數(shù)據(jù)庫介紹
1. 什么是數(shù)據(jù)啃匿?
在一個網(wǎng)站中蛔外,哪些可以被稱之為數(shù)據(jù)?
咱們認為的數(shù)據(jù):
文字溯乒、數(shù)字夹厌、符號、表格橙数、圖片尊流、視頻。灯帮。崖技。。钟哥。
計算機認為的數(shù)據(jù):
二進制(機器語言)
用來登錄的數(shù)據(jù)有哪些迎献?
用戶 、密碼 和 評論類 的數(shù)據(jù)有什么不一樣嗎腻贰?
用戶 吁恍、密碼該怎么存?
txt
excel
word
...
1億用戶信息該怎么存播演?
如果用以上方式會遇到什么問題冀瓦?
不安全、查找不方便写烤、管理翼闽、限制。
2. 數(shù)據(jù)庫管理系統(tǒng)(軟件:DBMS)
2.1 數(shù)據(jù)庫的發(fā)展歷程
第一時代架構(gòu) : RDBMS時代
什么是RDBMS洲炊?
關(guān)系型數(shù)據(jù)庫關(guān)系系統(tǒng):Oracle 感局、 MSSQL 、 IBM DB2
第二時代架構(gòu): RDBMS(MySQL暂衡、PG询微、云數(shù)據(jù)庫) + NoSQL(Not ONLY SQL)時代
數(shù)據(jù)量、業(yè)務量隨著互聯(lián)網(wǎng)的發(fā)展狂巢,變的越來越大撑毛。所以傳統(tǒng)的RDBMS已經(jīng)不能承載所有業(yè)務需求了。
NoSQL :MongoDB 唧领、ES 代态、Redis
第三時代架構(gòu):
NewSQL? 分布式數(shù)據(jù)庫時代
Aliyun: PolarDB
Pincap: TiDB
2.2 了解實時數(shù)據(jù)庫行業(yè)動態(tài)
問大家一個問題: 怎么去了解運維行業(yè)動態(tài)?
<1. 相關(guān)站點 : itpub 疹吃、 簡書蹦疑、csdn、51cto萨驶。
<2. 看招聘需求 :boss? 歉摧、 拉鉤。
<3. 跟著軟件版本走腔呜,關(guān)注比較活躍的軟件叁温。
<4. 加入一些社群和圈子。
數(shù)據(jù)庫行業(yè)動態(tài)核畴?
<1.
https://db-engines.com/en/ranking
面試題:
請你介紹以下你熟悉的數(shù)據(jù)庫產(chǎn)品膝但?
RDBMS : 關(guān)系型? ? Oracle 、MySQL谤草、MSSQL跟束、PG莺奸、DB2
NoSQL : 非關(guān)系型? MongoDB 、ES 冀宴、Redis
云產(chǎn)品:? RDS? 灭贷、 TDSQL
NewSQL:? polarDB 、TiDB?
你們公司都用了什么數(shù)據(jù)庫產(chǎn)品略贮?
注意: 一般用了云產(chǎn)品的話甚疟,很少自建數(shù)據(jù)庫。
我們建議:
RDBMS : 關(guān)系型? ? Oracle 逃延、MySQL览妖、MSSQL、PG揽祥、DB2 (最多兩種)
? ? ? ? NoSQL : 非關(guān)系型? MongoDB 讽膏、ES 、Redis (一般互聯(lián)網(wǎng)公司都有)
<2.
http://www.itdks.com/
<3. 親自去參加數(shù)據(jù)庫大會盔然。
3. 數(shù)據(jù)庫行業(yè)-崗位
3.1 方向
(1) 中級運維DBA
(2) 數(shù)據(jù)庫技術(shù)支持(云廠商)
開發(fā)DBA :
1-2 開發(fā)語言 桅打,了解業(yè)務、 高級開發(fā)能力(建模愈案、存儲過程挺尾、函數(shù)、觸發(fā)器站绪、事件遭铺、視圖。恢准。魂挂。)
數(shù)據(jù)庫架構(gòu)師
解決方案工程師
....
參考:
http://www.reibang.com/p/e5f65344227b
3.2 職業(yè)素養(yǎng)和崗位要求
人品 : 三觀要正。
不要出現(xiàn)惡意刪庫事件馁筐。
嚴謹:?
理論支撐
實踐檢驗
反復斟酌
收起你的好奇心M空佟!敏沉!
提前登錄號果正,用戶、地址盟迟、端口脫敏秋泳。
細心(態(tài)度):
把最簡單的事情做的最漂亮、最專業(yè)的攒菠。
分享心:
寫文章迫皱、寫博客、錄視頻發(fā)布到互聯(lián)網(wǎng)辖众。
熟悉Linux操作系統(tǒng) :
基礎(chǔ)命令(目錄文件卓起、用戶權(quán)限和敬、磁盤、性能指標命令)
服務管理(LNMPT 既绩、Ansible概龄、zabbix監(jiān)控)
shell 还惠、Python(以后擴展)饲握、JAVA(以后擴展)、C++(以后擴展)
云計算(Docker蚕键、K8s)
數(shù)據(jù)庫知識: 思維導圖救欧。
熟悉行業(yè) : 把控行業(yè)實時動態(tài)
熟悉業(yè)務:產(chǎn)品功能+用戶行為。
擁抱 開源锣光、源碼笆怠。
第二章節(jié) MySQL介紹和安裝
1. MySQL 產(chǎn)品線
1.1 分支
Oracle
MariaDB
Percona
2.? MySQL 企業(yè)版本選擇
2.1 分支
E : 企業(yè)版 (收費),可以下載30天試用
C : 社區(qū)版 (開源)
2.2 社區(qū)版選擇
免費服務期限: 1-5年
擴展服務期限: 6-10年
5.7? :一般建議升級到最新版本誊爹,5.7.18-5.7.30 最好是雙數(shù)版蹬刷。
5.6? :一般建議選用GA6-12月區(qū)間,5.6.34-max,最好是雙數(shù)版本频丘。
8.0? :一般建議使用8.0.18+
2.3 獲取數(shù)據(jù)庫軟件
https://downloads.mysql.com/archives/community/
3. 手動 安裝 MySQL 5.7.28 二進制版本
3.1 克隆虛擬機
IP: 10.0.0.51/24
hostname: db01
防火墻關(guān)閉
selinux關(guān)閉
3.2 清理歷史環(huán)境
yum remove -y mariadb-libs
\rm -rf /etc/my.cnf*
3.2 創(chuàng)建用戶
useradd mysql
3.3 創(chuàng)建相關(guān)目錄
mkdir -p /data/app /data/3306/data /data/3306/logs
#授權(quán)
chown -R mysql.mysql /data
3.4 上傳 5.7.28 軟件至/data/app,并解壓办成、軟連接
[root@db01 ~]# cd /data/app
[root@db01 app]# tar xf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
[root@db01 app]# ln -s mysql-5.7.28-linux-glibc2.12-x86_64 mysql
3.5 設置環(huán)境變量
vim /etc/profile
# 添加最后一行
export PATH=/data/app/mysql/bin:$PATH
#生效配置:
source /etc/profile
3.6 安裝關(guān)鍵依賴軟件包
yum install -y libaio-devel
3.7 初始化數(shù)據(jù)(建庫)
/data/app/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/app/mysql --datadir=/data/3306/data
命令作用:
將數(shù)據(jù)啟動所需要的系統(tǒng)數(shù)據(jù)(/data/3306/data)
參數(shù)介紹:
--initialize-insecure 初始化核心參數(shù)(必加)
--user=mysql? ? ? ? ? 初始化用戶和組
--basedir=/data/app/mysql? ? ? 軟件安裝目錄
--datadir=/data/3306/data? ? ? 數(shù)據(jù)存放位置
彩蛋1:
5.7 版本初始化參數(shù)介紹:
? ? 初始化? ? 不安全
--initialize-insecure
說明:
初始化完成后是無密碼的。
--initialize : 安全的初始化方式
說明:
1. 自動生成臨時密碼搂漠,第一次使用時需要修改此密碼
2. 4種密碼復雜度迂卢,12位。
彩蛋2:
5.7 初始化命令:
/data/app/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/app/mysql --datadir=/data/3306/data
5.6初始化區(qū)別()
/data/app/mysql56/scripts/mysql_install_db --user=mysql --basedir=/data/app/mysql --datadir=/data/3306/data
3.8 準備啟動腳本
[root@db01 data]# cp /data/app/mysql/support-files/mysql.server /etc/init.d/mysqld
3.9 準備配置文件
[root@db01 data]# vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/data/app/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
3.10 啟動數(shù)據(jù)庫
[root@db01 data]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[root@db01 data]# service mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
3.11 使用systemd管理mysql
[root@db01 data]# chkconfig --add mysqld
[root@db01 data]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
[root@db01 data]# systemctl start mysqld
[root@db01 data]# mysql
[root@db01 data]# ps -ef |grep mysqld
root? ? ? 17275? ? ? 1? 0 16:00 ?? ? ? ? 00:00:00 /bin/sh /data/app/mysql/bin/mysqld_safe --datadir=/data/3306/data --pid-file=/data/3306/data/db01.pid
mysql? ? 17416? 17275? 4 16:00 ?? ? ? ? 00:00:00 /data/app/mysql/bin/mysqld --basedir=/data/app/mysql --datadir=/data/3306/data --plugin-dir=/data/app/mysql/lib/plugin --user=mysql --log-error=db01.err --pid-file=/data/3306/data/db01.pid --socket=/tmp/mysql.sock
root? ? ? 17448? 16288? 0 16:00 pts/1? ? 00:00:00 grep --color=auto mysqld
[root@db01 data]#
[root@db01 data]# netstat -tulnp |grep 3306
tcp6? ? ? 0? ? ? 0 :::3306? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ? ? LISTEN? ? ? 17416/mysqld? ? ? ?
[root@db01 data]# systemctl stop? mysqld
[root@db01 data]# netstat -tulnp |grep 3306
3.12 基于initialize模式桐汤,修改臨時密碼
[root@db01 data]# mysqladmin -uroot -p password 123
Enter password: #回車
彩蛋: 如果啟動報錯而克,如何排查?
[root@db01 data]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/3306/data/db01.err'.
. ERROR! The server quit without updating PID file (/data/3306/data/db01.pid).
vim /data/3306/data/db01.err
---》? 從后往前排查 [ERROR]信息怔毛。
2020-06-29T07:32:32.533458Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable
2020-06-29T07:32:32.533512Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable
2020-06-29T07:32:32.533523Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2020-06-29T07:32:33.139530Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2020-06-29T07:32:33.139840Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2020-06-29T07:32:33.140017Z 0 [ERROR] Failed to initialize builtin plugins.
2020-06-29T07:32:33.140055Z 0 [ERROR] Aborting
---》 得到結(jié)果: 權(quán)限問題
第三章 上部:MySQL 基礎(chǔ)管理
1. 用戶管理
1.1 作用
Linux :
登錄系統(tǒng)
管理操作系統(tǒng)對象(文件)
MySQL :
登錄數(shù)據(jù)庫
管理數(shù)據(jù)庫對象(表)
1.2 用戶的定義方式(長成啥樣子员萍?)
Linux :
用戶名: 字母、數(shù)字拣度、特殊符號等組合
MySQL :
用戶名@'白名單'
白名單碎绎?
一個或者多個IP的列表。作用是蜡娶,在列表中存在的IP才能連接數(shù)據(jù)庫捏膨。
oldguo@'localhost'
oldguo@'10.0.0.52'
oldguo@'10.0.0.%'
oldguo@'10.0.0.5%'
oldguo@'10.0.0.0/255.255.254.0'
oldguo@'%'
1.3 用戶的管理
1.3.1 查詢:
mysql> select user,host from mysql.user;
+---------------+-----------+
| user? ? ? ? ? | host? ? ? |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys? ? | localhost |
| root? ? ? ? ? | localhost |
+---------------+-----------+
mysql> select user,host,authentication_string ,plugin? from mysql.user;
+---------------+-----------+-------------------------------------------+-----------------------+
| user? ? ? ? ? | host? ? ? | authentication_string? ? ? ? ? ? ? ? ? ? | plugin? ? ? ? ? ? ? ? |
+---------------+-----------+-------------------------------------------+-----------------------+
| root? ? ? ? ? | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | mysql_native_password |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| mysql.sys? ? | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
+---------------+-----------+-------------------------------------------+-----------------------+
3 rows in set (0.00 sec)
# 如果記不住以上單詞,可以執(zhí)行以下命令獲得
mysql> desc mysql.user;
1.3.2 創(chuàng)建:
需求: 通過 oldguo 用戶淌山,密碼123 豹障,從10網(wǎng)段任意地址登陸MySQL
mysql> create user oldguo@'10.0.0.%' identified by '123';
mysql> select user,host,authentication_string ,plugin? from mysql.user;
+---------------+-----------+-------------------------------------------+-----------------------+
| user? ? ? ? ? | host? ? ? | authentication_string? ? ? ? ? ? ? ? ? ? | plugin? ? ? ? ? ? ? ? |
+---------------+-----------+-------------------------------------------+-----------------------+
| root? ? ? ? ? | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | mysql_native_password |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| mysql.sys? ? | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| oldguo? ? ? ? | 10.0.0.%? | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | mysql_native_password |
+---------------+-----------+-------------------------------------------+-----------------------+
1.3.3 修改用戶
mysql> alter user oldguo@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,authentication_string ,plugin? from mysql.user;
+---------------+-----------+-------------------------------------------+-----------------------+
| user? ? ? ? ? | host? ? ? | authentication_string? ? ? ? ? ? ? ? ? ? | plugin? ? ? ? ? ? ? ? |
+---------------+-----------+-------------------------------------------+-----------------------+
| root? ? ? ? ? | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | mysql_native_password |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| mysql.sys? ? | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| oldguo? ? ? ? | 10.0.0.%? | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | mysql_native_password |
+---------------+-----------+-------------------------------------------+-----------------------+
4 rows in set (0.00 sec)
1.3.4 刪除用戶
mysql> drop user oldguo@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,authentication_string ,plugin? from mysql.user;
+---------------+-----------+-------------------------------------------+-----------------------+
| user? ? ? ? ? | host? ? ? | authentication_string? ? ? ? ? ? ? ? ? ? | plugin? ? ? ? ? ? ? ? |
+---------------+-----------+-------------------------------------------+-----------------------+
| root? ? ? ? ? | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | mysql_native_password |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| mysql.sys? ? | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
+---------------+-----------+-------------------------------------------+-----------------------+
3 rows in set (0.00 sec)
2. 權(quán)限管理
2.1 作用
控制用戶,能夠?qū)?shù)據(jù)庫對象宿接,做哪些操作.
2.2 定義方式
Linux 權(quán)限: r? w? x
MySQL 權(quán)限: 命令即權(quán)限赘淮。
mysql> show privileges;? ---》 查看MySQL中的權(quán)限列表
Alter? ? ? ? ? ? ? ? ?
Alter routine? ? ? ? ?
Create? ? ? ? ? ? ? ?
Create routine? ? ? ?
Create temporary tables
Create view? ? ? ? ? ?
Create user? ? ? ? ? ?
Delete? ? ? ? ? ? ? ?
Drop? ? ? ? ? ? ? ? ?
Event? ? ? ? ? ? ? ? ?
Execute? ? ? ? ? ? ? ?
File? ? ? ? ? ? ? ? ?
Grant option? ? ? ? ?
Index? ? ? ? ? ? ? ? ?
Insert? ? ? ? ? ? ? ?
Lock tables? ? ? ? ? ?
Process? ? ? ? ? ? ? ?
Proxy? ? ? ? ? ? ? ? ?
References? ? ? ? ? ?
Reload? ? ? ? ? ? ? ?
Replication client? ?
Replication slave? ? ?
Select? ? ? ? ? ? ? ?
Show databases? ? ? ?
Show view? ? ? ? ? ? ?
Shutdown? ? ? ? ? ? ?
Super? ? ? ? ? ? ? ? ?
Trigger? ? ? ? ? ? ? ?
Create tablespace? ? ?
Update? ? ? ? ? ? ? ?
Usage? ? ? ? ? ? ? ? ?
說明:
特殊的權(quán)限ALL:代表了以上所有權(quán)限結(jié)合辕录,除了Grant option(給別人授權(quán)的功能)。
一般管理員用戶會具備ALL梢卸,其他普通用戶按需提供相應權(quán)限走诞,一般DROP種類的權(quán)限不會給普通用戶。
2.3 權(quán)限的管理
2.3.1 權(quán)限查詢
MySQL中權(quán)限是屬于用戶的屬性蛤高。
mysql> show grants for root@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
2.3.2 授權(quán)
GRANT 權(quán)限? ON 作用范圍? TO 用戶? IDENTIFIED BY '密碼';
作用范圍 ?
*.*? ? ? ? : 全局范圍? ? ? ? ? chmod -R? /
wordpress.* : 單庫范圍? ? ? ? ? chmod -R? /wordpress
wordpress.t1:單表范圍? ? ? ? ? chmod -R? /wordpress/a.txt
管理員用戶授權(quán):
mysql> grant all on *.* to oldboy@'10.0.0.%' identified by '123';
普通用戶授權(quán):
mysql> grant select,update,delete,insert? on test.* to test@'10.0.0.%' idenfied by '123';
2.3.3 回收
注意: 不能通過重復授權(quán)修改權(quán)限蚣旱,因為授權(quán)都是相加的關(guān)系。
mysql> revoke delete on test.*? from 'test'@'10.0.0.%';
2.3.4 彩蛋 8.0 版本之后在 用戶戴陡、權(quán)限管理方面的變化
<1. 必須先建好用戶塞绿,再授權(quán),grant 命令不再支持自動建用戶,不支持設置密碼恤批。
<2. 建用戶异吻,密碼加密插件發(fā)生變化,改為 :caching_sha2_password喜庞,有很多場景诀浪,修改修改為: mysql_native_password
比如: 第三方工具、主從延都、高可用雷猪、備份軟件等。窄潭。春宣。
mysql> alter user oldboy@'10.0.0.%' identified with mysql_native_password by '123';
<3. 8.0 加入了role(角色)的概念。就是權(quán)限的組合嫉你。
3. MySQL 連接管理
3.1 自帶客戶端命令
# mysql 命令的使用
-u? ? 用戶名
-p? ? 密碼
-S? ? Socket文件
-h? ? IP地址
-P? ? 端口號
-e? ? 免交互執(zhí)行命令
<? ? 導入SQL腳本
## IP地址連接串 (tcpip連接方法)
IP? Port? user? passwd
mysql -u用戶 -p密碼? -h地址 -P端口
前提:
1. IP和端口正確的月帝。
2. 提前創(chuàng)建好可以遠程登錄的用戶
[root@db01 data]# mysql -uoldboy -p123 -h10.0.0.51 -P3306
[root@db01 data]# mysql -uoldboy -p123 -h10.0.0.51
## 本地Socket文件
前提:
1、 設置正確的Socket文件位置
2幽污、 提前創(chuàng)建好localhost相關(guān)用戶
3嚷辅、 只提供給數(shù)據(jù)庫本地連接的特殊方法
[root@db01 data]# mysql -uroot -p -S /tmp/mysql.sock
3.2 開發(fā)工具
sqlyog
navicat
workbench
3.3 應用連接