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

第1章 MySQL介紹

1.1 數據的定義

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

1.2 數據庫管理系統

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

1.2.1 RDBMS及NoSQL的特性對比

種類redis

RDBMS(關係型數據庫)sql

NoSQL(非關係型)數據庫

特色vim

強大查詢功能windows

強一致性centos

二級索引緩存

事務支持等安全

靈活模式

擴展性

高性能

分佈式支持

典型產品

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/

相關文章
相關標籤/搜索