文章目录
- 一、数据库原理
- 目前情况
- 数据库的发展史
- RDBMS关系型数据库
- 关系型数据库理论
- 二、MySQL历史
- 发展历程
- 关系型数据库和非关系型数据库
- 三、安装mysql及优化
- yum安装
- 编译安装mysql
- 二进制安装
- 优化操作
- 四、 安装mycli插件客户端工具
一、数据库原理
目前情况
我们正处于一个数据爆炸的时代,生活中涉及的数据量巨大。
- 涉及的数据量大
- 数据不随程序的结束而消失
- 数据被多个应用程序共享
- 大数据
数据的分类:
- 结构化的数据:即有固定格式和有限长度的数据。例如填的表格就是结构化的数据,国籍:中华人 民共和国,民族:汉,性别:男,这都叫结构化数据。
- 非结构化的数据:非结构化的数据越来越多,就是不定长、无固定格式的数据,例如网页,有时候非常长,有时候几句话就没了;例如语音,视频都是非结构化的数据。
- 半结构化数据:比如:XML或者HTML的格式的数据。
数据库的发展史
文件管理系统的缺点
- 编写应用程序不方便
- 数据冗余不可避免
- 应用程序依赖性
- 不支持对文件的并发访问
- 数据间联系弱
- 难以按用户视图表示数据
- 无安全控制功能
数据库系统发展阶段
- 萌芽阶段:文件系统(使用磁盘文件来存储数据)。
- 初级阶段:第一代数据库(出现了网状模型、层次模型的数据库)。
- 中级阶段:第二代数据库(关系型数据库和结构化查询语言)
- 高级阶段:新一代数据库(“关系-对象”型数据库 )
DBMS数据库管理系统
- Database:数据库是数据的汇集,它以一定的组织形式存于存储介质上。
- DBMS:是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心。
- DBA:负责数据库的规划、设计、协调、维护和管理等工作。
- 应用程序:指以数据库为基础的应用程序。
数据库管理系统的优点
- 相互关联的数据的集合
- 较少的数据冗余
- 程序与数据相互独立
- 保证数据的安全、可靠
- 最大限度地保证数据的正确性
- 数据可以并发使用并能同时保证一致性
数据库管理系统的基本功能
- 数据定义
- 数据处理
- 数据安全
- 数据备份
数据库系统的架构
- 单机架构
- 大型主机/终端架构
- 主从式架构(C/S)
- 分布式架构
RDBMS关系型数据库
Relational Database Management System,关系模型最初由IBM公司的英国计算机科学家埃德加·科德(Edgar F. Codd)于1969年描述,1974年,IBM开始开发系统R,这是一个开发RDBMS原型的研究项目。然而,第一个商业上可用的RDBMS是甲骨文,于1979年由关系软件(现为甲骨文公司)发布。
关系统型数据库相关概念
- 关系Relational :关系就是二维表,其中:表中的行、列次序并不重要。
- 行row:表中的每一行,又称为一条记录record。
- 列column:表中的每一列,称为属性,字段,域field
- 主键Primary key:PK ,用于唯一确定一个记录的字段,一张表只有一个主键。
- 域domain:属性的取值范围,如,性别只能是’男’和’女’两个值,人类的年龄只能0-150。
关系型数据库理论
实体联系模型E-R
实体(Entity):客观存在并可以相互区分的客观事物或抽象事件称为实体,在E-R图中用矩形框表示实体,把实体名写在框内。
属性(Attribute): 实体的特征或性质,如学生的姓名、学号等。
关系(Relationship): 实体之间的联系,如学生选修课程。
- 实体内部的联系:指组成实体的各属性之间的联系。如职工实体中,职工号和部门经理号之间有一种关联关系。
- 实体之间的联系:指不同实体之间联系。例:学生选课实体和学生基本信息实体之间。
- 实体之间的联系用菱形框表示。
联系类型 - 一对一联系(1:1)
- 一对多联系(1:n):外键
- 多对多联系(m:n):增加第三张表
数据的操作
- 数据提取:在数据集合中提取感兴趣的内容。SELECT。
- 数据更新:变更数据库中的数据。INSERT、DELETE、UPDATE。
二、MySQL历史
发展历程
MySQL的历史可以追溯到1979年,它的创始人叫作Michael Widenius,他在开发一个报表工具的时候,设计了一套API,后来他的客户要求他的API支持sql语句,他直接借助于mSQL(当时比较牛)的代码,将它集成到自己的存储引擎中。但是他总是感觉不满意,萌生了要自己做一套数据库的想法。
直到1996年,MySQL 1.0发布,Michael Widenius的大女儿的简称就是MY,Michael Widenius大概也是把MySQL当成自己的女儿一样来对待。仅仅过了几个月的时间,1996年10月MySQL 3.11.1当时发布了Solaris的版本,一个月后,linux的版本诞生,从那时候开始,MySQL慢慢的被人所接受。
1999年,Michael Widenius成立了MySQL AB公司,MySQL由个人开发转变为团队开发,2000年使用GPL协议开源。
2001年,MySQL生命中的大事发生了,那就是存储引擎InnoDB的诞生!Oracle在2005年收购了InnoDB,只不过InnoDB一直以来都只能作为第三方插件供用户选择。直到现在,MySQL可以选择的众多存储引擎中,InnoDB依然是第一选择。
2008年1月,MySQL AB公司被Sun公司以10亿美金收购,MySQL数据库进入Sun时代。Sun为MySQL的发展提供了绝佳的环境,2008年11月,MySQL 5.1发布,MySQL成为了最受欢迎的小型数据库。
2009年4月,Oracle公司以74亿美元收购Sun公司,MySQL也随之进入Oracle时代。
2010年12月,MySQL 5.5发布,Oracle终于把InnoDB做成了MySQL默认的存储引擎,MySQL从此进入了辉煌时代。
然而,从那之后,Oracle对MySQL的态度渐渐发生了变化,Oracle虽然宣称MySQL依然遵守GPL协议,但却暗地里把开发人员全部换成了Oracle自己人,开源社区再也影响不了MySQL发展的脚步,真正有心做贡献的人也被拒之门外,MySQL随时都有闭源的可能。看着自己辛苦养大的MySQL被Oracle搞成这样,Michael Widenius非常失望,决定在MySQL走向闭源前,将MySQL进行分支化,依然是使用了自己小女儿的名字MariaDB(玛莉亚DB)。MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。MariaDB由MySQL的创始人Michael Widenius主导,由开源社区的大神们进行开发。因此,大家都认为,MariaDB拥有比MySQL更纯正的MySQL血脉。最初的版本更新与MySQL同步,相对MySQL5以后的版本,MariaDB也有相应的5.1~5.5的版本。后来MariaDB终于摆脱了MySQL,它的版本号直接从10.0开始,以自己的步伐进行开发,当然,还是可以对MySQL完全兼容。
1979年:TcX公司 Monty Widenius,Unireg
1996年:发布MySQL1.0,Solaris版本,Linux版本
1999年:MySQL AB公司,瑞典
2003年:MySQL 5.0版本,提供视图、存储过程等功能
2008年:Sun公司 以10亿美元收购MySQL
2009年:Oracle公司以 74 亿美元收购 sun 公司
2009年:Monty成立MariaDB
版本演变
MySQL:5.1 --> 5.5 --> 5.6 --> 5.7 ----->6.0 - —>7.0 --> 8.0
MariaDB:5.1 -->5.5 -->10.0–> 10.1 --> 10.2 --> 10.3 --> 10.4 --> 10.5
注意:MySQL被Sun收购后,搞了个过渡的6.0版本,没多久就下线了,后来被Oracle收购后,终于迎来了像样的5.6版本,之后就是5.7、8.0版本。由于6.0版本号已被用过,7.x系列版本专用于NDB Cluster,因而新版本号从8.0开始。
关系型数据库和非关系型数据库
关系型数据库和非关系型数据库的区别
关系数据库:
关系数据库结构是二维数据库表,二维表当中每个字段(列)用来描述对象的一个属性,每个记录(行)用来描述一个对象的信息(完整信息),关系数据库写到哪里也就是存储在硬盘当中读写系统就会受到的IO限制或者瓶颈 。
优点:
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
非关系型数据库
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、
图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
1、不提供sql支持,学习和使用成本较高;
2、无事务处理;
3、数据结构相对复杂,复杂查询方面稍欠。
三、安装mysql及优化
yum安装
登录mysql官网
https://dev.mysql.com/downloads/
选择合适的版本
下载之后,在linux中安装之后,就会多出一个yum源,直接用yum安装即可。
yum install mysql-server -y
在centos7并没有mysql的yum源需要额外安装,步骤如上所示。如果觉得很麻烦,也可以直接安装mariadb(mysql的平替)
yum install mariadb-server -y
systemctl start mariadb.service
mysql
mysql_secure_installation
#初始化设置 先输入密码 一路回车
yum安装5.7版本
需要额外安装yum源
cat >/etc/yum.repos.d/mysql.repo <<EOF
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/
enabled=1
gpgcheck=0
EOF
测试数据库是否起来,并破解密码
systemctl start mysqld
ss -ntap |grep 3306
grep password /var/log/mysqld.log
修改简单密码,mysql有复杂性密码检查。
需要下面命令修改密码策略
set global validate_password_policy=0;
set global validate_password_length=1;
alter user root@'localhost' identified by '123123';修改密码为123123
编译安装mysql
yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel
安装依赖环境
useradd -M -s /sbin/nologin mysql
添加程序用户
准备安装包
tar xf mysql-boost-5.7.20.tar.gz解压
cd mysql-5.7.20/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=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=boost \
-DWITH_SYSTEMD=1
#############模块解释#####################
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
#指定mysql的安装路径
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
#指定mysql进程监听套接字文件(数据库连接文件)的存储路径
-DSYSCONFDIR=/etc \
#指定配置文件的存储路径
-DSYSTEMD_PID_DIR=/usr/local/mysql \
#指定进程文件的存储路径
-DDEFAULT_CHARSET=utf8 \
#指定默认使用的字符集编码,如utf8
-DDEFAULT_COLLATION=utf8_general_ci \
#指定默认使用的字符集校对规则
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
#安装INNOBASE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
#安装ARCHIVE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
#安装BLACKHOLE存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
#安装FEDERATED存储引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \
#指定数据库文件的存储路径
-DWITH_BOOST=boost \
#指定boost的路径,
-DWITH_SYSTEMD=1
#生成便于systemctl管理的文件
#############模块解释#####################
进行调优
chown -R mysql:mysql /usr/local/mysql/
调整配置文件
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
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.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
chown mysql:mysql /etc/my.cnf
设置环境变量
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile
/usr/local/mysql/bin:/usr/local/mysql/lib 是要添加到 PATH 环境变量中的目录路径。这样做的目的是让系统在搜索可执行文件时,能够找到 MySQL 的可执行文件和库文件。
$PATH 表示保留原有的 PATH 环境变量设置。这样做可以确保 PATH 环境变量不会被完全覆盖,而是在原有设置的基础上添加新的目录。
初始化数据库
cd /usr/local/mysql/
bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
设置自启动文件
cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
设置密码
mysqladmin -u root -p password
#开始初始密码为空 回车即可 然后输入新密码
二进制安装
https://downloads.mysql.com/archives/community/
下载地址
1.准备用户
groupadd -r -g 306 mysql
useradd -r -g 306 -u 306 -d /data/mysql mysql
2.准备数据目录,建议使用逻辑卷
mkdir /data/mysql -p
chown mysql:mysql /data/mysql
3.准备二进制程序
tar xf mysql-VERSION-linux-x86_64.tar.gz -C /usr/local
cd /usr/local
ln -s mysql-5.7.44-linux-glibc2.12-x86_64/ mysql
做软链接
4.准备配置文件
cp /etc/my.cnf{,.bak}
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysgl.pid
[client]
socket=/data/mysql/mysql.sock
5.PATH路径
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
6.创建数据库文件
mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
初始化完成后,/data/mysql就会出现数据库文件。
7.准备服务脚本,并启动服务。
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
systemctl daemon-reload
service mysqld start
8.安全初始化
/usr/local/mysql/bin/mysql_secure_installation
优化操作
生成提示符
vim /etc/my.cnf
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
修改后不是mysql了,是以谁的身份登录的。包含用户名和主机名。
自动补全
[mysql]
prompt=(mysql) [\\d]>\\_
auto-rehash
#自动补全 只能补全敲过的命令
四、 安装mycli插件客户端工具
安装依赖环境
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
解压编译安装
tar zxvf Python-3.7.7_.tgz
cd Python-3.7.7/
./configure --prefix=/usr/local/Python-3.7.7/
make -j4
make install
ln -s /usr/local/Python-3.7.7/bin/python3.7 /usr/bin/python37
ln -s /usr/local/Python-3.7.7/bin/pip3.7 /usr/bin/pip37
pip37 install --upgrade pip -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
pip37 install mycli -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
ln -s /usr/local/Python-3.7.7/bin/mycli /usr/bin/mycli