簡述MySQL體系結構
Mysql是由SQL接口,解析器,優化器,緩存,存儲引擎組成的
Connectors指的是不同語言中與SQL的交互
Management Serveices & Utilities: 系統管理和控制工具
Connection Pool: 連接池。管理緩沖用戶連接,線程處理等需要緩存的需求
SQL Interface: SQL接口,接受用戶的SQL命令,并且返回用戶需要查詢的結果。比如select from就是調
用SQL Interface
Parser: 解析器。SQL命令傳遞到解析器的時候會被解析器驗證和解析。
Optimizer: 查詢優化器。SQL語句在查詢之前會使用查詢優化器對查詢進行優化。
Cache和Buffer: 查詢緩存。如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數
據.
Engine :存儲引擎。存儲引擎是MySql中具體的與文件打交道的子系統。
連接層
?(1)提供連接協議:TCP/IP 、SOCKET
?(2)提供驗證:用戶、密碼,IP,SOCKET
?(3)提供專用連接線程:接收用戶SQL,返回結果
?通過以下語句可以查看到連接線程基本情況
?mysql> show processlist;
?SQL層
?(1)接收上層傳送的SQL語句
?(2)語法驗證模塊:驗證語句語法,是否滿足SQL_MODE
?(3)語義檢查:判斷SQL語句的類型
???DDL :數據定義語言
???DCL :數據控制語言
???DML :數據操作語言
???DQL: 數據查詢語言
???...
?(4)權限檢查:用戶對庫表有沒有權限
?(5)解析器:對語句執行前,進行預處理,生成解析樹(執行計劃),說白了就是生成多種執行方案.
?(6)優化器:根據解析器得出的多種執行計劃,進行判斷,選擇最優的執行計劃
? ? ? ? ? 代價模型:資源(CPU IO MEM)的耗損評估性能好壞
?(7)執行器:根據最優執行計劃,執行SQL語句,產生執行結果
? ? ? ? ? 執行結果:在磁盤的xxxx位置上
?(8)提供查詢緩存(默認是沒開啟的),會使用redis tair替代查詢緩存功能
?(9)提供日志記錄(日志管理章節):binlog,默認是沒開啟的。
? ? ? ? ? 存儲引擎層(類似于Linux中的文件系統)負責根據SQL層執行的結果,從磁盤上拿數據。將16進制的磁盤數據,交由SQL結構化化成表,
? ? ? ? ? 連接層的專用線程返回給用戶。
CentOS7??RPM方式安裝MySQL5.7
首先,我們連接上Xshell
事先從官網下載RPM安裝包,上傳至服務器
ls -l mysql-5.7.14-1.el7.x86_64.rpm-bundle.tar
解壓查看:
tar xf mysql-5.7.14-1.el7.x86_64.rpm-bundle.tar
ls -l mysql-community*
安裝:
首先限制mariadb相關軟件包。
[root@localhost ~]# yum remove mariadb-libs
[root@localhost ~]# rpm -ivh mysql-community-client-5.7.14-1.el7.x86_64.rpm
mysql-community-common-5.7.14-1.el7.x86_64.rpm mysql-community-libs-5.7.14-1.el7.x86_64.rpm ?mysql-community-server-5.7.14-1.el7.x86_64.rpm
啟動服務
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# systemctl enable mysqld
CentOS7??通用二進制方式安裝MySQL5.7
1、下載glibc版本的Mysql
2、新建用戶以安全方式運行進程
[root@localhost local]# groupadd -r -g 27 mysql
[root@localhost local]# useradd -r -u 27 -g 27 -c 'MySQL Server' -s /bin/false mysql
3、安裝并初始化mysql
[root@localhost ~]# tar xf mysql-5.7.14-linux-glibc2.5-x86_64.tar -C /usr/local/
[root@localhost ~]# cd /usr/local/
[root@localhost local]# tar xf mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz
[root@localhost local]#ln -sv mysql-5.7.14-linux-glibc2.5-x86_64 mysql
"mysql" -> "mysql-5.7.14-linux-glibc2.5-x86_64"
[root@localhost local]# chown -R mysql.mysql mysql/*
[root@localhost local]#mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
注意記錄臨時密碼
2021-01-13T08:16:44.223972Z 1 [Note] A temporary password is generated for root@localhost: Sb8-se>k%Ick
[root@localhost local]#cd /usr/local/mysql
[root@localhost mysql]# \cp support-files/my-default.cnf /etc/my.cnf
vim /etc/my.cnf
添加如下行指定mysql數據文件的存放位置:
datadir = /usr/local/mysql/data
[root@localhost mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@localhost mysql]# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld --添加為系統服務
# chkconfig mysqld on --開機自啟動
systemctl start mysqld
將mysql的bin目錄加入PATH環境變量,編輯/etc/profile文件使用mysql客戶端命令
由于PATH環境變量中沒有添加,所以我們要手動添加
export PATH=$PATH:/usr/local/mysql/bin
現在就可以了
使用mysql客戶端登錄服務器,重置root密碼
沒有密碼時設置:mysqladmin -uroot password '123456'??? 臨時密碼
修改root密碼:
方法1:mysqladmin -uroot -p'123456' password
方法2:ALTER USER root@localhost identified by '123456';
方法3:mysql> update mysql.user set authentication_string=password('123456')
?-> where user='root' and host='localhost';
mysql> flush privileges;生效
root密碼遺忘:
關閉數據庫, 修改主配置文件(/etc/my.cnf) 添加: skip-grant-tables
啟動數據庫, 空密碼登錄并修改密碼
mysql-> update mysql.userset authentication_string=password('123ABCacz!')
???????? -> whereuser='root'and host='localhost';
mysql> flushprivileges;生效
刪除 skip-grant-tables,重啟數據庫驗證新密碼
?