一、數據庫的發展史簡要
1、數據庫的發展史
萌芽階段-----文件系統使用磁盤文件來存儲數據
初級階段-----第一代數據庫出現了網狀模型、層次模型的數據庫
中級階段-----第二代數據庫關係型數據庫和結構化查詢語言
高級階段-----新一代數據庫“關係-對象”型數據庫
2、文件管理系統的缺點
編寫應用程序不方便
數據冗餘不可避免
應用程序依賴性
不支持對文件的併發訪問
數據間聯繫弱
難以按用戶視圖表示數據
無安全控制功能
3、數據的時代
涉及的數據量大
數據不隨程序的結束而消失
數據被多個應用程序共享
大數據
4、數據庫管理系統的優點
相互關聯的數據的集合
較少的數據冗餘
程序與數據相互獨立
保證數據的安全、可靠
最大限度地保證數據的正確性
數據可以併發使用並能同時保證一致性
5、數據庫管理系統
數據庫是數據的彙集。它以一定的組織形式存於存儲介質上
DBMS是管理數據庫的系統軟件,它實現數據庫系統的各種功能,是數據庫系統的核心
DBA:負責數據庫的規劃、設計、協調、維護和管理等工作
應用程序指以數據庫爲基礎的應用程序
6、數據庫管理系統的基本功能
數據定義
數據處理
數據安全
數據備份
7、數據庫系統的架構
單機架構
大型主機/終端機架構
主從式架構(C/S)
分佈式架構
二、關係型數據庫
1、關係:關係就是二維表,並滿足如下性質(表中的行、列次序並不重要)
行row:表中的每一行,又稱爲一條記錄
列column:表中的每一列,稱爲屬性,字段
主鍵Primary key:用於唯一確定一個記錄的字段
域domain:屬性的取值範圍,如:性別只能是'男'和'女'兩個值
2、RDBMS
MySQL:MySQL,MariaDB,Percona Server
PostgreSQL:簡稱爲pgsql,EnterpriseDB
Oracle:
MSSQL:
DB2
3、事物transaction
多個操作被當作一個整體對待
ACID:
A:原子性
C:一致性
I:隔離性
D:持久性
4、實體-聯繫模型E-R
實體Entity
客觀存在並可以互相區分的客觀事物或抽象事件成爲實體
在E-R圖中用矩形框表示實體,把實體名寫在框內
屬性
實體所具有的特徵或性質
聯繫
聯繫是數據之間的關聯集合,是客觀存在的應用語義鏈
實體內部的聯繫:指組成實體的各屬性之間的聯繫,如職工實體中,職工號和部門經理號之間有一種關聯關係
實體之間的聯繫:指不同實體之間聯繫,例如學生選修課和學生基本信息實體之間
實體之間的聯繫用菱形框表示
5、聯繫類型
聯繫的類型
一對一聯繫(1:1)
一對多聯繫(1:n)
多對多練習(n:n)
6、數據三要素
數據結構:
包括兩類:
一類是與數據類型、內容、性質有關的對象,比如關係模型中的域、屬性和關係等
另一類是與數據之間聯繫有關的對象,它從數據組織層表達數據記錄與字段的機構
數據的操作
數據提取:在數據集合中提取感興趣的內容(SELSECT)
數據更新:變更數據庫中的數據(INSERT、DELETE、UPDATE)
數據的約束條件
是一組完整性規則的集合
實體(行)完整性 Entity integrity
域(列)完整性 Domain INtegrity
參考完整性 Referential Integrity
7、簡單數據規劃流程
第一階段:收集數據,得到字段
收集必要且完整的數據項
轉換成數據表的字段
第二階段:吧字段分類、歸入表,建立表的聯繫
關聯:表和表間的關係
分割數據表並建立關聯的有點
節約空間
減少輸入錯誤
方便數據修改
第三階段
規範化數據庫
8、數據庫的正規化分析
RDMBS設計範式基礎概念
設計關係數據庫時,遵從不同的規劃要求,設計出合理的關係型數據庫,這些不同的規範要求被稱爲不同的範式
各種範式呈遞次規範,越高的範式數據庫冗餘越小
目前關係數據庫有六種凡是:
第一範式(1 NF)
第二範式(2 NF)
第三範式(3 NF)
巴德斯科範式(BCNF)
第四範式(4 NF)
第五範式(5 NF,又稱完美範式)
滿足最低要求的範式爲第一範式(1 NF),在第一範式的基礎上進一步滿足更多規範要求的稱爲第二範式(2 NF)
其餘範式依次類推,一般說來,數據庫只需要滿足第三範式(3 NF)即可
9、範式
1 NF:無重複的列,每一列都是不可分割的基本數據項,同一列不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性,除去同類型的字段,就是無重複的列
2 NF:屬性完全依賴於主鍵,第二範式必須先滿足第一範式,要求表中的每個行必須可以被惟唯一地區分,通常爲表加上一個列,以存儲各個實例的唯一標識PK,非PK的字段需要與整個PK有直接相關性
3 NF:屬性不依賴於其它非主屬性,滿足第三範式必須先滿足第二範式,第三範式要求一個數據庫表中不包含已在其他表中已包含的非主關鍵字信息,非PK的字段間不能有從屬關係
10、SQL概念
SQL:Structure Query Language
結構化查詢語言
SQL解釋器
數據存儲協議:應用層協議,C/S
S:server,監聽於套接字,接收並處理客戶端的應用請求
C:Client
程序接口
CLI
GUI
應用編程接口
ODBC:Open Database Connectivity
JDBC:Java Data Base Connectivity
11、約束
約束:constraint,表中的數據要遵守的限制
主鍵:一個或多個字段的組合,填入的數據必須能在本表中唯一標識本行,必須提供數據,即NOT NULL,一個表只能有一個主鍵
惟一鍵:一個或多個字段的組合,填入的數據必須能在本表中唯一標識本行,允許爲NULL,一個表中可以存在多個
外鍵:一個表中的某字段可以填入的數據取決於另一個表的主鍵或唯一鍵已有的數據
檢查:字段值在一定範圍內
12、索引
將表中的一個或都夠惡字段中的數據複製一份另存,並且這些需要按特定的次序排列存儲
關係運算
選擇:挑選出符合條件的行
投影:挑選出需要的字段
連接:表間字段的關聯
13、數據模型
數據抽象
物理層:決定數據的存儲格式,即RDBMS在磁盤上如何組織文件
邏輯層:描述存儲什麼數據,以及數據間存在什麼樣的關係
視圖層:描述DB中的部分數據
關係模型的分類
關係模型
基於對象的關係模型
半結構化的關係模型:XML數據(擴展的標籤語言)
[root@lanyangyangdn***vnamed]#vim /etc/gconf/gconf.xml.defaults/%gconf-tree.xml [root@lanyangyangdn***vnamed]#vim /etc/gdm/custom.conf #修改爲自動登陸 [daemon] AutomaticLoginEnable=true AutomaticLogin=root
三、MySQL
1、MySQL歷史
1979年:TcX公司 Monty Widenius,Unireg
1996年:發佈MySQL1.0,Solaris版本,Linux版本
1999年:MySQL AB公司,瑞典
2003年:MySQL 5.0版本,提供視圖、存儲過程等功能
2008年:sun 收購
2009年:oracle收購sun
2009年:Monty成立MariaDB
2、MySQL體系結構
myisam鎖是整表鎖定,innodb是行鎖,鎖住整行
myisam不支持事物,innodb支持事物
3、MySQL安裝方式
安裝方式:
1、源代碼:編譯安裝
2、二進制格式的程序包:展開至特定路徑,並經過簡單配置後即可使用
3、程序包管理器管理的程序包
CentOS安裝光盤
項目官方:
https://downloads.mariadb.org/mariadb/repositories/
4、安裝和使用MariaDB
CentOS 7直接提供
CentOS 6
4、MariaDB的特性
MariaDB的特性:
單進程,多線程
插件式存儲引擎:存儲管理器有多種實現版本,功能和特性可能均略有差別;用戶可根據需要靈活選擇
存儲引擎也稱之爲“表類型”(1) 更多的存儲的存儲引擎
MyISAM ==> Aria
InnoDB ==> XtraDB
Mysql5.5.8開始innoDB引擎是MYSQL默認引擎,InnoDB對比MyISAM的最大特點就是InnoDB支持事務(2) 諸多擴展和新特性
(3) 提供了較多測試組件
(4) 開源
Centos7的MariaDB數據庫包括兩個包組:
Mariadbmariadb-client
mariadb組包括下面包:
mariadb-server:mandatory package
mariadb-bench:optional package
mariadb-test:optional packagemariadb-client組包括下面包:
Mariadb:mandatory package
MySQL-python:default package
mysql-connector-odbc:default package
libdbi-dbd-mysql:optional package
mysql-connector-java:optional package
perl-DBD-MySQL:optional package配置文件:
/etc/my.cnf 和 /etc/my.cnf.d/ *.cnf
yum安裝模式
[root@Centos6 ]#cat /etc/yum.repos.d/mariadb.repo [mariadb] name = MariaDB baseurl = gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 [root@Centos6 ]#yum install mariadb-server 。。。。。 Dependencies Resolved ================================================================================================================== Package Arch Version Repository Size ================================================================================================================== Installing: MariaDB-Galera-server x86_64 5.5.58-1.el6 mariadb 27 M replacing mysql-server.x86_64 5.1.73-8.el6_8 MariaDB-client x86_64 5.5.59-1.el6 mariadb 10 M replacing mysql.x86_64 5.1.73-8.el6_8 MariaDB-compat x86_64 5.5.59-1.el6 mariadb 2.7 M replacing mysql-libs.x86_64 5.1.73-8.el6_8 Installing for dependencies: MariaDB-common x86_64 5.5.59-1.el6 mariadb 23 k galera x86_64 25.3.22-1.rhel6.el6 mariadb 8.8 M lsof x86_64 4.82-5.el6 base 324 k Transaction Summary ================================================================================================================== Install 6 Package(s) 。。。。。。 [root@Centos6 ]#yum info mariadb-server Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Available Packages Name : MariaDB-server Arch : x86_64 Version : 5.5.59 Release : 1.el6 Size : 44 M Repo : mariadb Summary : MariaDB: a very fast and robust SQL database server URL : http://mariadb.org License : GPLv2 Description : MariaDB: a very fast and robust SQL database server : : It is GPL v2 licensed, which means you can use the it free of charge under the : conditions of the GNU General Public License Version 2 (). : : MariaDB documentation can be found at : MariaDB bug reports should be submitted through https://mariadb.atlassian.net/ [root@Centos6 ]#rpm -ql MariaDB-client ---》這個包名字注意到小寫敏感 /etc/my.cnf.d ---》主配置文件 /etc/my.cnf.d/mysql-clients.cnf V /usr/bin/msql2mysql /usr/bin/mysql /usr/bin/mysql_embedded /usr/bin/mysql_find_rows /usr/bin/mysql_plugin /usr/bin/mysql_waitpid /usr/bin/mysqlaccess /usr/bin/mysqladmin /usr/bin/mysqlbinlog /usr/bin/mysqlcheck /usr/bin/mysqldump /usr/bin/mysqlimport /usr/bin/mysqlshow /usr/bin/mysqlslap /usr/share/man/man1/msql2mysql.1.gz /usr/share/man/man1/mysql.1.gz /usr/share/man/man1/mysql_find_rows.1.gz /usr/share/man/man1/mysql_plugin.1.gz /usr/share/man/man1/mysql_waitpid.1.gz /usr/share/man/man1/mysqlaccess.1.gz /usr/share/man/man1/mysqladmin.1.gz /usr/share/man/man1/mysqlbinlog.1.gz /usr/share/man/man1/mysqlcheck.1.gz /usr/share/man/man1/mysqldump.1.gz /usr/share/man/man1/mysqlimport.1.gz /usr/share/man/man1/mysqlshow.1.gz /usr/share/man/man1/mysqlslap.1.gz/usr/share/mysql /usr/share/mysql/charsets /usr/share/mysql/charsets/Index.xml /usr/share/mysql/charsets/R [root@Centos7-cb~]#useradd -r mysql -s /sbin/nologin [root@Centos7-cb~]#id mysql uid=997(mysql) gid=995(mysql) groups=995(mysql) [root@Centos7-cb~]#geten getenforce getent [root@Centos7-cb~]#getent passwd mysql mysql:x:997:995::/home/mysql:/sbin/nologin [root@Centos7-cb~]#tar xfv mariadb-10.2.12-linux-x86_64.tar.gz -C /usr/local/ [root@Centos7-cblocal]#ls bin etc games include lib lib64 libexec mariadb-10.2.12-linux-x86_64 sbin share src [root@Centos7-cblocal]#ln -s mariadb-10.2.12-linux-x86_64/ mysql [root@Centos7-cblocal]#ll total 0 drwxr-xr-x. 2 root root 6 Nov 5 2016 bin drwxr-xr-x. 2 root root 6 Nov 5 2016 etc drwxr-xr-x. 2 root root 6 Nov 5 2016 games drwxr-xr-x. 2 root root 6 Nov 5 2016 include drwxr-xr-x. 2 root root 6 Nov 5 2016 lib drwxr-xr-x. 2 root root 6 Nov 5 2016 lib64 drwxr-xr-x. 2 root root 6 Nov 5 2016 libexec drwxrwxr-x 12 1021 1004 290 Jan 4 06:01 mariadb-10.2.12-linux-x86_64 lrwxrwxrwx 1 root root 29 Jan 21 21:56 mysql -> mariadb-10.2.12-linux-x86_64/ drwxr-xr-x. 2 root root 6 Nov 5 2016 sbin drwxr-xr-x. 5 root root 49 Jan 14 14:59 share drwxr-xr-x. 2 root root 6 Nov 5 2016 src [root@Centos7-cblocal]#chown -R mysql.mysql mysql/ ---》修改文件的所有者所屬主 [root@Centos7-cbbin]#echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh ---》修改PATH變量 [root@Centos7-cbbin]#. /etc/profile.d/mysql.sh [root@Centos7-cbbin]#partprobe ---》分區後生效 Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only.
5、MariaDB安裝
安裝
yum groupinstall mariadb mariadb-client
systemctl start mariadb
systemctl enable mariadb提高安全性
mysql_secure_installation
設置數據庫管理員root口令
禁止root遠程登錄
刪除anonymous用戶帳號
刪除test數據庫
6、MairaDB配置
偵聽3306/tcp端口可以在綁定有一個或全部接口IP上
vim /etc/my.cnf
[mysqld]加一行:
skip-networking=1 關閉網絡連接,只偵聽本地客戶端, 所有和服務器的交互都通過一個socket實現socket的配置存放在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf修改
firewall-cmd --permanent --add-service=mysql
firewall-cmd --reload
7、通用二進制格式安裝過程
(1) 準備用戶
groupadd -r -g 306 mysql
useradd -r -g 306 -u 306 –m –d /app/data mysql(2) 準備數據目錄
以/app/data爲例,建議使用邏輯卷
chown mysql:mysql /app/data(3) 準備二進制程序
tar xf mariadb-VERSION-linux-x86_64.tar.gz -C /usr/local
cd /usr/local;ln -sv mariadb-VERSION mysql
chown -R root:mysql /usr/local/mysql/(4) 準備配置文件
配置格式:類ini格式,各程序由單個配置文件提供配[prog_name]
配置文件查找次序:後面覆蓋前面的配置文件
/etc/my.cnf -->/etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf
mkdir /etc/mysql/
cp support-files/my-large.cnf /etc/mysql/my.cnf
[mysqld]中添加三個選項:
datadir = /app/data
innodb_file_per_table = on
skip_name_resolve = on 禁止主機名解析,建議使用(5)創建數據庫文件
cd /usr/local/mysql/
./scripts/mysql_install_db --datadir=/app/data --user=mysql(6)準備日誌文件
touch /var/log/mysqld.log
chown mysqld /var/log/mysqld.log(7)準備服務腳本,並啓動服務
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
service mysqld start(8)安全初始化
/user/local/mysql/bin/mysql_secure_installation