Linux學習之路--MySQL(1)數據庫介紹及安裝方法【18】---20180117


一、數據庫的發展史簡要


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體系結構

26MySQL.jpg

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數據庫包括兩個包組:
        Mariadb

        mariadb-client

  • mariadb組包括下面包:
        mariadb-server:mandatory package
        mariadb-bench:optional package
        mariadb-test:optional package

  • mariadb-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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章