數據庫的基本概念
數據:
- 描述事物的符號記錄稱爲數據(Data);
- 包括數字,文字、圖形、圖像、聲音、檔案記錄等;
- 以“記錄”形式按統一的格式進行存儲。
表:
- 將不同的記錄組織在一起,就形成了“表”
- 是用來存儲具體數據的
數據庫:
- 數據庫就是表的集合,是存儲數據的倉庫
- 以一定的組織方式存儲的相互有關的數據
數據庫系統發展史
第一代數據庫
自20世紀60年代起,第一代數據庫系統問世。它們是層次模型與網狀模型的數據庫系統,爲統一管理和共享數據提供了有力的支撐
第二代數據庫
- 20世紀70年代初,第二代數據庫——關係數據庫開始出現
- 20世紀80年代初,IBM公司的關係數據庫系統DB2問世,作爲第二代數據庫系統的關係數據庫,開始逐步取代層次與網狀模型的數據庫,成爲占主導地位的數據庫,成爲行業主流。到目前爲止,關係數據庫系統仍佔領數據庫應用的主要地位
第三代數據庫
- 自20世紀80年代起,各種適應不同領域的新型數據庫系統不斷涌現,如工程數據庫、多媒體數據庫、圖形數據庫、智能數據庫、分佈式數據庫及面向對象數據庫等,特別是面向對象數據庫系統,由於其實用性強、適應面廣而受到人們的青睞
- 20世紀90年代後期,形成了多種數據庫系統共同支撐應用的局面。當然,在商務應用方面,依然還是關係數據庫佔主流,不過已經有一些新的元素被添加進主流商務數據庫系統中。例如,Oracle支持的"關係對象”數據庫模型
主流的數據庫介紹
SQL Server (微軟公司產品)
- 面向Windows操作系統
- 簡單、易用、幾乎沒人用
Oracle (甲骨文公司產品)
- 面向所有主流平臺
- 安全、完善,操作複雜
DB2 (IBM公司產品)
- 面向所有主流平臺
- 大型、安全、完善
MySQL (甲骨文公司收購)
- 免費、開源、體積小
sybase(關係型數據庫,美國Sybase公司產品)
- 大型、完善
關係型數據庫
-
關係數據庫系統是基於關係模型的數據庫系統,它的基本概念來自於關係模型
-
關係模型建立在關係代數的理論基礎上,數據結構使用簡單易懂的二維數據表,可以用簡單的“實體-關係”(E-R)圖來直接表示
-
E-R圖中包含了實體(數據對象)、關係和屬性三個要素
-
所有實體及實體之間聯繫的集合構成一個關係數據庫
-
關係數據庫的存儲結構是二維表格,反映事物及其聯繫的數據是以表格形式保存的
- 在每個二維表中,每一行稱爲一條記錄,用來描述一個對象的信息;每一列稱爲一個字段,用來描述對象的一個屬性
實體
也稱爲實例,對應現實世界中可區別於其他對象的"事件”或事物”,如銀行客戶、銀行賬戶等
屬性
實體所具有的某一特性,一個實體可以有多個屬性。例如,“銀行客戶”實體集中的每個實體均具有姓名、住址、電話等屬性
聯繫
實體集之間的對應關係稱爲聯繫,也稱爲關係。例如,銀行客戶和銀行賬戶之間存在“儲蓄”的關係
關係型數據庫
- Oracle ,MySQL
- SQLServer、Sybase
- Informix、access
- DB2、FoxPRO
關係型數據庫應用舉例
- 12306用戶信息系統
- 淘寶賬號信息系統、支付寶賬號系統移動、電信、聯通手機號信息系統、計費系統銀行用戶賬號系統
- 網站用戶信息系統
非關係型數據庫介紹
1、非關係數據庫也被稱作NoSQL(Not Only SQL),存儲數據不以關係模型爲依據,不需要固定的表格式
2、非關係型數據庫作爲關係數據庫的一一個補充,在日益快速發展的網站時代,發揮着高效率與高性能
3、非關係型數據庫的優點:
- 數據庫高併發讀寫的需求
- 對海量數據高效率存儲與訪問
- 數據庫的高擴展性與高可用性的需求
-
4、鍵-值方式(key-value),以鍵爲依據存儲、刪、改數據
5、列存儲(Column-oriented),將相關的數據存儲在列族中
6、文檔的方式,數據庫由一系列數據項組成,每個數據項都有名稱與對應的值
7、圖形方式,實體爲頂點,關係爲邊,數據保存爲一個圖形
8、Memcached是一個開源的、高性能的、具有分佈式內存對象的緩存系統,以key-value方式存儲數據
- 緩存數據以減輕數據庫壓力並能加快訪問速度
- 加速動態Web應用
- 緩存的內容保存在內存中
9、redis也是一個以key-value方式存儲數據的,數據也是保存在內存中,但會定期將數據寫入磁盤中
10、相對於Memcached有以下特點:
- 支持內存緩存
- 支持持久化
- 數據類型更多
- 支持集羣、分佈式
- 支持隊列
11、redis應用舉例
- 數據庫前端緩存
- session共享
- 當需要緩存除了key/value之外的更多數據類型時
- 當緩存的數據需要長久保存時
MySQL數據庫介紹
MySQL是一款深受歡迎的開源關係型數據庫
Oracle旗下的產品
遵守了GPL協議,可以免費使用與修改
特點:
- 性能卓越、服務穩定
- 開源、無版權限制、成本低
- 多線程、多用戶
- 基於C/S (客戶端/服務器)架構.
- 安全可靠
MySQL商業版與社區版
MySQL商業版是由MySQL AB公司負責開發與維護,需要付費才能使用
MySQL社區版是由分散在世界各地的MySQL 開發者、愛好者一起開發與維護,可以免費使用
兩者區別:
- 商業版組織管理與測試環節更加嚴格,穩定性更好
- 商業版不遵守GPL
- 商業版可獲得7*24小時的服務,如故障維護與打補丁等
MySQL產品陣營
-
第一陣營:5.0-5.1陣營,可說是早期產品的延續
-
第二陣營:5.4-5.7陣營,更好地整合了MySQL AB公司、社區、第三方公司開的存儲引擎,從而提高性能
- 第三陣營:6.0-7.1陣營, 就是MySQL Cluster版本,爲適應新時代集羣對數據庫的需求而開發
MySQL下載網址:http://www.dev.mysql.com/downloads
MySQL5.7編譯安裝
1.安裝編譯mysql所需環境包
[root@localhost ~]# yum -y install \
> ncurses \
> ncurses-devel \
> bison \
> cmake \
> gcc \
> gcc-c++
........//省略安裝過程
2.添加一個mysql用戶
[root@localhost ~]# useradd -s /sbin/nologin mysql
[root@localhost ~]#
3.將mysql源碼包解壓到“/opt/”目錄下
[root@localhost ~]# mkdir /mnt/tools
[root@localhost ~]# mount.cifs //192.168.100.50/tools /mnt/tools/
Password for root@//192.168.100.50/tools:
[root@localhost ~]# cd /mnt/tools/MySQL/
[root@localhost MySQL]# ls
boost_1_59_0.tar.gz mysql-5.7.17.tar.gz
[root@localhost MySQL]# tar zxvf mysql-5.7.17.tar.gz -C /opt/
............//省略解壓過程
[root@localhost MySQL]#tar zxvf boost_1_59_0.tar.gz -C /usr/local/
............//省略解壓過程
[root@localhost MySQL]#
4.將“boost_1_59_0”目錄重命名爲“boost”
[root@localhost MySQL]# cd /usr/local/
[root@localhost local]# mv boost_1_59_0/ boost
[root@localhost local]# ls
bin boost etc games include lib lib64 libexec sbin share src
[root@localhost local]#
5.配置mysql服務
[root@localhost local]# cd /opt/mysql-5.7.17/
[root@localhost mysql-5.7.17]# cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ //安裝路徑
> -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ //定義sock文件連接數據庫文件
> -DSYSCONFDIR=/etc \ //配置文件目錄
> -DSYSTEMD_PID_DIR=/usr/local/mysql \ //PID文件目錄
> -DDEFAULT_CHARSET=utf8 \ //指定字符集,utf8支持中文字符
> -DDEFAULT_COLLATION=utf8_general_ci \ 指定字符集默認
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 存儲引擎
> -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
> -DMYSQL_DATADIR=/usr/local/mysql/data \ //數據庫數據文件目錄
> -DWITH_BOOST=/usr/local/boost \ //底層運行庫
> -DWITH_SYSTEMD=1 //主從參數
6.編譯安裝MySQL服務
[root@localhost mysql-5.7.17]#make && make install
...........//省略編譯過程
[root@localhost mysql-5.7.17]#
7.更改數據庫目錄屬主、屬組
[root@localhost mysql-5.7.17]# chown -R mysql.mysql /usr/local/mysql/
[root@localhost mysql-5.7.17]#
8.修改配置文件
[root@localhost mysql-5.7.17]# vim /etc/my.cnf
[client] //客戶端
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysql] //客戶端
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysqld] //服務器
user = mysql //用戶
basedir = /usr/local/mysql //設置mysql的安裝目錄
datadir = /usr/local/mysql/data //設置mysql數據庫的數據的存放目錄
port = 3306 //設置3306端口
character_set_server=utf8 //中文字符集
pid-file = /usr/local/mysql/mysqld.pid //pid文件路徑
socket = /usr/local/mysql/mysql.sock //sock文件路徑
server-id = 1 //主從參數
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
//支持模塊
[root@localhost mysql-5.7.17]# chown mysql:mysql /etc/my.cnf //修改文件屬主屬組
[root@localhost mysql-5.7.17]#
9.將mysql相關命令添加本地環境配置中
[root@localhost mysql-5.7.17]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
//將MySQL寫到本地環境配置中
[root@localhost mysql-5.7.17]# echo 'export PATH' >> /etc/profile //設置全局環境配置
[root@localhost mysql-5.7.17]# source /etc/profile //重新加載配置文件
[root@localhost mysql-5.7.17]#
10.初始化數據庫
[root@localhost mysql-5.7.17]# cd /usr/local/mysql/
[root@localhost mysql]# bin/mysqld \
> --initialize-insecure \ //初始化
> --user=mysql \ //用戶
> --basedir=/usr/local/mysql \ //安裝目錄
> --datadir=/usr/local/mysql/data //數據庫數據文件目錄
11.將MySQL服務配置文件複製到/usr/lib/systemd/system/下便於使用systemctl管理
[root@localhost mysql]# cp usr/lib/systemd/system/mysqld.service /lib/systemd/system/
//複製
[root@localhost mysql]# systemctl daemon-reload //重新加載
[root@localhost mysql]# systemctl start mysqld.service //啓動服務
[root@localhost mysql]# netstat -ntap | grep 3306 //查看tcp3306端口
tcp6 0 0 :::3306 :::* LISTEN 78684/mysqld
[root@localhost mysql]# systemctl enable mysqld.service //設置開機自啓
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
[root@localhost mysql]#
12.配置MySQL密碼
[root@localhost mysql]# mysqladmin -u root -p password
Enter password:
New password:
Confirm new password:
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
[root@localhost mysql]#
13.嘗試登陸MySQL數據庫
[root@localhost mysql]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.17 Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123' with grant option;
//提權讓所有終端能夠遠程登錄
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> quit //退出
Bye
[root@localhost mysql]#
[root@localhost mysql]# systemctl stop firewalld.service //關閉防火牆
[root@localhost mysql]# setenforce 0 //關閉增強性安全功能
[root@localhost mysql]#
14.用Navicat工具遠程登錄
15.進入數據庫查看所有database
[root@localhost mysql]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.17 Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases; //查看數據庫
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>