MySQL之1---介绍与安装
MySQL之1---介绍与安装
一、数据库介绍
名词介绍
-
数据库:是数据的汇集,它以一定的组织形式存于存储介质上。是对企业核心数据 高效 安全 存储和管理的软件
-
DBA(管理 维护 使用 数据库的管理人员):负责数据库的规划、设计、协调、维护和管理等工作
-
应用程序:指以数据库为基础的应用程序
-
数据库(DBMS)是管理数据库的系统软件,它实现数据库系统的各种功能,是数据库系统的核心。
数据库(DBMS)产品种类
RDBMS : 关系型数据库 管理系统 : Oracle MySQL PG MSSQL
NoSQL : 非关系型数据库 : Mongodb Redis Elasticsearch
NewSQL : 新型的分布式数据库 解决方案 : PinCAP TiDB PolarDB TDSQL OB,Spanner ,AliSQL(RDS+DRDS)
RDBMS ---> NOSQL+RDBMS ---> NoSQL(RDBMS),RDBMS(NoSQL)----> NewSQL (spanner TiDB PDB)
SQL
1、SQL: Structure Query Language
- 结构化查询语言
- 关系型数据库通用的命令
- 遵循SQL92的标准(SQL_MODE)
- SQL解释器
2、数据存储协议:应用层协议,C/S
- S:server, 监听于套接字,接收并处理客户端的应用请求
- C:Client
3、客户端程序接口
- CLI
- GUI
4、应用编程接口
- ODBC:Open Database Connectivity
- JDBC:Java Data Base Connectivity
5、约束
- 约束:constraint,表中的数据要遵守的限制
- 主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,即NOT NULL,一个表只能有一个
- 唯一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为NULL,一个表可以存在多个
- 外键:一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有的数据
- 检查:字段值在一定范围内
6、基本概念
-
索引:将表中的一个或多个字段中的数据复制一份另存,并且按特定次序排序存储
-
关系运算:
选择:挑选出符合条件的行
投影:挑选出需要的字段
连接:表间字段的关联
7、数据模型
-
数据抽象:
物理层:数据存储格式,即RDBMS在磁盘上如何组织文件
逻辑层:DBA角度,描述存储什么数据,以及数据间存在什么样的关系
视图层:用户角度,描述DB中的部分数据 -
关系模型的分类:
- 关系模型
- 基于对象的关系模型
- 半结构化的关系模型:XML数据
8、MySQL资料
官方网址:
https://www.mysql.com/
http://mariadb.org/
https://www.percona.com
官方文档:
https://dev.mysql.com/doc/
https://mariadb.com/kb/en/
https://www.percona.com/software/mysql-database/percona-server
二、MySQL 介绍
- 什么是数据库 ?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
主流的数据库有:sqlserver,mysql,Oracle、SQLite、Access、MS SQL Server等,本文主要讲述的是mysql
- 数据库管理作用
- 将数据保存到文件或内存
- 接收特定的命令,然后对文件进行相应的操作
PS:如果有了以上管理系统,无须自己再去创建文件和文件夹,而是直接传递命令给上述软件,让其来进行文件操作,他们统称为数据库管理系统(DBMS,Database Management System)
-
数据库管理系统的优点
- 相互关联的数据的集合
- 较少的数据冗余
- 程序与数据相互独立
- 保证数据的安全、可靠
- 最大限度地保证数据的正确性
- 数据可以并发使用并能同时保证一致性
-
数据库管理系统的基本功能
数据定义
数据处理
数据安全
数据备份
-
数据库管理系统
- 数据库是数据的汇集,它以一定的组织形式存于存储介质上
- DBMS是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心
- DBA:负责数据库的规划、设计、协调、维护和管理等工作
- 应用程序指以数据库为基础的应用程序
-
数据库系统的架构
单机架构
大型主机/终端架构
主从式架构(C/S)
分布式架构
-
关系型数据库
- 关系 :关系就是二维表,其中:表中的行、列次序并不重要
- 行(row):表中的每一行,又称为一条记录
- 列(column):表中的每一列,称为属性,字段
- 主键(Primary key):用于唯一确定一个记录的字段
- 域(domain):属性的取值范围,如,性别只能是‘男’和‘女’两个值
-
联系的类型
一对一联系(1:1)
一对多联系(1:n)
多对多联系(m:n)
-
(1)数据的操作:
数据提取:在数据集合中提取感兴趣的内容。SELECT
数据更新:变更数据库中的数据。INSERT、DELETE、UPDATE -
(2)数据的约束条件 :是一组完整性规则的集合
实体(行)完整性 Entity integrity
域(列)完整性 Domain Integrity
参考完整性 Referential Integrity
-
简易数据规划流程
第一阶段:收集数据,得到字段
- 收集必要且完整的数据项
- 转换成数据表的字段
第二阶段:把字段分类,归入表,建立表的关联
- 关联:表和表间的关系
- 分割数据表并建立关联的优点
- 节省空间
- 减少输入错误
- 方便数据修改
第三阶段:
- 规范化数据库
-
数据库的正规化分析
- 数据库规范化,又称数据库或资料库的正规化、标准化,是数据库设计中的一系列原理和技术,以减少数据库中数据冗余,增进数据的一致性。关系模型的发明者埃德加·科德最早提出这一概念,并于1970年代初定义了第一范式、第二范式和第三范式的概念
- RDMBS设计范式基础概念
- 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,不同的规范要求被称为不同范式,各种范式呈递次规范,越高的范式数据库冗余越小/2目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般
数据库只需满足第三范式(3NF)即可
-
范式
- 1NF:无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,确保每一列的原子性。除去同类型的字段,就是无重复的列
说明:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库 - 2NF:属性完全依赖于主键,第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分。通常为表加上一个列,以存储各个实例的唯一标识PK,非PK的字段需要与整个PK有直接相关性
- 3NF:属性不依赖于其它非主属性,满足第三范式必须先满足第二范式。第三范式要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系
- 关系型数据库组件(对象)
数据库:database
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privilege
存储过程:procedure
存储函数:function
触发器:trigger
事件调度器:event scheduler
任务计划等
- MySQL特性
插件式存储引擎:也称为“表类型”,存储管理器有多种实现版本,功能和特性可能均略有别;用户可根据需要灵活选择,从 Mysql 5.5.5 开始 innoDB 引擎是 MYSQL 默认引擎
MyISAM ==> Aria
InnoDB ==> XtraDB
- 单进程,多线程
- 诸多扩展和新特性
- 提供了较多测试组件
- 开源
三、MySQL 安装
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
使用mysql必须具备以下条件:
- a. 安装MySQL服务端
- b. 安装MySQL客户端
- c. 【客户端】连接【服务端】
- d. 【客户端】发送命令给【服务端MySQL】服务的接受命令并执行相应操作(增删改查等)
MySQL企业版本选择
5.6 : 5.6.40+(记忆) 双数版,GA(稳定版) 6-12月
5.7 : 5.7.20+(2017913) 双数版
8.0 : 8.0.20+ 双数版
MySQL下载
最新版本下载地址:https://dev.mysql.com/downloads/mysql/8.0.html
历史版本下载地址:https://downloads.mysql.com/archives/community/
避免使用测试样例多的功能
Windows安装参考:http://www.cnblogs.com/lonelywolfmoutain/p/4547115.html
Linux安装参考:https://www.cnblogs.com/along21/p/7668023.html
MySQL二进制包安装
- 准备虚拟机
主机名 | IP | 配置 |
---|---|---|
db01 | 10.0.0.51 | 1核2G |
关闭seLinux和防火墙
- 上传二进制包到/opt ,解压并创建软链接
[root@db01 opt]# rz mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
[root@db01 opt]# tar xf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
[root@db01 opt]# du -sh *
385M mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz
630M mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
2.5G mysql-8.0.20-linux-glibc2.12-x86_64
469M mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
[root@db01 opt]# ln -s /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@db01 opt]# ll /usr/local/mysql
lrwxrwxrwx 1 root root 40 11月 2 11:21 /usr/local/mysql -> /opt/mysql-8.0.20-linux-glibc2.12-x86_64
- 基础环境准备
# 移除冲突软件
[root@db01 opt]# yum remove mariadb-libs -y
# 创建虚拟用户
[root@db01 opt]# useradd -M -r mysql
[root@db01 opt]# id mysql
uid=998(mysql) gid=996(mysql) 组=996(mysql)
# 创建目录并授权
[root@db01 opt]# mkdir -p /data/3306/data
[root@db01 opt]# chown -R mysql. /data/
[root@db01 opt]# ls -ld /data/
drwxr-xr-x 3 mysql mysql 18 11月 2 11:26 /data/
# 配置环境变量
[root@db01 opt]# echo export PATH=\$PATH:/usr/local/mysql/bin/ >> /etc/profile && . /etc/profile
- 初始化数据(创建系统数据)
[root@db01 opt]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
2020-11-02T03:32:56.683285Z 0 [System] [MY-013169] [Server] /opt/mysql-8.0.20-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.20) initializing of server in progress as process 2049
2020-11-02T03:32:56.709263Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-11-02T03:32:58.296518Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-11-02T03:32:59.507707Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
参数说明:
--initialize-insecure # 初始化核心参数(不安全的)
--user=mysql # 指定初始化用户(默认用户root)
--basedir=/usr/local/mysql # 数据库软件位置
--datadir=/data/3306/data # 数据存储位置
有可能的报错:
[error] mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解决: yum install -y libaio-deve
多版本之间的初始化不同:
5.7 和 8.0 一样
5.7 之前不一样
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
--initialize 会生成一个12位,4种密码复杂度的 root@localhost 用户临时密码,第一次登录需要修改, 密码过期时间:180 --initialize-insecure root@localhost 用户密码为空
- 配置文件
cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
port=3306
socket=/tmp/mysql.sock
[client]
socket=/tmp/mysql.sock
EOF
MySQL数据库无法启动
首先查看日志:/data/mysql/data/主机名.err 的 [ERROR] 上下文
如果报告类似 without updating PID 错误,可能原因:
- /etc/my.cnf 路径不对
- /tmp/mysql.sock 文件修改过 或 删除过
- /data/3306/data 目录权限不是 mysql
- 参数改错了
- 加入systemctl服务管理,启动并开机自启
[root@db01 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@db01 ~]# systemctl enable mysqld
mysqld.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysqld on
[root@db01 ~]# systemctl start mysqld
[root@db01 ~]# systemctl status mysqld.service
直接启动
/etc/init.d/mysqld start /etc/init.d/mysqld stop /etc/init.d/mysqld status
四、MySQL 工具
1、分析工具
性能,结构和数据分析工具
- Anemometer – 一个 SQL 慢查询监控器。
- innodb-ruby – 一个对 InooDB 格式文件的解析器,用于 Ruby 语言。
- innotop – 一个具备多种特性和可扩展性的 MySQL 版 ‘top’ 工具。
- pstop – 一个针对 MySQL 的类 top 程序,用于收集,汇总以及展示来自 performance_schema 的信息。
- mysql-statsd – 一个收集 MySQL 信息的 Python 守护进程,并通过 StatsD 发送到 Graphite。
2、备份
备份/存储/恢复 工具
- MyDumper – 逻辑的,并行的 MySQL 备份/转储工具。
- MySQLDumper – 基于 web 的开源备份工具-对于共享虚拟主机非常有用。
- mysqldump-secure – 将加密,压缩,日志,黑名单和 Nagios 监控一体化的 mysqldump 安全脚本。
- Percona Xtrabackup – 针对 MySQL 的一个开源热备份实用程序——在服务器的备份期间不会锁定你的数据库。
3、性能测试
给你的服务器进行压测的工具
- iibench-mysql -基于 Java 的 MySQL/Percona/MariaDB 索引进行插入性能测试工具。
- Sysbench – 一个模块化,跨平台以及多线程的性能测试工具。
4、聊天应用
集成进聊天室的脚本
- Hubot MySQL ChatOps
5、配置
MySQL 配置实例及指导
- mysql-compatibility-config – 使 MySQL 配置起来更像新的(或先前)的 MySQL 版本。
6、连接器
多种编程语言的 MySQL 连接器
- Connector/Python – 一个对于 Python 平台和开发的标准化数据库驱动程序。
- go-sql-driver – 一个 Go 语言的轻量级、极速的 MySQL 驱动程序。
- libAttachSQL – libAttachSQL 是 MySQL 服务器的一个轻量级,非阻塞的 C 语言 API。
- MariaDB Java Client – 针对 Java 应用且经过 LGPL 许可的 MariaDB 客户端库。
- MySQL-Python – 一个 Python 语言的 MySQL 数据库连接器。
- PHP mysqlnd – 针对 MySQL 的 MySQL 本地驱动,弃用过时的 libmysql 基础驱动。
7、开发
支持 MySQL 相关开发的工具
- Flywaydb – 数据库迁移;任意情况下轻松可靠地演变你的数据库版本。
- Liquibase – 对你的数据库进行源代码控制。
- Propagator – 集中模式和数据部署在一个多维拓扑上。
8、GUI
前端和应用的 GUI
- Adminer – 一个 PHP 编写的数据库管理工具。
- HeidiSQL – Windows 下的 MySQL 图形化管理工具。
- MySQL Workbench – 提供给数据库管理员和开发人员进行数据库设计和建模的集成工具环境;SQL 开发;数据库管理。
- phpMyAdmin – 一个 PHP 写成的开源软件,意图对 web 上的 MySQL 进行管理。
- SequelPro – 一个 mac 下运行 MySQL 的数据库管理应用程序。
- mycli – 一个带自动补全和语法高亮的终端版 MySQL 客户端
9、HA
高可用解决方案
- Galera Cluster – 一个基于同步复制的多主机集群方案。
- MHA – 针对 MySQL 的优秀高可用管理器及工具
- MySQL Fabric – 一个用于管理 MySQL 服务器场(Server Farms)的可扩展框架。
- Percona Replication Manager – 针对 MySQL 的异步复制管理代理。支持以文件和 GTID 为基础的复制,使用 booth 实现的地理分布式集群。
10、代理
MySQL 代理
- MaxScale – 开源,以数据库为中心的代理。
- Mixer – Go 实现的一个 MySQL 代理,目的为 MySQL 分片提供一个简单的解决方案。
- MySQL Proxy – 一个处于你的客户端和 MySQL 服务端之间的简单程序,它可以检测、分析或者改变它们的通信。
- ProxySQL – 高性能的 MySQL 代理。
11、复制
复制相关的软件
- orchestrator – 对 MySQL 复制拓扑管理并可视化的工具。
- Tungsten Replicator – MySQL 的一个高性能、开源、数据复制引擎。
12、模式
附加模式
- common_schema – MySQL DBA 的框架, 提供一个具有函数库、视图库和查询脚本的解释器。
- sys – 一个视图、函数和过程的集合,以帮助 MySQL 管理人员更加深入理解 MySQL 数据库的使用。
13、服务器
MySQL server flavors
- MariaDB – MySQL server 的一个由社区开发的分支。
- MySQL Server & MySQL Cluster – Oracle 官方的 MySQL server 和 MySQL 集群分布。
- Percona Server – 一个加强版的 MySQL 替代品
- WebScaleSQL – WebScaleSQL,5.6 版本,基于 MySQL 5.6 社区版本。
14、分片
分片解决方案/框架
- vitess – 对于大规模的 web 服务,vitess 提供服务和工具以便于 MySQL 数据库的缩放。
- jetpants – 一个自动化套件,用于管理大规模分片集群,由 Tumblr 开发。
15、工具包
工具包,通用脚本
- go-mysql – 一个纯 go 的库,用于处理 MySQL 的网络协议和复制。
- MySQL Utilities – 一个命令行实用程序的集合,Python 语言编写,用于维护和管理单一或多层的 MySQL。
- Percona Toolkit – 一个先进的命令行工具集,用于执行对于 MySQL 服务器和系统过于困难或复杂的任务。
- openark kit – 一组实用的工具,解决日常的维护工作,包括一些复杂的或需徒手操作的,用 Python 语言编写。
- UnDROP – 一个用来恢复删除或损坏的 InnoDB 表中数据的工具。