MySQL數據庫的安裝及體系說明


第1章 MySQL介紹

1.1 數據的定義

數據是指對客觀事件進行記錄並可以鑒別的符號,是對客觀事物的性質、狀態以及相互關系等進行記載的物理符號或這些物理符號的組合,是可識別、抽象的符號

1.2 數據庫管理系統

作用:存儲數據、管理數據(查詢數據、備份恢復、安全、性能等)

1.2.1 RDBMS及NoSQL的特性對比

種類

RDBMS(關系型數據庫)

NoSQL(非關系型)

特點

強大查詢功能

強一致性

二級索引

事務支持等

靈活模式

擴展性

高性能

分布式支持

典型產品

Oracle、MySQL、sqlserver、db2

Redis(持久化緩存)、MongoDB(最接近關系型數據的NoSQL)、Memcached、hbase、Neo4j

功能特點介紹

01.數據存取是通過SQL

02.最大特點:數據安全性方面強(ACID)

01.關系型數據庫的補充,現在也有部分替代的趨勢

02.關注高性能,高並發,靈活性,忽略和上述無關的功能

1.2.2 NoSQL的分類、特點、典型產品

鍵值(KV)存儲:Memcached、Redis

列存儲(column-oriented):HBASE(新浪,360)、Cassandra(200台服務器集群)

文檔數據庫(document-oriented):MongoDB(最接近關系型數據庫的NoSQL)

圖形存儲(Graph):Neo4j

1.2.2.1  Oracle公司產品介紹

01.Oracle數據庫版本介紹
   7--8i--9i--10g—11g--12c--18c(?) 02.Oracle的市場應用 市場份額第一,趨勢遞減 市場空間,傳統企業 傳統企業也在互聯網化 03.MySQL數據庫版本介紹 5.0--5.1--5.5--5.6--5.7--8.0 04.MySQL的市場應用 中、大型互聯網公司 市場空間:互聯網領域第一 趨勢明顯

同源產品:MariaDB、perconaDB

1.2.2.2  其他公司產品介紹

01.微軟:SQL Server

微軟和sysbase合作開發的產品,后自己開發windows平台

3/4線小公司,傳統行業在用

02.IBM:DB2

市場占有量小

目前只有:國有銀行(人行、中國銀行、工商銀行等)、中國移動應用

03.PostgreSQL

04.MongoDB

05.Redis

后三者廣泛應用在大型互聯網公司

1.2.3 Redis特點

01.依然高性能該並發

02.數據持久化的功能

03.支持多數據類型,主從復制和集群

04.管理不再使用SQL

 

第2章 Mysql安裝

2.1 安裝方式介紹

01.RPM/Yum:安裝方便、速度快,無法定制

02.二進制:無需安裝,解壓即可使用,但不能定制功能

03.編譯安裝:可定制,安裝慢

5.5之前:./configure make make install

5.5之后:cmake gmake

04.先編譯再制作rpm、yum庫,然后yum安裝

特點:簡單、速度快、可定制,比較復雜,制作時間長

2.1.1 企業選擇安裝方式

中小企業:以上方式都可以,運維偏向編譯,dba偏向選擇二進制

大型企業:可以選擇04

2.2 准備環境

01.克隆模板機(盡量使用centos6)→克隆完做快照

1 iptables -L   #查看已添加的iptables規則
2 iptables -F #清除已有iptables規則 3 /etc/init.d/iptables stop 4 chkconfig iptables off 5 6 getenforce

02.設置IP地址為10.0.0.52 主機名db02

A.網卡地址修改IP=10.0.0.52

1 sed -i 's#200#52#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
2 grep '52' /etc/sysconfig/network-scripts/ifcfg-eth[01]

B.修改系統主機名稱

1 hostname db02
2 sed -i 's#oldboyedu-40#db02#g' /etc/sysconfig/network 3 grep "db02" /etc/sysconfig/network

C.重啟網絡生效

 1 /etc/init.d/network restart 

03.設置hosts解析

 1 echo "10.0.0.52 db02" >>/etc/hosts 

04.添加單獨的磁盤用來存放mysql軟件和數據(/dev/sdb=20G)

1 mkfs.ext4 /dev/sdb
2 mkdir /application 3 mount /dev/sdb /application 4 blkid #查詢磁盤的uuid,這里用來查詢/dev/sdb的信息 5 6 echo "UUID=xxx /application ext4 defaults 0 0 " >>/etc/fstab

2.3 軟件安裝

2.3.1 安裝依賴包

 1 yum install -y ncurses-devel libaio-devel 2 yum install cmake -y #安裝cmake 3 rpm -qa ncurses-devel libaio-devel cmake 

 1 vim /etc/yum.conf 2 3 keepcache=1 #將網絡yum源使用過的軟件包保存下來 4 cachedir=/var/cache/$basearch/$releasever #保存在這個位置 

2.3.2 創建mysql管理用戶

 1 useradd -s /sbin/nologin -u 999 -M mysql #無需登錄,生產環境中建議手動定義UID及GID 2 id mysql 

2.3.3 解壓安裝mysql

1 mkdir -p /home/oldboy/tools/
2 cd /home/oldboy/tools/
3 wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36.tar.gz
4 ls -l mysql-5.6.36.tar.gz   #盡量去官方下載或rz直接上傳軟件包

 

 1 tar xf mysql-5.6.36.tar.gz
 2 cd mysql-5.6.36
 3 cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.36 \   #代碼預編譯->程序存放位置 4 -DMYSQL_DATADIR=/application/mysql-5.6.36/data \ 5 -DMYSQL_UNIX_ADDR=/application/mysql-5.6.36/tmp/mysql.sock \ 6 -DDEFAULT_CHARSET=utf8 \ 7 -DDEFAULT_COLLATION=utf8_general_ci \ 8 -DWITH_EXTRA_CHARSETS=all \ 9 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 10 -DWITH_FEDERATED_STORAGE_ENGINE=1 \ 11 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 12 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ 13 -DWITH_ZLIB=bundled \ 14 -DWITH_SSL=bundled \ 15 -DENABLED_LOCAL_INFILE=1 \ 16 -DWITH_EMBEDDED_SERVER=1 \ 17 -DENABLE_DOWNLOADS=1 \ 18 -DWITH_DEBUG=0 19 20 make && make install #如果是多核cpu可指定make -jcpu核數,加快編譯速度 21 ln -s /application/mysql-5.6.36/ /application/mysql

#補充:如果系統里有曾經安裝的數據庫文件和啟動程序最好停掉或刪除,以免沖突

說明:在裝系統時不要安裝有關虛擬化的選擇,因為這樣會導致安裝KVM的過程中依賴iptable,刪除所有iptables規則后重啟網絡會自動添加上

若上述操作未出現錯誤(可使用echo $?查看返回值),cd /application/mysql/若其下有內容則表示MySQL安裝成功。至此,數據庫安裝完成

2.4 初始化及配置數據庫

 1 cp support-files/my*.cnf /etc/my.cnf 

初始化系統庫對象(程序位置、數據存放位置及使用的用戶)

 1 /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql 

提示:如果以前操作系統中安裝過rpm格式的mysql,系統中可能會遺留/etc/my.cnf文件,則需將它刪除/更名,否則該文件會干擾MySQL的正確配置,造成無法啟動

說明:初始化mysql數據庫文件會有很多信息提示,若出現兩個OK的字樣即表示初始化成功,否則就要解決初始化的問題

 

 1 chown -R mysql.mysql /application/mysql/ 2 cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld #拷貝mysql啟動腳本到命令路徑 3 chmod 700 /etc/init.d/mysqld 

2.5 啟動服務並測試

 chkconfig mysqld on 2 chkconfig --list mysqld 3 /etc/init.d/mysqld start 

注意:此時數據庫啟動會提示找不到xx/tmp/mysql.sock,因為5.6.36版本不會自動創建tmp目錄,需手動創建mkdir -p /application/mysql/tmp

 1 netstat -lntup|grep 3306 2 cd /application/mysql/bin 3 ./mysql 

2.6 設置mysql全局變量

1 echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile
2 tail -1 /etc/profile 3 source /etc/profile 4 echo $PATH 5 mysql

說明:數據庫分為系統數據和管理數據

2.6.1 排錯方法

01.輸出

02.錯誤日志

 1 tail -100 /application/mysql/data/db02.err #日志需定期切割,否則會導致日志過大無法查看 

2.6.2 設置mysql數據庫密碼並登錄

01.設置密碼

1 which mysqladmin
2 mysqladmin -u root password 'oldboy123' #設置密碼oldboy123 3 mysqladmin -u root -p password '新密碼' #更改密碼

注意:此時命令回車后需驗證舊密碼,輸入舊密碼后即更改成功

02.登錄測試

 1 mysql -uroot -poldboy123 

2.6.2.1  生產環境中如何更安全的登錄數據庫

 1 mysql -uroot -p 2 #此時回車后只需輸入密碼即可登錄,且密碼不會被打印到屏幕上 

2.6.3 刪除用戶及無用數據庫(基本優化)

 show databases; #查看數據庫及用戶 2 select user,host from mysql.user; 

 

#刪除用戶

1 drop user ''@'db02';
2 drop user ''@'localhost'; 3 drop user 'root'@'db02'; 4 drop user 'root'@'::1'; 5 select user,host from mysql.user; #此時數據庫僅有root 127.0.0.1及root localhost用戶

 

#刪除數據庫

 drop database test; 2 show databases; 

注意:刪除無密碼無用戶名的用戶,即存在安全隱患,其查看方法如下

 1 select user,host,password from mysql.user 

提示:在數據庫中的use mysql相當於命令行中的/application/mysql/data目錄,在此目錄下創建目錄(表)即可在數據庫中看到

2.7 ‼常見問題

故障:

 1 ERROR! The server quit without updating PID file 

解決:

       1.權限chown -R mysql.mysql

       2.killall mysqld

       3.重新初始化數據

       4.運行1年了,出問題(非法斷電/關機或者非法關閉數據庫,如kill -9)

 

第3章 Mysql體系及原理說明

3.1 Mysql客戶端-服務器結構

Mysql是一個典型的C/S服務結構:即client+server(服務器及客戶端)兩部分

01.mysql自帶的客戶端程序/application/mysql/bin

 mysql

mysqladmin

mysqldump等

4 API接口:php-mysql 

02.服務端程序mysqld,即二進制程序(后台的守護進程)

單進程多線程的服務結構

3.1.1 數據庫連接方式

01.通過TCP/IP方式(用戶;密碼;IP地址;端口)

 1 mysql -uroot -poldboy123 -h 10.0.0.52 -P 3306 

02.通過socket套接字(用戶;密碼;socket路徑)

 1 mysql -uroot -poldboy123 -S /application/mysql/tmp/mysql.sock 

注意:端口號和socket均為啟動完成后自動創建,mysql -uroot -poldboy123默認使用socket方式登錄

3.2 Mysql實例

01.mysql在啟動過程

a.啟動后台守護進程,並生成工作線程xxx

b.預分配內存結構供MySQL處理數據使用

02.Mysql實例:即mysql后台進程+線程結構+預分配的內存結構

說明:在處理能力上,數據庫以守護進程mysqld的方式先載入內存,程序等待請求的到來再進行處理;同時也把將來可能用到的內存結構一並分配完成

3.3 Mysqld服務器程序構成

服務器程序構成概覽:

服務器程序

功能及作用

備注

連接層

通信協議、連接線程、用戶驗證合法性

 

SQL(核心)

判斷語句語法

解析器、查詢執行

授權、查詢高速緩存

優化器、查詢日志記錄(記錄成功SQL的執行)

二維表邏輯結構

結構化的查詢語言(數據庫內部的邏輯語言)

存儲引擎層

存儲/檢索數據、通過索引查找數據

數據的不同存儲方式

不同的管理方式:事務(增刪改)、備份恢復、高級功能(高可用、讀寫分離架構)

將抽象(邏輯)數據存放到數據文件中去

基於磁盤內存網絡

InnoDB/MyISAMMEMORYNDB

 

3.3.1 SQL層

3.3.1.1  分類

DDL數據庫定義語言

DCL數據庫控制語言

DML數據庫操作語言

DQL數據查詢語言

3.3.2 存儲引擎層

01.依賴於存儲引擎的功能

 存儲介質

事務功能

鎖定

備份和恢復

5 優化 

02.特殊功能

 a.全文搜索 2 b.引用完整性 3 c.空間數據處理 

03.雙層處理

上層包括SQL解析器和優化器、下層包含一組存儲引擎

04.SQL 層不依賴於存儲引擎

引擎不影響SQL處理

3.3.3 總結Mysql的執行過程(連接層->SQL層->存儲引擎層)

1)用戶通過TCP/IP或者socket請求連接mysql
2)經過連接層判斷連接合法性,分配連接相應線程 3)連接層線程將用戶需要執行的SQL語句送到SQL層處理 4)SQL層經過語句、語義、語法、SQL類型、權限等判斷 5)查詢緩存查找,若找到直接返回給用戶數據;若未找到則將SQL交給解析器解析,生成執行計划 6)優化器讀取執行計划,判斷並選擇代價最小的執行計划 7)執行計划執行,生成獲取數據的方法方案,交由存儲引擎層繼續處理 8)存儲引擎層根據上層提供的方法,獲取磁盤數據返回用戶 9)此次查詢信息會緩存到查詢緩存中

3.4 Mysql邏輯結構(數據庫內部結構)

出現原因:為了用戶能夠讀懂數據出現的,用來更好的理解數據

即管理數據的一種方式

對象:

庫show databases; use mysql;

表show tables;

  記錄(行select user,host,password from user、列desc user)

3.4.1 Mysql物理結構

庫(目錄)、表(多個文件)->行記錄MYD、列結構frm、索引MYI

 1 [root@db02 ~]# cd /application/mysql/data/ 2 [root@db02 data]# ls 3 auto.cnf(數據庫唯一值) db02.err(錯誤日志) db02.pid(mysqld進程號) ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema 

注意:上述文件切勿進行物理操作,如rm.mv.vi.vim

3.4.2 Mysql存儲方式

01.存儲方式

程序文件隨數據目錄一起存儲在服務器安裝目錄下,執行各種客戶機程序、管理程序和實用程序時將創建程序可執行文件和日志文件,首要使用磁盤空間的是數據目錄。

A.服務器日志文件和狀態文件:
包含有關服務器處理的語句的信息,日志可用於進行故障排除、監視、復制和恢復

B.InnoDB日志文件:
(適用於所有數據庫)駐留在數據目錄級別

C.InnoDB系統表空間:
包含數據字典、撤消日志和緩沖區;每個數據庫在數據目錄下均具有單一目錄(無論在數據庫中創建何種類型的表)

02.存儲內容

A.數據文件:
特定於存儲引擎的數據文件。這些文件也可能包含元數據或索引信息,具體取決於所使用的存儲引擎

B.格式文件(.frm):
包含每個表和/或視圖結構的說明,位於相應的數據庫目錄中 C.觸發器: 與某個表關聯並在該表發生特定事件時激活的命名數據庫對象 數據目錄的位置取決於配置、操作系統、安裝包和分發,典型位置是/var/lib/mysql MySQL在磁盤上存儲系統數據庫(mysql),mysql包含諸如用戶、特權、插件、幫助列表、事件、時區實現和存儲例程之類的信息。

3.4.3 體系結構小結

3.4.3.1  SQL優化相關的理念

解析器:執行計划-數據庫執行sql的一種方式

優化器:知道基本規則,直接影響將來選擇哪個執行計划

查詢緩存:生產環境中,一般會用redis memcached來代替

3.4.3.2  邏輯結構<--->物理結構對應關系

庫<=>data即一個目錄,為了存放多張表

表<=>data在相應的庫中,用多個文件來表示

      myisam表:3文件(.myd數據文件、.myi索引文件、frm表/列結構定義文件)

      innodb:2個/1個,即共享表空間:ibdata1->系統的元數據(基表)-->information_schema視圖

                         獨立表空間:5.6以后默認的表的存儲方式

獨立表空間實例

#創建庫->切換庫->創建表->寫入數據->查看列信息

 1 mysql>
 2 create database oldboy;
 3 use oldboy; 4 create table t1(id int); 5 insect id from t1; 6 desc t1; 7 exit 8 9 [root@db02 data]# cd oldboy/ 10 [root@db02 oldboy]# ls 11 db.opt t1.frm t1.ibd

3.4.3.3  如何使用磁盤(物理結構)

a.多個庫多個目錄,目錄下存放了多個表的存儲文件

b.auto.cnf

  ibdataN

  ib_logfileN

  db02.err

  xx.pid等

 

 此筆記是本人學習摘記整理而成,此為初稿(尚有諸多不完善之處),原創作品允許轉載,轉載時請務必以超鏈接形式標明文章原始出處,作者信息和本聲明,否則將追究法律責任。http://www.cnblogs.com/bananaaa/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM