数据库原理

大数据时代(人工智能)

阿尔法围棋(AlphaGo)是第一个击败人类职业围棋选手、第一个战胜围棋世界冠军的人工智能机器人,由谷歌(Google)旗下DeepMind公司戴密斯·哈萨比斯领衔的团队开发。其主要工作原理是“深度学习”。
那么,谷歌是如何训练出AlphaGo呢

  1. 1 对计算机下棋的训练,不是依靠让计算机学会逻辑推理,而是靠大数据和智能算法。
  2. 2 Google采用了上万台服务器,使用了几十万盘围棋高手之间的对弈数据来训练AlphaGoAlphaGo可谓见多识广。
  3. 3 具体到下棋的关键技术,
  4. 4 一是将棋盘上的状态转换为一个获胜概率的数学模型;
  5. 5 二是启发式搜索算法,将搜索该空间限制在非常有限的范围内,保证计算机能快速找到好的算法。这样就将智能问题转化成为了数据问题

数据的特征

  • 大数据
  • 数据不随程序的结束而消失
  • 数据被多个应用程序共享

数据的分类

  • 结构化的数据:固定格式和有限长度 例如:个人信息
  • 非结构化数据:无固定格式和不固定长度 例如:网页,语音,视频

    数据库发展史

  • 文件系统(使用磁盘文件来存储数据)

  • 第一代数据库 (出现了网状模型,层次模型的数据库)
  • 第二代数据库 (关系型数据库和结构化查询语言)
  • 新一代数据库 (“关系-对象”型数据库)

    文件管理系统的缺点

    1 不支持并发访问
    2 无法进行安全控制
    3 难以按照用户视图表示数据
    

    数据库管理系统的优点

    1 数据可以并发使用并能同时保证一致性
    2 保证数据安全可靠
    3 可以根据用户需求自定义表示数据
    

    数据库管理系统

  • DB(DataBase)数据库是数据的汇集,以一定的组织形式存于存储介质上(按照数据结构来组织,存储和管理数据的仓库)

  • DBMS(DstaBase Management System)是管理数据库的系统软件,它实现数据库的各种功能,是数据库系统的核心
  • DBS(DataBase System)既DB+DBMS指带有数据库并整合了数据库管理软件的计算机系统
  • DBA负责数据库的规划,设计,协调,维护和管理等工作
  • 应用程序指以数据库为基础的应用程序

    数据库管理系统的基本功能

    1 数据定义
    2 数据处理
    3 数据安全
    4 数据备份
    

    数据库管理系统的架构

    1 单机架构
    2 服务端架构(C/S)
    3 分布式架构
    

    各种数据库管理系统

    网状数据库

    image.png

    层次数据库

    image.png
    以树型结构表示实体及其之间联系,关系只支持一对多

    关系型数据库

    1 关系:关系就是二维表,
    2 行row:表中的每一行,又称为记录
    3 列:表中的每一列,成为属性,字段
    4 主键:用于唯一确定一个记录的字段,一张表只有一个主键
    5 域:属性的取值范围:性别(男|女)
    
    | 英雄表 | | | | —- | —- | —- | | 英雄ID | 姓名 | 性别 | | 1 | 亚瑟 | 男 | | 2 | 甄姬 | 女 | | 3 | 兰陵王 | 男 | | 4 | 后羿 | 男 |
课程表
课程ID 名称 学分
01 RHCE 10
02 RHCA 10
03 CCIE 10
04 DBA 10

E-R及MySQL简介

关系型数据库

1 关系:关系就是二维表,
2 行row:表中的每一行,又称为记录
3 列:表中的每一列,成为属性,字段
4 主键:用于唯一确定一个记录的字段,一张表只有一个主键
5 域:属性的取值范围:性别(男|女)

实体-联系模型(E-R)

1 实体Entity:客观存在并可以相互区分的客观事物或抽象事件称为实体
2 属性:实体所具有的特征或性质
3 联系Relationship :联系是数据之间的关联集合
4 实体内部的联系:指组成实体的各属性之间的联系。如班级实体中,学员id和班长id之间有一种关联关系
5 实体之间的联系:指不同实体之间联系。例如学生选课实体和学生基本信息实体之间

常见关系型数据库

 1 MySQL
 2     主角
 3 MariaDB
 4     MySQL数据库的一个分支
 5 Percona Server
 6     MySQL数据库的一个分支
 7 PostgreSQL  
 8     加州大学伯克利分校计算机系开发,除MySQL发展较快的关系型数据库
 9 Oracle
10     全球最大的数据库软件公司,主要应用于大公司,政府,金融,证券等
11 MSSQL
12     微软公司的大型关系型数据库系统,只运行于Windows平台,适用于中型企业
13 DB2
14    IBM
15 Access
16     微软公司开发的入门级小型桌面数据库,集成在office中
17 SQLite 
18     手机迷你数据库

MySQL介绍

1 属于传统的关系型数据库产品
2 功能稳定,性能卓越
3 支持遵循GPL协议的前提下的免费使用与修改
4 
5 最早隶属于瑞典的MySQL AB公司
6 2008年1月,MySQL AB被SUN收购 
7 2009年4月,SUN被Oracle收购

崭新的开源分支MariaDB

1 为应付MySQL可能会闭源的风险而诞生 
2 由MySQL原作者Widenius主导开发
3 与MySQL保持最大程度兼容

MySQL优点(流行和应用广泛的原因)

1 性能卓越,服务稳定,很少出现异常宕机的情况
2 开放源代码且无版权制约,自主性强,使用成本低
3 历史悠久,社区及用户非常活跃,遇到问题可以寻求帮助
4 软件体积小,安装使用简单,并且易于维护,安装及维护成本极低
5 品牌口碑效应好,使得企业无需考虑即可直接使用
6 LAMP,LNMP,LNMT等流行web架构都含有MySQL
7 支持多种操作系统,提供多种API,支持多种开发语言,特别是对流量的Java Python PHP等语言都有很好的支持

MySQL数据库企业版VS社区版

1 企业版组织管理与测试环节控制更严格,稳定性更好
2 企业版不遵守GPL协议,社区版遵守GPL协议,可以免费使用
3 企业版可以购买相关的服务,
4   7*24小时技术支持
5   定时打补丁等
6   服务质量和时效性比社区版好
7 社区版维护只能靠社区提供,无法像企业版本那样获得故障及补丁解决服务
8 社区版免费

MySQL数据库四种发布版介绍

1 Alpha版
2   一般只在开发的公司内部运行,不对外公开
3 beta版
4   一般是完成功能的开发和所有的测试工作之后的产排尿,不会存在较大的功能和性能上的bug,通常会邀请或提供给用户体验与测试
5 RC版
6   属于生产环境发布之前的一个小版本或候选版,是beta版的修复和完善版本
7 GA版
8    软件产品正式发布的版本

MySQL安装

安装前准备

基本需求
    采用CentOS7系统搭建MySQL服务器
    关闭防火墙
    关闭SELinux
    软件MySQL-5.7.17-1

RPM包方式安装

从官方下载RPM软件包
    ——http://dev.mysql.com/downloads/mysql/
    ——适用于当前系统的bundle集合包
    mysql-community-client                        //客户端应用程序
    mysql-community-common                       //数据库和客户端库共享文件
    mysql-community-devel                         //客户端应用程序的库和头文件
    mysql-community-embedded                    //嵌入式函数库
    mysql-community-embedded-compat            //嵌入式兼容函数库
    mysql-community-embedded-devel              //头文件和库文件作为MySQL的嵌入式库文件
    mysql-community-libs                         //MySQL数据库客户端应用程序的共享库
    mysql-community-libs-compat                  //客户端应用程序的共享兼容库
准备工作(如果以安装过mariadb须执行该操作)
    ——停止mariadb服务
    ——删除文件 /etc/my.cnf
    ——删除数据
    ——卸载软件包
[root@localhost ~]# systemctl stop mariadb
[root@localhost ~]# rm -rf /etc/my.cnf
[root@localhost ~]# rm -rf /var/lib/mysql/*
[root@localhost ~]# rpm -e --nodeps mariadb-server
采用U升级安装,可替换冲突文件
[root@localhost ~]# tar –xf  mysql-5.7.17.tar  -C  /root/mysql
[root@localhost mysql]# yum -y install net-tools           //安装MySQL需要的依赖包
[root@localhost ~]# yum -y install perl-Data-Dumper        //安装MySQL需要的依赖包
[root@localhost ~]# yum -y install perl-JSON               //安装MySQL需要的依赖
[root@localhost ~]# rpm -Uvh mysql-community-*.rpm         //升级安装MySQL

通用二进制安装(mariadb)

1 准备用户
groupadd -r -g 3306 mysql
useradd -r -g 3306 -u 3306 -d /data/mysql mysql
2 准备数据目录,建议使用逻辑卷
#可选做,后面的脚本mysql_install_db可自动生成此目录
mkdir /data/mysql
chown mysql:mysql /data/mysql
3 准备二进制程序
tar xf mariadb-VERSION-linux-x86_64.tar.gz -C /usr/local
cd /usr/local
ln -sv mariadb-VERSION mysql
chown -R root:root /usr/local/mysql/
4 准备配置文件
cd /usr/local/mysql
cp -b support-files/my-large.cnf   /etc/my.cnf
vim /etc/my.cnf
#mysql语句块中添加以下三个选项
[mysqld]
datadir = /data/mysql
innodb_file_per_table = on #在mariadb5.5以上版的是默认值,可不加
skip_name_resolve = on    #禁止主机名解析,建议使用
5 创建数据库文件
cd /usr/local/mysql/
./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
[root@centos8 mysql]#ls /data/mysql/ -l
total 110604
-rw-rw---- 1 mysql mysql 12582912 Jun  1 16:44 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Jun  1 16:44 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Jun  1 16:44 ib_logfile1
drwx------ 2 mysql mysql     4096 Jun  1 16:44 mysql
drwx------ 2 mysql mysql     4096 Jun  1 16:44 performance_schema
drwx------ 2 mysql mysql     4096 Jun  1 16:44 test
6 准备服务脚本,并启动服务
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
service mysqld start
#如果有对应的service 文件可以执行下面
cp support-files/systemd/mariadb.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl enable --now mariadb
7 PATH路径
echo 'PATH=/user/local/mysql/bin:$PATH’ > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
8 安全初始化
/user/local/mysql/bin/mysql_secure_installation

源代码安装(mariadb)

建议:内存4G以上
1 安装相关依赖包
yum -y install bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel  gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel     
2 做准备用户和数据目录
useradd -r -s /sbin/nologin -d /data/mysql mysql
3 准备数据库目录
mkdir   /data/mysql
chown mysql.mysql /data/mysql
4 源码编译安装
编译安装说明
利用cmake编译,而利用传统方法,cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,
即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的
影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译
编译选项:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
4.1 下载并解压缩源码包
tar xvf   mariadb-10.2.18.tar.gz 
4.2 源码编译安装mariadb
cd mariadb-10.2.18/
cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/ \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make && make install 
提示:如果出错,执行rm -f CMakeCache.txt
5 准备环境变量
echo 'PATH=/app/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
.     /etc/profile.d/mysql.sh
6 生成数据库文件
cd   /app/mysql/
scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql
7 准备配置文件
cp /app/mysql/support-files/my-huge.cnf   /etc/my.cnf
8 准备启动脚本,并启动服务
cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
9 安全初始化
mysql_secure_installation

启动数据库服务器

启动MySQL数据库服务
[root@localhost ~]# systemctl start mysqld        //启动服务
[root@localhost ~]# ps -C mysqld                    //查看服务进程
[root@localhost ~]# systemctl status mysqld        //查看服务状态
[root@localhost ~]# ss -anptul | grep mysqld        //查看服务状态
[root@localhost ~]# systemctl enable mysqld        //设置服务开机自启

MySQL初始配置

MySQL服务相关参数

 1 主配置文件:/etc/my.cnf
 2 数据库目录:/var/lib/mysql
 3 服务启动日志目录:/var/log/mysqld.log(其它后面会讲)
 4 默认端口号:3306
 5 进程名:mysqld
 6 传输协议:TCP
 7 进程所有者:mysql
 8 进程所属组:mysql
 9 socket地址:
10   支持远程通信:ip:3306
11   仅支持本地通信:/var/lib/mysql/mysql.sock

MySQL初始配置

修改root口令
    默认的数据库管理账号 root 允许从 localhost 访问
    首次登录密码在安装时随机生成
    存储在错误日志文件里 /var/log/mysql.log
[root@localhost ~]# grep -i password /var/log/mysqld.log
用初始密码登录MySQL服务器
[root@localhost ~]# mysql -uroot –p'初始密码'
密码安全策略变量:validate_password_policy
临时修改
mysql> set global validate_password_policy=0;        //只验证长度(LOW策略)默认为1
mysql> set global validate_password_length=4;        //修改密码长度,默认是 8个字符
永久修改
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
validate_password_policy=0    //密码验证策略
validate_password_length=4    //密码长度   
重启mysqld服务
修改MySQL初始密码
用 alter user 重设口令
mysql> alter user root@"localhost" identified by "123456";    //修改登录密码[root@localhost ~]# mysql -uroot -p123456                //使用新密码重新登录

MySQL 连接工具

数据库存储流程

客户端把数据存储到服务器上的步骤
    连接数据库
    ——建库                    //类似于系统文件夹
    ——建表                    //类似于系统文件
    ——插入记录                //类似于文件里的行
    断开连接

MySQL组成

客户端程序

1 mysql: 交互式的CLI工具
2 mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成insert等写操作语句保存文本文件中
3 mysqladmin:基于mysql协议管理mysqld
4 mysqlimport:数据导入工具
5 MyISAM存储引擎的管理工具:
6   myisamchk:检查MyISAM库
7   myisampack:打包MyISAM表,只读

服务器端程序

1 mysqld_safe
2 mysqld
3 mysqld_multi 多实例 ,示例:mysqld_multi --example

用户账号

1 mysql用户账号由两部分组成:
2 'USERNAME'@'HOST'
3 说明:
4       HOST限制此用户可通过哪些远程主机连接mysql服务器
5 支持使用通配符:
6       % 匹配任意长度的任意字符
7       172.16.0.0/255.255.0.0 或 172.16.%.%
8       _ 匹配任意单个字符

mysql 客户端命令

1 客户端命令:本地执行,每个命令都完整形式和简写格式
2     mysql> \h, help
3     mysql> \u,use
4     mysql> \s,status
5     mysql> \!,system
6 服务端命令:通过mysql协议发往服务器执行并取回结果,命令末尾都必须使用命令结束符号,默认为分号
7     示例:
8     mysql>SELECT VERSION();

mysql使用模式

1  交互模式:
2   mysql>
3  脚本模式:
5       mysql –uUSERNAME -pPASSWORD < /path/test.sql
6       cat /path/somefile.sql | mysql –uUSERNAME -pPASSWORD 
7       mysql>source   /path/from/test.sql

mysql命令使用格式

1 mysql [OPTIONS] [database] 2 mysql客户端常用选项:3       -A, --no-auto-rehash 禁止补全
4       -u, --user= 用户名,默认为root
5       -h, --host= 服务器主机,默认为localhost6       -p, --passowrd= 用户密码,建议使用-p,默认为空密码
7       -P, --port= 服务器端口
8       -S, --socket= 指定连接socket文件路径
9       -D, --database= 指定默认数据库
10      -C, --compress 启用压缩
11      -e   “SQL“ 执行SQL命令
12      -V, --version 显示版本
13      -v --verbose 显示详细信息
14      --print-defaults 获取程序默认使用的配置
15  登录系统:
16  #默认空密码登录
17      mysql –uroot –p 
18      运行mysql命令:
19      mysql>use mysql
20      mysql>select user(); #查看当前用户
21      mysql>SELECT User,Host,Password FROM user
22 范例:配置客户端mysql的自动登录
23 vim/etc/my.cnf.d/client.conf
24 [client]
25 user=dy26 password=centos  图形化连接方式:grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;

image.png