MySQL数据库基础理论
一、前言:
数据库,既为了数据的持久化存储,核心和重要数据的管理而出现的产物。
二、数据库基本概念:
数据库的基本模型:数据–>数据表–>数据库。
①数据(Data):
描述事物的符号记录;
包括数字、文字、图形、图像、声音等;
以“记录”形式按统一的格式进行存储。(存储在MySQL表中)
②表:(行列)
将不同的记录组织在一起;
用来存储具体数据。
③数据库:
表的集合,存储数据的仓库;
以一定的组织方式存储的相互有关的数据集合。
PS:
-----数据库管理系统(DBMS)-----
是实现对数据库资源有效组织、管理和存取的系统软件
-----数据库系统-----
是一个人机系统,由硬件、OS(系统)、数据库、DBMS、应用软件和数据库用户组成;
用户通过DBMS或应用程序操作数据库。(增删改查----数据库操作核心)
小结:
数据库可以完成数据持久化保存+快速提取
数据如何保存:最外层是mysql服务——>mysql数据库——>数据表——>记录为行,字段为列——>数据保存在一行行记录中
那么想要实现以上功能,需要编写一系列的规则–>SQL语句;而SQL语句按功能分类:增删改查;下文会具体介绍如何实现此功能。
三、数据库发展史:
1、第一代数据库:
20世纪60年代,层次模型和网状模型的数据库系统。(类似于域名结构)
2、第二代数据库:
20世纪70年代,关系数据库(sql)。
20世纪80年代,IBM公司关系数据库-DB2问世。
至今也占有主要地位。
关系模型可用简单的E-R(实体-关系)图来表示,图中包含了实体(数据对象)、关系和属性三个要素
实体:举例子:张三就是实体
属性:描述一个实体的详细信息
关系:实体机之间的对应关系称为联系,也称为关系
3、第三代数据库:
20世纪80年代,面向对象(nosql)的数据库系统,实用性强,适用面广;
20世纪90年代,形成多种数据库系统共同支撑应用的局面。
例如:关系-对象数据库模型。
sql:MySQL
nosql:redis
4、主流数据库介绍:(小结)
SQL Server—微软:面向Windows,简单易用
Oracle—甲骨文。面向所有主流平台,安全完善复杂
DB2—IBM,主流平台,大型安全完善
MySQL—甲骨文收购,免费开源体积小
拓展:时序型数据库:心电图,持续性,根据时间点进行变化的一组连续性的数据。
四、数据库的类型:
1、关系型数据库:SQL
存储方式:二维数据表:数据存储在记录为行,以字段为列的数据表中
每一行称为一条记录,用来描述一个对象的信息
每一列称为一个字段,用来描述对象的一个属性
主键 primary key 的特性:唯一性和非空。
存储内容:数字、文字、图形、图像、声音、档案记录等
关系数据库系统是基于关系模型的数据库系统;
关系模型的数据结构使用简单易懂的二维数据表;
关系模型可用简单的“实体-关系”(E-R)图来表示;
E-R图中,包含了实体(数据对象)、关系和属性三个要素:
1、实体:即实例,如银行客户、银行账户等。
2、属性:实体具有的特性,如银行客户具有姓名、住址、电话等属性。
3、联系:实体集直接的对应关系,如银行客户与银行账户存在储蓄关系。
注:所有实体及实体直接联系的集合构成了一个关系数据库。
应用举例:12306用户信息系统,淘宝账号系统,银行用户,网站用户信息系统等。
关系型数据库类型:MySQL,Oracle,mariadb
2、非关系型数据库:NoSQL
概念:存储海量数据,给与”大数据“进行分析,筛选出有价值的部分
存储方式:不以关系模型为依据,不需要固定的表格式
存储内容:存储图片、视频、音频等一些非关系型
优点:
1、高并发读写;
2、对海量数据高效率存储与访问;比如高德;
3、具有高扩展性与高可用性;分布式特性。
常用非关系型数据库(NoSQL) :MongoDB 、Redis (内存数据库/缓存数据库) K-V键值对、与之类似的Memcache, K-v键值对;
redi s-memecache对比:
①相同点:存储高热数据(在内存中高速运行);
②不同点: redis可以做持久化保存,可以存储对象;
Tomcat---->Redis(内存缓存)----->MySQL(磁盘)----从内存缓存读取比磁盘快。
对于tomcat来说,速度更快;对于MySQL,处理数据压力更小。
tomcat跟数据库进行快速交互时,为了提高效率,可以在中间加载redis,一方面提高加载速率,另一方面降低mysql的压力。
引申: redis 持久化方式:
以键值存储数据,数据保存在内存中,但会定期将数据写入磁盘(持久化方式)
如何知道MySQL中哪些数据需要保存在nosql中???
—>高热:淘宝(促销活动–男女装,放入nosql)
3、时序型数据库:TSD
从定义上来说,就是一串按时间维度索引的数据。用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的主体在一个时间范围内的每个时间点上的测量值。它普遍存在于IT基础设施、运维监控系统和物联网中;
简单的说就是类似心电图;持续性的,根据时间点进行变化的一组连续性的数据。
五、关系型数据库和非关系型数据库的区别:(小结)
1、存储对象不同;(SQL字符字符串数值等,NoSQL图片视频语音等)
2、数据存储方式不同;(关系型–表格式、磁盘存储;非关系–存储集中、内存缓存存储)
3、扩展方式不同;(SQL纵向扩展,提高处理能力;NoSQL添加数据库服务器节点)
4、对事务性的支持不同。(SQL事务性更好,利于回滚)
NoSQL最大的亮点在于操作的扩展性和大数据量处理方面。
六、MySQL数据库介绍:
一款深受欢迎的开源关系型数据库;
Oracle甲骨文旗下的产品;
遵守GPL(开源)协议,可以免费使用和修改;
特点:
1、性能卓越、服务稳定。
2、开源、无版权限制、成本低。
3、多线程、多用户。
4、基于C/S(客户端/服务器)架构。
5、安全可靠。
版本:商业版、社区版。
商业版:收费,功能强,稳定,7*24小时服务。
社区版:开源,免费,自维护。
七、MySQL安装;
1、安装依赖环境:
yum -y install ncurses ncurses-devel bison cmake //字符终端工具包 函数库
2、创建运行用户:
useradd -s /sbin/nologin mysql
3、解压、编译安装:
注:5.6和5.7区别:boost
cd /opt
tar zxvf 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
------------------------------------------
注:指定安装路径(1)、指定通信文件(2)、配置文件目录指向/etc(3)、指定PID目录文件(4)、字符集设定(56)、存储引擎(78910)、
指定数据存放位置(11)、底层C++运营库、独立的表空间结构(12)、守护进程ID(13)
*守护进程:跑在后台的支持服务正常运行的一个特殊进程。
CMAKE报错解决之后,要删除CMakeCache.txt文件,再重新CMAKE
make && make install
------------------------------------------
注:make:*** No targets specofoed and no makefile found.Stop.解决办法:
1、weget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz
2、tar zxvf ncurses-5.6.tar.gz
3、./configure -prefix=/usr/local -with-shared-without-debug
4、make
5、make install
4、数据库目录权限调整:
chown -R mysql:mysql /usr/local/mysql/
5、调整配置文件
vim /etc/my.cnf(删除原所有内容)
[client]用户程序 [musql]软件内容 [mysqld]以后的配置,更多会针对于mysqld进行配置
注:跳过数据库权限验证的命令为:skip-qrant-tables
--------------------------------------------------------------------------------
[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
注:赋予到mysql主组,以防没有执行权限
6、设置环境变量:
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile
7、初始化数据库:
cd /usr/local/mysql/
bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
8、复制启动文件到目录下:
cp usr/lib/systemd/system/mysqld.service /lib/systemd/system
9、数据库开启自启、关闭、状态:
systemctl enable mysqld
systemctl start mysqld
systemctl stop mysqld
systemctl status mysqld
netstat -antp | grep 3306
9、设置MySQL密码:
mysqladmin -u root -p password
---->先回车,然后输入密码
10、登录数据库
mysql -u root -p 密码
八、MySQL日志:
数据库日志文件用于备份、恢复、故障定位、分析,是最核心的部分。
MySQL与Oracle日志有所区别;
MySQL–写一条数据,同步到日志中一条。(insert)
Oracle–重做日志组。
->一个组中最少有3个日志成员,轮流存储日志,还会有另一个组与之同步/备份
PS:第一条数据->A;第二条数据->B;第三条数据->C,轮流存储。
并备份在另一个组。
扩展:
1、阿里云OSS对象存储,一式三份备份(使用重做日志组思想)
对象存储:存储的大都是一些静态文件,图片、音频、视频。
不能直接再对象存储中修改数据。(例如百度网盘)
飞天平台,盘古系统:钟馗—安全;女娲—选举调度;盘古—一式三份。
2、MySQL存储引擎:
myisam和innodb。
myisam:快速读取,不支持事物;
innodb:更注重写,支持事务。