数据库原理
大数据时代(人工智能)
阿尔法围棋(AlphaGo)是第一个击败人类职业围棋选手、第一个战胜围棋世界冠军的人工智能机器人,由谷歌(Google)旗下DeepMind公司戴密斯·哈萨比斯领衔的团队开发。其主要工作原理是“深度学习”。
那么,谷歌是如何训练出AlphaGo呢
1 对计算机下棋的训练,不是依靠让计算机学会逻辑推理,而是靠大数据和智能算法。2 Google采用了上万台服务器,使用了几十万盘围棋高手之间的对弈数据来训练AlphaGo,AlphaGo可谓见多识广。3 具体到下棋的关键技术,4 一是将棋盘上的状态转换为一个获胜概率的数学模型;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 分布式架构各种数据库管理系统
网状数据库
层次数据库

以树型结构表示实体及其之间联系,关系只支持一对多关系型数据库
| 英雄表 | | | | —- | —- | —- | | 英雄ID | 姓名 | 性别 | | 1 | 亚瑟 | 男 | | 2 | 甄姬 | 女 | | 3 | 兰陵王 | 男 | | 4 | 后羿 | 男 |1 关系:关系就是二维表, 2 行row:表中的每一行,又称为记录 3 列:表中的每一列,成为属性,字段 4 主键:用于唯一确定一个记录的字段,一张表只有一个主键 5 域:属性的取值范围:性别(男|女)
| 课程表 | ||
|---|---|---|
| 课程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;

