1、MySQL 簡介
概述
-
mysql是一個關系型數據庫管理系統,由瑞典mysql ab公司開發,目前屬于oracle公司。
-
MySQL是一種關聯數據庫管理系統,將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
-
Mysql是開源的,所以你不需要支付額外的費用。
-
Mysql支持大型的數據庫??梢蕴幚頁碛猩锨f條記錄的大型數據庫。
-
MySQL使用標準的SQL數據語言形式。
-
Mysql可以允許于多個系統上,并且支持多種語言。這些編程語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
-
Mysql對PHP有很好的支持,PHP是目前最流行的Web開發語言。
-
MySQL支持大型數據庫,支持5000萬條記錄的數據倉庫,32位系統表文件最大可支持4GB,64位系統支持最大的表文件為8TB。
-
Mysql是可以定制的,采用了GPL協議,你可以修改源碼來開發自己的Mysql系統。
高級MySQL涉及到知識
-
mysql內核
-
sql優化攻城獅
-
mysql服務器的優化
-
各種參數常量設定
-
查詢語句優化
-
主從復制
-
軟硬件升級
-
容災備份
-
sql編程
-
完整的mysql優化需要很深的功底,大公司甚至有專門的DBA寫上述
2、MySQL Linux版的安裝
-
此次安裝的是 MySQL 5.5, 安裝環境 CentOS 6.5
-
版本下載地址 官網下載地址
-
下載 MySQL-Client 和 MySQL-Server
-
downloads.skysql.com/archives/mysql-5.5/MySQL-server-5.5.16-1.rhel4.i386.rpm
-
downloads.skysql.com/archives/mysql-5.5/MySQL-client-5.5.16-1.rhel4.i386.rpm
-
downloads.skysql.com/archives/mysql-5.5/MySQL-devel-5.5.16-1.rhel4.i386.rpm
-
檢查當前系統是否安裝過MySQL
-
查詢命令: ?rpm -qa|grep -i mysql
-
刪除命令: ?rpm -e –nodeps RPM包全名
-
安裝mysql服務端(注意提示)
-
設置密碼提示
-
安裝mysql客戶端
-
查看MySQL安裝時創建的mysql用戶和mysql組
-
# cat /etc/passwd | grep mysql
-
# cat /etc/group | grep mysql
-
mysql服務的啟+停
-
查看字符集
-
修改字符集,修改之前copy 的配置文件。(詳細后續代碼)
-
MySQL的安裝位置
-
show variables like ‘character%’;
-
show variables like ‘%char%’;
-
字符集
-
默認的是客戶端和服務器都用了latin1,所以會亂碼。
-
在linux下查看安裝目錄 ps -ef|grep mysql
-
拷貝當前5.5版本: cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
-
5.6版本 ?cp /usr/share/mysql/my-default.cnf /etc/my.cnf
-
#chkconfig mysql on ? 設置自動啟動
-
# chkconfig –list | grep mysql ? 檢查是否設置了自動啟動
-
# /etc/init.d/mysql start
-
# /etc/init.d/mysql stop
-
或者
-
#service mysql start
-
#service mysql stop
-
查看MySQL啟停狀態: ?# ps -ef | grep mysql
-
啟停操作:
-
設置MySQL 自啟服務
-
修改配置文件位置
-
修改字符集和數據存儲路徑
路徑 | 解釋 | 備注 |
---|---|---|
/var/lib/mysql/ | mysql數據庫文件的存放路徑 | /var/lib/mysql/atguigu.cloud.pid |
/usr/share/mysql | 配置文件目錄 | mysql.server命令及配置文件 |
/usr/bin | 相關命令目錄 | mysqladmin mysqldump等命令 |
/etc/init.d/mysql | 啟停相關腳本 |
MySQL安裝位置
[client] #password?=?your_password port?=?3306 socket?=?/var/lib/mysql/mysql.sock #?這一行需要設置字符集 default-character-set=utf8 #?The?MySQL?server [mysqld] port?=?3306 #?還有這三行 character_set_server=utf8 character_set_client=utf8 collation-server=utf8_general_ci socket?=?/var/lib/mysql/mysql.sock skip-external-locking key_buffer_size?=?384M max_allowed_packet?=?1M table_open_cache?=?512 sort_buffer_size?=?2M read_buffer_size?=?2M read_rnd_buffer_size?=?8M myisam_sort_buffer_size?=?64M thread_cache_size?=?8 query_cache_size?=?32M #?Try?number?of?CPU's*2?for?thread_concurrency thread_concurrency?=?8 [mysql] no-auto-rehash #?還有這一行 default-character-set=utf8
3、Mysql配置文件
主要配置文件
-
二進制日志log-bin
-
主從復制
-
-
錯誤日志log-error
-
默認是關閉的,記錄嚴重的警告和錯誤信息,每次啟動和關閉的詳細信息等。
-
查詢日志log
-
默認關閉,記錄查詢的sql語句,如果開啟會減低mysql的整體性能,因為記錄日志也是需要消耗系統資源的
-
數據文件
-
windows
-
Linux:
-
D:devSoftMySQLServer5.5data目錄下可以挑選很多庫
-
默認路徑 #cd /var/lib/mysql/
-
看看當前系統中的全部庫后再進去 #ls -1F | grep ^d
-
兩系統
-
frm文件: 存放表結構
-
myd文件: 存放表數據
-
myi文件: 存放表索引
-
如何配置
-
Windows: my.ini文件
-
Linux: ?/etc/my.cnf文件
4、Mysql邏輯架構介紹
總體概覽
-
和其它數據庫相比,MySQL有點與眾不同,它的架構可以在多種不同場景中應用并發揮良好作用。主要體現在存儲引擎的架構上,插件式的存儲引擎架構將查詢處理和其它的系統任務以及數據的存儲提取相分離。這種架構可以根據業務的需求和實際需要選擇合適的存儲引擎。
-
數據存儲層,主要是將數據存儲在運行于裸設備的文件系統之上,并完成與存儲引擎的交互。
-
存儲引擎層,存儲引擎真正的負責了MySQL中數據的存儲和提取,服務器通過API與存儲引擎進行通信。不同的存儲引擎具有的功能不同,這樣我們可以根據自己的實際需要進行選取。后面介紹MyISAM和InnoDB
-
第二層架構主要完成大多少的核心服務功能,如SQL接口,并完成緩存的查詢,SQL的分析和優化及部分內置函數的執行。所有跨存儲引擎的功能也在這一層實現,如過程、函數等。在該層,服務器會解析查詢并創建相應的內部解析樹,并對其完成相應的優化如確定查詢表的順序,是否利用索引等,最后生成相應的執行操作。如果是select語句,服務器還會查詢內部的緩存。如果緩存空間足夠大,這樣在解決大量讀操作的環境中能夠很好的提升系統的性能。
-
最上層是一些客戶端和連接服務,包含本地sock通信和大多數基于客戶端/服務端工具實現的類似于tcp/ip的通信。主要完成一些類似于連接處理、授權認證、及相關的安全方案。在該層上引入了線程池的概念,為通過認證安全接入的客戶端提供線程。同樣在該層上可以實現基于SSL的安全鏈接。服務器也會為安全接入的每個客戶端驗證它所具有的操作權限。
-
-
1、連接層
-
2、服務層
-
3、引擎層
-
4、存儲層
查詢說明
-
首先,mysql的查詢流程大致是:
-
mysql客戶端通過協議與mysql服務器建連接,發送查詢語句,先檢查查詢緩存,如果命中,直接返回結果,否則進行語句解析
-
有一系列預處理,比如檢查語句是否寫正確了,然后是查詢優化(比如是否使用索引掃描,如果是一個不可能的條件,則提前終止),生成查詢計劃,然后查詢引擎啟動,開始執行查詢,從底層存儲引擎調用API獲取數據,最后返回給客戶端。怎么存數據、怎么取數據,都與存儲引擎有關。
-
然后,mysql默認使用的BTREE索引,并且一個大方向是,無論怎么折騰sql,至少在目前來說,mysql最多只用到表中的一個索引。
5、Mysql存儲引擎
-
查看命令
-
show variables like ‘%storage_engine%’;
-
mysql> show engines;
-
查看當前的MySQL 提供什么存儲引擎
-
看你的 MySQL 當前默認的存儲引擎:
-
默認的存儲引擎
-
MyISAM和InnoDB
-
兩種引擎對比
-
阿里巴巴、淘寶用哪個
-
-
Percona 為 MySQL 數據庫服務器進行了改進,在功能和性能上較 MySQL 有著很顯著的提升。該版本提升了在高負載情況下的 InnoDB 的性能、為 DBA 提供一些非常有用的性能診斷工具;另外有更多的參數和命令來控制服務器行為。
-
該公司新建了一款存儲引擎叫xtradb完全可以替代innodb,并且在性能和并發上做得更好,
-
阿里巴巴大部分mysql數據庫其實使用的percona的原型加以修改。
【相關推薦】