设为首页 收藏本站
查看: 1248|回复: 0

[经验分享] MySQL系列:MySQL关系型数据库架构

[复制链接]

尚未签到

发表于 2018-9-29 10:44:32 | 显示全部楼层 |阅读模式
  一、RDBMS关系型数据库管理系统概述
  1.RDBMS概念
  RDBMS:关系型数据库管理系统,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。一般为C/S架构,通过专有协议交互。
  关系模型是表(行,列)组成的而为结构,称为二维关系
  关系模型的分类:关系模型、实体-关系模型、基于对象的关系模型、半结构化关系模型
  2.范式
  范式是指设计时的规范,各种范式呈递次规范,越高的范式数据库冗余越小。
  目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)
  关系性数据库最低需要满足第一范式(1NF),一般说来,数据库只需满足第三范式(3NF)就行了。
  第一范式(1NF)
  所有的域都是原子性的,无重复的域
  第二范式(2NF)
  要求数据库表中的每个实例或记录必须可以被唯一地区分
  第三范式(3NF)
  任何非主属性不得传递依赖于主属性。
  3.SQL(Structure QueryLanguage)结构化查询语言
  SQL接口:Structured Query Language。类似于OS的shell接口;也提供编程功能;
  ANSI: SQL标准,SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, …
  数据定义语言(Data Definition Language,DDL)、数据操作语言(DataManipulation Language,DML)、数据控制语言(Data Control Language,DCL)
  4.数据库组成相关概念
  (1)相关术语
  表:为了满足范式设计要求,将一个数据集分拆为多个;
  视图:虚表的概念
  约束:constraint,向数据表插入的数据要遵守的限制规则;
  主键:一个或多个字段的组合,填入主键中的数据,必须不同于已存在的数据;不能为空;
  外键:一个表中某字段中能插入的数据,取决于另外一张表的主键中的数据;
  惟一键:一个或多个字段的组合,填入惟一键中的数据,必须不同于已存在的数据;可以为空;
  检查性约束:取决于表达式的要求;
  索引:将表中的某一个或某些字段抽取出来,单独将其组织一个独特的数据结构中;有助于读请求,但不利于写请求;
  事务(Transaction):组织多个操作为一个整体,要么全部都执行,要么全部都不执行;
  (2)数据库三层模型
  物理层:表现在物理设备上表空间
  逻辑层:数据库内建的组件
  视图层:用户实际能够看见的相关信息
  (3)关系运算
  选择:挑选出符合条件的行;
  投影:挑选出符合需要的列;
  连接:将多张表关联起来;
  5.RDBMS解决方案:
  商业解决方案:Oracle, Sybase, Infomix, DB2
  开源解决方案:MySQL, MariaDB, PostgreSQL, SQLite
  补充:
  Mysql
  开源、关系型、ISAM存储引擎核心算法前身
  Oracle
  关系型数据库管理系统,技术领先、大型企业
  DB2
  支持多媒体、WEB关系型数据库
  SQL server
  微软产品
  PostgreSQL
  唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性自由软件
  二、MySQL基础
  1.MySQL架构
  mysql是单进程多线程模型:每个用户连接都会创建对应的连接线程,支持长链接和短链接线程。其架构组件如下:
  Connection  Pool
  连接池(认证、线程重用、线程池连接上限、检查内存、线程缓存...)
  SQL  Interface
  SQL解释器(DML、DDL、支持过程式编程、代码块实现、视图、词法分析语法分析… ...)
  Parser
  分析器(查询翻译、用户请求对象访问权限检测)
  Optimzer
  负责评估多条访问路径评估开销,完成对查询请求的优化,生成统计数据
  Pluggable  Storage Engines
  插件式存储引擎:MyISAM、InnoDB、NDB… ...支持自编译存储引擎
  引擎完后对磁盘路径的转换映射,加载至内存中给进程调用
  Cacehs&Buffers
  缓存缓冲组件
  管理服务工具
  备份恢复、安全、复制工具、集群服务、管理配置、数据迁移… ...
  MySQL数据文件类型:
  数据文件Data、索引文件Index
  重做日志Redo、撤消日志Undo、二进制日志Binary、错误日志Error、查询日志Query、慢查询日志Slow Query、(中继日志)
DSC0000.png

  2.监听套接字地址
  方式一:监听在IPv4地址的3306/tcp端口
  方式二:Unix Sock(客户端和服务端在同一台主机C  S: localhost, 127.0.0.1)
  其套接字文件位置:/var/lib/mysql/mysql.sock(RPM包安装), /tmp/mysql.sock(通用二进制、源码编译安装)
  3.程序的组成
  (1)客户端程序:
  mysql:CLI交互式客户端程序;
  mysqldump:mysql数据备份工具;基于Mysql协议发起查询请求并将查询结果转换成insert等写操作语句保存在文件中
  mysqladmin:管理工具;基于Mysql协议可远程连接管理
  mysqlbinlog:查看二进制日志工具
  mysqlimport:数据导入工具
  … ...
  (2)Server服务端
  mysqld
  mysqld_safe:建议运行服务端程序;线程安全的mysql
  mysqld_multi:多实例;
  myisamchk:检查修复isam表
  myisampack: 打包存放myisam表,打包后只能实现查询操作、只读
  … ...
  4.配置文件格式
  mysql的配置文件是集中式的配置,能够为mysql的各应用程序提供配置信息
  [mysqld]专用于mydqld应用程序的配置信息
  [mysqld_safe]线程安全mysql相关的配置信息
  [mysqld_multi]多实例模型的mysql配置共享参数
  [server]服务端
  [mysql]专用于客户端
  [mysqldump]专用于数据备份导入导出配置段
  [client]对客户端都有效的配置
  注意:
  1) [mysqld]、mysqld_safe]、[mysqld_multi]只会启动一个
  2) 配置文件parameter = value,其中parameter有两种风格(skip-name-resolve、skip_name_resolve),建议在配置时同一风格
  3) 查找配置文件路径如下,会一次遍历查询路径:
  /etc/my.cnf--> /etc/mysql/my.cnf --> $MYSQL_HOME/my.cnf -->--default-extra-file=/path/to/somedir/my.cnf --> ~/.my.cnf
  5.安装后的设定:
  (1) 为所有root用户设定密码(三种方法)
  mysql> SET PASSWORD即使生效
  mysql>update mysql.user SET password=PASSWORD('your_pass') WHERE cluase;
  更新mysql库user表,该方案需要需要手动刷新授权表
  #mysqlamin
  (2) 删除所有匿名用户
  mysql>DROP USER ''@'localhost';
  上述两步骤可运行命令:mysql_secure_installation
  (3)建议关闭主机名反解功能;
  三、命令行工具:mysql
  1.mysql的使用模式:
  交互式模式(可运行命令有两类)
  客户端命令:\h,help
  服务器端命令:SQL,需要语句结束符;
  脚本模式:
  #mysql -uUSERNAME -hHOST -pPASSWORD < /path/from/somefile.sql
  mysql>source /path/from/somefile.sql
  2.mysql使用方法
  mysql [OPTIONS][database]
  -u,  --user=
  用户名,默认为root;
  -h,  --host=
  远程主机(即mysql服务器)地址,默认为localhost;
  -p,  --passowrd=
  USERNAME所表示的用户的密码;  默认为空;
  -P,  --port=
  指明连入服务器的端口
  -S,  --socket=
  套接字文件位置,客户端服务端在同一主机上时候,-h在localhost、127.0.0.1
  -D,  --database=
  连接到服务器端之后,设定其处指明的数据库为默认数据库;
  -C,  --compress
  输入输出时候是否压缩
  -e 'SQL COMMAND;'
  不用进入交互模式,数据库执行SQL语句,可在脚本中定义
  注意:
  1) mysql的用户账号由两部分组成:'USERNAME'@'HOST';其中HOST用于限制此用户可通过哪些远程主机连接mysql
  2) HOST支持使用通配符:
  %:匹配任意长度的任意字符;172.16.%.%, 172.16.0.0/16
  _:匹配任意单个字符;
  3.客户端命令:本地执行
  直接在mysql客户端命令行模式下输入命令:
  help
  显示帮助信息
  \u db_name
  设定哪个库为默认数据库
  \q
  退出;
  \d CHAR
  设定新的语句结束符;
  \g
  语句结束标记;
  \G
  语句结束标记,结果竖排方式显式;
  \s:
  显示客户端版本类型
  实例:mysql> \s
DSC0001.png

  4.服务端(mysqld)命令
  通过mysql连接发往服务器执行并取回结果;可以支持DDL, DML, DCL
  注意:每个语句必须有语句结束符,默认为分号(;)
  5.常用的一些命令
  (1)获取程序默认使用的配置:
  ~] # mysql --print-defaults
  ~] # mysqld --print-defaults
  (2)获取可用参数列表:mysqld--help --verbose
  (3)获取运行中的mysql进程使用各服务器参数及其值:
  mysql> SHOW GLOBAL VARIABLES;   全局配置,管理权限的用户
  mysql> SHOW [SESSION] VARIABLES;  会话配置
  注意:其中有些参数支持运行时修改,会立即生效;有些参数不支持,且只能通过修改配置文件,并重启服务器程序生效;有些参数作用域是全局的,且不可改变;有些可以为每个用户提供单独的设置;
  (4)修改服务器变量的值:mysql>help SET
  全局:
  mysql>SET GLOBAL system_var_name=value;
  mysql>SET @@global.system_var_name=value;
  会话:
  mysql>SET [SESSION] system_var_name=value;
  mysql>SET @@[session.]system_var_name=value;
  (5)状态变量:用于保存mysqld运行中的统计数据的变量;
  mysql> SHOW GLOBAL STATUS;
  mysql>SHOW [SESSION] STATUS;
  (6)查看支持字符集:mysql> SHOW CHARACTER SET;
  (7)查看支持的引擎:mysql> SHOW ENGINES ;
  (8)查看命令字符集和排序规则
  mysql>SHOW CHARACTER SET;
  mysql>SHOW COLLATION;
  (9)SQLMODE:定义mysqld对约束等的响应行为
  修改方式:修改的是默认配置,仅对修改后新创建的会话有效;对已经建立的会话无效;
  mysql>SET GLOBAL sql_mode='MODE';
  mysql>SET @@global.sql_mode='MODE';
  只对当前会话生效
  mysql>SET SESSION sql_mode='MODE';
  mysql>SET @@session.sql_mode='MODE';
  常用MODE(部分):TRADITIONAL、 STRICT_TRANS_TABLES、STRICT_ALL_TABLES  对于约束的响应级别不同
  四、数据类型
  1.数据类型概念
  在创建表定义表中字段你是时候会确定其数据类型,用于确定数据存储格式、能参与运算种类、可表示的有效的数据范围
  2.数据类型种类
  (1)字符型:
  CHAR, BINARY:定长数据类型;分配固定长度的内存空间
  VARCHAR, VARBINARY:变长数据类型;需要结束符;这两个区分在于是否区分字符大小写
  TEXT文本对象类别:TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT
  BLOB对象存储: TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB
  ENUM, SET:内置类型
  (2)数值型:
  精确数值型
  整型数据:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
  十进制型:DECIMAL
  近似数值型:FLOAT、DOBULE
  (3)日期时间型:
  日期型:DATE
  时间型:TIME
  日期时间型:DATETIME
  时间戳:TIMESTAMP  于格林威治时间对比的秒数,相对时间计时法
  年份:YEAR(2),YEAR(4)
  3.数据类型修饰符
  (1)字符类型修饰符
  NOTNULL: 非空约束;
  NULL:
  DEFAULT'STRING': 指明默认值;
  CHARACTER SET '':指明使用的字符集;
  COLLATION:使用的排序规则
  (2)整型数据修饰型:
  NOT NULL不允许为空
  NULL空
  DEFAULT NUMBER默认长度
  (3)AUTO_INCREMENT:
  UNSIGNED无符号;字段数据类型的修饰符,紧跟在数据类型之后,不能跟在其他修饰符之后,
  PRIMARYKEY|UNIQUE KEY
  NOTNULL
  (4)日期时间型修饰符:
  NOT NULL、NULL、DEFAULT
  (5)内建类型SET和ENUM的修饰符:
  NOT NULL、NULL、DEFAULT


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-603680-1-1.html 上篇帖子: 如何在mysql官网下载mysql源码包编译 下篇帖子: mysql之mysql数据在磁盘的储存方式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表