MySQL高級知識- MySQL的架構介紹

目錄node

一、MySQL 簡介

概述
  • MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB公司開發,目前屬於Oracle公司。
  • MySQL是一種關聯數據庫管理系統,將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。mysql

  • Mysql是開源的,因此你不須要支付額外的費用。
  • Mysql支持大型的數據庫。能夠處理擁有上千萬條記錄的大型數據庫。
  • 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系統。linux

高級MySQL涉及到知識
  • mysql內核
  • sql優化攻城獅
  • mysql服務器的優化
  • 各類參數常量設定
  • 查詢語句優化
  • 主從複製
  • 軟硬件升級
  • 容災備份
  • sql編程
  • 完整的mysql優化須要很深的功底,大公司甚至有專門的DBA寫上述

二、MySQL Linux版的安裝

  • 這次安裝的是 MySQL 5.5, 安裝環境 CentOS 6.5
  • 版本下載地址 官網下載地址
  • 檢查當前系統是否安裝過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服務的啓+停
    • 查看MySQL啓停狀態: # ps -ef | grep mysql
    • 啓停操做:
      • # /etc/init.d/mysql start
      • # /etc/init.d/mysql stop
      • 或者
      • #service mysql start
      • #service mysql stop
    • 設置MySQL 自啓服務
      • #chkconfig mysql on 設置自動啓動
      • # chkconfig --list | 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
    • 修改字符集和數據存儲路徑
      • 查看字符集
        • show variables like 'character%';
        • show variables like '%char%';
        • 字符集
        • 默認的是客戶端和服務器都用了latin1,因此會亂碼。
      • 修改字符集,修改以前copy 的配置文件。(詳細後續代碼)
      • MySQL的安裝位置
        • 在linux下查看安裝目錄 ps -ef|grep 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

三、Mysql配置文件

主要配置文件
  • 二進制日誌log-bin
    • 主從複製
  • 錯誤日誌log-error
    • 默認是關閉的,記錄嚴重的警告和錯誤信息,每次啓動和關閉的詳細信息等。
  • 查詢日誌log
    • 默認關閉,記錄查詢的sql語句,若是開啓會減低mysql的總體性能,由於記錄日誌也是須要消耗系統資源的
  • 數據文件
    • 兩系統
      • windows
        • D:\devSoft\MySQLServer5.5\data目錄下能夠挑選不少庫
      • Linux:
        • 默認路徑 #cd /var/lib/mysql/
        • 看看當前系統中的所有庫後再進去 #ls -1F | grep ^d
    • frm文件: 存放表結構
    • myd文件: 存放表數據
    • myi文件: 存放表索引
  • 如何配置
    • Windows: my.ini文件
    • Linux: /etc/my.cnf文件

四、Mysql邏輯架構介紹

整體概覽
  • 和其它數據庫相比,MySQL有點不同凡響,它的架構能夠在多種不一樣場景中應用併發揮良好做用。主要體如今存儲引擎的架構上,插件式的存儲引擎架構將查詢處理和其它的系統任務以及數據的存儲提取相分離。這種架構能夠根據業務的需求和實際須要選擇合適的存儲引擎。
    • 一、鏈接層
      • 最上層是一些客戶端和鏈接服務,包含本地sock通訊和大多數基於客戶端/服務端工具實現的相似於tcp/ip的通訊。主要完成一些相似於鏈接處理、受權認證、及相關的安全方案。在該層上引入了線程池的概念,爲經過認證安全接入的客戶端提供線程。一樣在該層上能夠實現基於SSL的安全連接。服務器也會爲安全接入的每一個客戶端驗證它所具備的操做權限。
    • 二、服務層
      • 第二層架構主要完成大多少的核心服務功能,如SQL接口,並完成緩存的查詢,SQL的分析和優化及部份內置函數的執行。全部跨存儲引擎的功能也在這一層實現,如過程、函數等。在該層,服務器會解析查詢並建立相應的內部解析樹,並對其完成相應的優化如肯定查詢表的順序,是否利用索引等,最後生成相應的執行操做。若是是select語句,服務器還會查詢內部的緩存。若是緩存空間足夠大,這樣在解決大量讀操做的環境中可以很好的提高系統的性能。
    • 三、引擎層
      • 存儲引擎層,存儲引擎真正的負責了MySQL中數據的存儲和提取,服務器經過API與存儲引擎進行通訊。不一樣的存儲引擎具備的功能不一樣,這樣咱們能夠根據本身的實際須要進行選取。後面介紹MyISAM和InnoDB
    • 四、存儲層
      • 數據存儲層,主要是將數據存儲在運行於裸設備的文件系統之上,並完成與存儲引擎的交互。
查詢說明
  • 首先,mysql的查詢流程大體是:
    • mysql客戶端經過協議與mysql服務器建鏈接,發送查詢語句,先檢查查詢緩存,若是命中,直接返回結果,不然進行語句解析
    • 有一系列預處理,好比檢查語句是否寫正確了,而後是查詢優化(好比是否使用索引掃描,若是是一個不可能的條件,則提早終止),生成查詢計劃,而後查詢引擎啓動,開始執行查詢,從底層存儲引擎調用API獲取數據,最後返回給客戶端。怎麼存數據、怎麼取數據,都與存儲引擎有關。
    • 而後,mysql默認使用的BTREE索引,而且一個大方向是,不管怎麼折騰sql,至少在目前來講,mysql最多隻用到表中的一個索引。

五、Mysql存儲引擎

  • 查看命令
    • 查看當前的MySQL 提供什麼存儲引擎
      • mysql> show engines;
    • 看你的 MySQL 當前默認的存儲引擎:
      • show variables like '%storage_engine%';
    • 默認的存儲引擎
  • MyISAMInnoDB
    • 兩種引擎對比
  • 阿里巴巴、淘寶用哪一個
    • Percona 爲 MySQL 數據庫服務器進行了改進,在功能和性能上較 MySQL 有着很顯著的提高。該版本提高了在高負載狀況下的 InnoDB 的性能、爲 DBA 提供一些很是有用的性能診斷工具;另外有更多的參數和命令來控制服務器行爲。
    • 該公司新建了一款存儲引擎叫xtradb徹底能夠替代innodb,而且在性能和併發上作得更好,
    • 阿里巴巴大部分mysql數據庫其實使用的percona的原型加以修改。
相關文章
相關標籤/搜索