數據是指對客觀事件進行記錄並能夠鑑別的符號,是對客觀事物的性質、狀態以及相互關係等進行記載的物理符號或這些物理符號的組合,是可識別、抽象的符號php
做用:存儲數據、管理數據(查詢數據、備份恢復、安全、性能等)mysql
種類redis |
RDBMS(關係型數據庫)sql |
NoSQL(非關係型)數據庫 |
特色vim |
強大查詢功能windows 強一致性centos 二級索引緩存 事務支持等安全 |
靈活模式 擴展性 高性能 分佈式支持 |
典型產品 |
Oracle、MySQL、sqlserver、db2 |
Redis(持久化緩存)、MongoDB(最接近關係型數據的NoSQL)、Memcached、hbase、Neo4j |
功能特色介紹 |
01.數據存取是經過SQL 02.最大特色:數據安全性方面強(ACID) |
01.關係型數據庫的補充,如今也有部分替代的趨勢 02.關注高性能,高併發,靈活性,忽略和上述無關的功能 |
鍵值(KV)存儲:Memcached、Redis
列存儲(column-oriented):HBASE(新浪,360)、Cassandra(200臺服務器集羣)
文檔數據庫(document-oriented):MongoDB(最接近關係型數據庫的NoSQL)
圖形存儲(Graph):Neo4j
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
01.微軟:SQL Server
微軟和sysbase合做開發的產品,後本身開發windows平臺
3/4線小公司,傳統行業在用
02.IBM:DB2
市場佔有量小
目前只有:國有銀行(人行、中國銀行、工商銀行等)、中國移動應用
03.PostgreSQL
04.MongoDB
05.Redis
後三者普遍應用在大型互聯網公司
01.依然高性能該併發
02.數據持久化的功能
03.支持多數據類型,主從複製和集羣
04.管理再也不使用SQL
01.RPM/Yum:安裝方便、速度快,沒法定製
02.二進制:無需安裝,解壓便可使用,但不能定製功能
03.編譯安裝:可定製,安裝慢
5.5以前:./configure make make install
5.5以後:cmake gmake
04.先編譯再製做rpm、yum庫,而後yum安裝
特色:簡單、速度快、可定製,比較複雜,製做時間長
中小企業:以上方式均可以,運維偏向編譯,dba偏向選擇二進制
大型企業:能夠選擇04
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
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 #保存在這個位置
1 useradd -s /sbin/nologin -u 999 -M mysql #無需登陸,生產環境中建議手動定義UID及GID 2 id 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安裝成功。至此,數據庫安裝完成
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
1 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
1 echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile
2 tail -1 /etc/profile 3 source /etc/profile 4 echo $PATH 5 mysql
說明:數據庫分爲系統數據和管理數據
01.輸出
02.錯誤日誌
1 tail -100 /application/mysql/data/db02.err #日誌需按期切割,不然會致使日誌過大沒法查看
01.設置密碼
1 which mysqladmin
2 mysqladmin -u root password 'oldboy123' #設置密碼oldboy123 3 mysqladmin -u root -p password '新密碼' #更改密碼
注意:此時命令回車後需驗證舊密碼,輸入舊密碼後即更改爲功
02.登陸測試
1 mysql -uroot -poldboy123
1 mysql -uroot -p 2 #此時回車後只需輸入密碼便可登陸,且密碼不會被打印到屏幕上
1 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用戶
#刪除數據庫
1 drop database test; 2 show databases;
注意:刪除無密碼無用戶名的用戶,即存在安全隱患,其查看方法以下
1 select user,host,password from mysql.user
提示:在數據庫中的use mysql至關於命令行中的/application/mysql/data目錄,在此目錄下建立目錄(表)便可在數據庫中看到
故障:
1 ERROR! The server quit without updating PID file
解決:
1.權限chown -R mysql.mysql
2.killall mysqld
3.從新初始化數據
4.運行1年了,出問題(非法斷電/關機或者非法關閉數據庫,如kill -9)
Mysql是一個典型的C/S服務結構:即client+server(服務器及客戶端)兩部分
01.mysql自帶的客戶端程序/application/mysql/bin
1 mysql
2 mysqladmin
3 mysqldump等
4 API接口:php-mysql
02.服務端程序mysqld,即二進制程序(後臺的守護進程)
單進程多線程的服務結構
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方式登陸
01.mysql在啓動過程
a.啓動後臺守護進程,並生成工做線程xxx
b.預分配內存結構供MySQL處理數據使用
02.Mysql實例:即mysql後臺進程+線程結構+預分配的內存結構
說明:在處理能力上,數據庫以守護進程mysqld的方式先載入內存,程序等待請求的到來再進行處理;同時也把未來可能用到的內存結構一併分配完成
服務器程序構成概覽:
服務器程序 |
功能及做用 |
備註 |
鏈接層 |
通訊協議、鏈接線程、用戶驗證合法性 |
|
SQL層(核心) |
判斷語句語法 解析器、查詢執行 受權、查詢高速緩存 優化器、查詢日誌記錄(記錄成功SQL的執行) |
二維表邏輯結構 結構化的查詢語言(數據庫內部的邏輯語言) |
存儲引擎層 |
存儲/檢索數據、經過索引查找數據 數據的不一樣存儲方式 不一樣的管理方式:事務(增刪改)、備份恢復、高級功能(高可用、讀寫分離架構) |
將抽象(邏輯)數據存放到數據文件中去 基於磁盤、內存、網絡 InnoDB/MyISAM、MEMORY、NDB
|
DDL數據庫定義語言
DCL數據庫控制語言
DML數據庫操做語言
DQL數據查詢語言
01.依賴於存儲引擎的功能
1 存儲介質
2 事務功能
3 鎖定
4 備份和恢復
5 優化
02.特殊功能
1 a.全文搜索 2 b.引用完整性 3 c.空間數據處理
03.雙層處理
上層包括SQL解析器和優化器、下層包含一組存儲引擎
04.SQL 層不依賴於存儲引擎
引擎不影響SQL處理
1)用戶經過TCP/IP或者socket請求鏈接mysql
2)通過鏈接層判斷鏈接合法性,分配鏈接相應線程 3)鏈接層線程將用戶須要執行的SQL語句送到SQL層處理 4)SQL層通過語句、語義、語法、SQL類型、權限等判斷 5)查詢緩存查找,若找到直接返回給用戶數據;若未找到則將SQL交給解析器解析,生成執行計劃 6)優化器讀取執行計劃,判斷並選擇代價最小的執行計劃 7)執行計劃執行,生成獲取數據的方法方案,交由存儲引擎層繼續處理 8)存儲引擎層根據上層提供的方法,獲取磁盤數據返回用戶 9)這次查詢信息會緩存到查詢緩存中
出現緣由:爲了用戶可以讀懂數據出現的,用來更好的理解數據
即管理數據的一種方式
對象:
庫show databases; use mysql;
表show tables;
記錄(行select user,host,password from user、列desc user)
庫(目錄)、表(多個文件)->行記錄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
01.存儲方式
程序文件隨數據目錄一塊兒存儲在服務器安裝目錄下,執行各類客戶機程序、管理程序和實用程序時將建立程序可執行文件和日誌文件,首要使用磁盤空間的是數據目錄。
A.服務器日誌文件和狀態文件:
包含有關服務器處理的語句的信息,日誌可用於進行故障排除、監視、複製和恢復
B.InnoDB日誌文件:
(適用於全部數據庫)駐留在數據目錄級別
C.InnoDB系統表空間:
包含數據字典、撤消日誌和緩衝區;每一個數據庫在數據目錄下均具備單一目錄(不管在數據庫中建立何種類型的表)
02.存儲內容
A.數據文件:
特定於存儲引擎的數據文件。這些文件也可能包含元數據或索引信息,具體取決於所使用的存儲引擎
B.格式文件(.frm):
包含每一個表和/或視圖結構的說明,位於相應的數據庫目錄中 C.觸發器: 與某個表關聯並在該表發生特定事件時激活的命名數據庫對象 數據目錄的位置取決於配置、操做系統、安裝包和分發,典型位置是/var/lib/mysql MySQL在磁盤上存儲系統數據庫(mysql),mysql包含諸如用戶、特權、插件、幫助列表、事件、時區實現和存儲例程之類的信息。
解析器:執行計劃-數據庫執行sql的一種方式
優化器:知道基本規則,直接影響未來選擇哪一個執行計劃
查詢緩存:生產環境中,通常會用redis memcached來代替
庫<=>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
a.多個庫多個目錄,目錄下存放了多個表的存儲文件
b.auto.cnf
ibdataN
ib_logfileN
db02.err
xx.pid等
此筆記是本人學習摘記整理而成,此爲初稿(尚有諸多不完善之處),原創做品容許轉載,轉載時請務必以超連接形式標明文章原始出處,做者信息和本聲明,不然將追究法律責任。http://www.cnblogs.com/bananaaa/