MySQL高階01
MySQL支援大型資料庫,支援5000萬條記錄的資料倉庫,32位系統表文件最大可支援4GB,64位系統支援最大的表文件為8TB。
官網下載地址:http://dev.mysql.com/downloads/mysql/
拷貝&解壓縮
1、CentOS6
rpm -qa|grep mysql
如果存在mysql-libs的舊版本包如下:
請先執行解除安裝命令:rpm -e --nodeps mysql-libs
2、CentOS7
rpm -qa|grep mariadb
如果存在如下:
請先執行解除安裝命令:rpm -e --nodeps mariadb-libs
檢查/tmp資料夾許可權
由於mysql安裝過程中,會通過mysql使用者在/tmp目錄下新建tmp_db檔案,所以請給/tmp較大的許可權
執行 :chmod -R 777 /tmp
[[email protected] ~]# cd /
[[email protected] /]# ll
可以看到
drwxrwxrwt. 27 root root 4096 1月 11 08:26 tmp
在mysql的安裝檔案目錄下執行:
rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm
在把它拖到opt目錄下安裝
[[email protected] /]# cd /opt
檢視MySQL安裝版本
可以執行 mysqladmin --version命令,類似java -version如果打出訊息,即為成功。
通過vim 檢視 mysql使用者和mysql組
在mysql首次登入前要給 root 賬號設定密碼
[[email protected] opt]# cd
[[email protected] ~]# service mysql start
啟動服務後,執行命令
[
然後通過 mysql -uroot -p123123進行登入
[[email protected] ~]# mysql -uroot -p123456
在linux下檢視安裝目錄 ps -ef | grep mysql
自啟動mysql伺服器,
修改字符集
1 檢視字符集
show variables like 'character%';
show variables like '%char%';
看看出現的結果:
預設的伺服器用了latin1,所以會亂碼。
2 修改my-huge.cnf
在/usr/share/mysql/ 中找到my-huge.cnf的配置檔案,
拷貝其中的my-huge.cnf 到 /etc/ 並命名為my.cnf (cp my-huge.cnf /etc/my.cnf)
然後修改my.cnf:
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8
3、重新啟動mysql
service mysql restart
檢視原庫的字符集:show create database mydb
但是原庫的設定不會發生變化,引數修改之對新建的資料庫生效
4、已生成的庫表字符集如何變更
修改資料庫的字符集
mysql> alter database mydb character set 'utf8';
修改資料表的字符集
mysql> alter table mytbl convert to character set 'utf8';
但是原有的資料如果是用非'utf8'編碼的話,資料本身不會發生改變。
通過工具遠端訪問
1、先 ping 一下資料庫伺服器的ip 地址確認網路暢通。
2、關閉資料庫服務的防火牆
service iptables stop
3、 確認Mysql中已經有可以通過遠端登入的賬戶
select * from mysql.user where user='root' and host='%';
如果沒有使用者,先執行如下命令:
grant all privileges on *.* to [email protected]'%' identified by '123123';
4、測試連線:
Mysql的一些雜項配置
MySQL的sql_mode合理設定
sql_mode是個很容易被忽視的變數,預設值是空值,在這種設定下是可以允許一些非法操作的,比如允許一些非法資料的插入。在生產環境必須將這個值設定為嚴格模式,所以開發、測試環境的資料庫也必須要設定,這樣在開發測試階段就可以發現問題。
mysql> SHOW VARIABLES LIKE 'sql_mode'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | sql_mode | | +---------------+-------+ 1 row in set (0.00 sec)
sql_mode常用值如下:
set sql_mode='ONLY_FULL_GROUP_BY';
ONLY_FULL_GROUP_BY:
對於GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現,那麼這個SQL是不合法的,因為列不在GROUP BY從句中
Mysql邏輯架構介紹
和其它資料庫相比,MySQL有點與眾不同,它的架構可以在多種不同場景中應用併發揮良好作用。主要體現在儲存引擎的架構上,
外掛式的儲存引擎架構將查詢處理和其它的系統任務以及資料的儲存提取相分離。這種架構可以根據業務的需求和實際需要選擇合適的儲存引擎。
1.連線層
最上層是一些客戶端和連線服務,包含本地sock通訊和大多數基於客戶端/服務端工具實現的類似於tcp/ip的通訊。主要完成一些類似於連線處理、授權認證、及相關的安全方案。在該層上引入了執行緒池的概念,為通過認證安全接入的客戶端提供執行緒。同樣在該層上可以實現基於SSL的安全連結。伺服器也會為安全接入的每個客戶端驗證它所具有的操作許可權。
2.服務層
2.1 Management Serveices & Utilities: 系統管理和控制工具
2.2 SQL Interface: SQL介面
接受使用者的SQL命令,並且返回使用者需要查詢的結果。比如select from就是呼叫SQL Interface
2.3 Parser: 解析器
SQL命令傳遞到解析器的時候會被解析器驗證和解析。
2.4 Optimizer: 查詢優化器。
SQL語句在查詢之前會使用查詢優化器對查詢進行優化。
用一個例子就可以理解: select uid,name from user where gender= 1;
優化器來決定先投影還是先過濾。
2.5 Cache和Buffer: 查詢快取。
如果查詢快取有命中的查詢結果,查詢語句就可以直接去查詢快取中取資料。
這個快取機制是由一系列小快取組成的。比如表快取,記錄快取,key快取,許可權快取等
3.引擎層
儲存引擎層,儲存引擎真正的負責了MySQL中資料的儲存和提取,伺服器通過API與儲存引擎進行通訊。不同的儲存引擎具有的功能不同,這樣我們可以根據自己的實際需要進行選取。後面介紹MyISAM和InnoDB
4.儲存層
資料儲存層,主要是將資料儲存在運行於裸裝置的檔案系統之上,並完成與儲存引擎的互動。
索引優化分析
效能下降SQL慢 執行時間長 等待時間長
資料過多(分庫分表)、關聯了太多的表,太多join(SQL優化)、沒有充分利用到索引(索引建立)、伺服器調優及各個引數設定(調整my.cnf)
7種join