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


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