MySQL数据库简介和安装

文章目录


一、数据库原理

目前情况

我们正处于一个数据爆炸的时代,生活中涉及的数据量巨大。

  • 涉及的数据量大
  • 数据不随程序的结束而消失
  • 数据被多个应用程序共享
  • 大数据

数据的分类:

  • 结构化的数据:即有固定格式和有限长度的数据。例如填的表格就是结构化的数据,国籍:中华人 民共和国,民族:汉,性别:男,这都叫结构化数据。
  • 非结构化的数据:非结构化的数据越来越多,就是不定长、无固定格式的数据,例如网页,有时候非常长,有时候几句话就没了;例如语音,视频都是非结构化的数据。
  • 半结构化数据:比如:XML或者HTML的格式的数据。

数据库的发展史

文件管理系统的缺点

  • 编写应用程序不方便
  • 数据冗余不可避免
  • 应用程序依赖性
  • 不支持对文件的并发访问
  • 数据间联系弱
  • 难以按用户视图表示数据
  • 无安全控制功能

数据库系统发展阶段

  1. 萌芽阶段:文件系统(使用磁盘文件来存储数据)。
  2. 初级阶段:第一代数据库(出现了网状模型、层次模型的数据库)。
  3. 中级阶段:第二代数据库(关系型数据库和结构化查询语言)
  4. 高级阶段:新一代数据库("关系-对象"型数据库 )

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官网

bash 复制代码
https://dev.mysql.com/downloads/


选择合适的版本

下载之后,在linux中安装之后,就会多出一个yum源,直接用yum安装即可。

bash 复制代码
yum install mysql-server -y

在centos7并没有mysql的yum源需要额外安装,步骤如上所示。如果觉得很麻烦,也可以直接安装mariadb(mysql的平替)

bash 复制代码
yum install mariadb-server -y
systemctl start mariadb.service
mysql
mysql_secure_installation 
#初始化设置  先输入密码 一路回车     

yum安装5.7版本

需要额外安装yum源

bash 复制代码
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

测试数据库是否起来,并破解密码

bash 复制代码
systemctl start mysqld
ss -ntap |grep 3306
grep password /var/log/mysqld.log

修改简单密码,mysql有复杂性密码检查。

需要下面命令修改密码策略

bash 复制代码
set global validate_password_policy=0;
set global validate_password_length=1;
alter user root@'localhost' identified by '123123';修改密码为123123

编译安装mysql

bash 复制代码
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
添加程序用户

准备安装包

bash 复制代码
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管理的文件
#############模块解释#####################

进行调优

bash 复制代码
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 环境变量不会被完全覆盖,而是在原有设置的基础上添加新的目录。

bash 复制代码
初始化数据库
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
#开始初始密码为空  回车即可   然后输入新密码

二进制安装

bash 复制代码
https://downloads.mysql.com/archives/community/
下载地址


1.准备用户

bash 复制代码
groupadd -r -g 306 mysql
useradd -r -g 306 -u 306 -d /data/mysql mysql

2.准备数据目录,建议使用逻辑卷

bash 复制代码
mkdir /data/mysql -p
chown mysql:mysql /data/mysql

3.准备二进制程序

bash 复制代码
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.准备配置文件

bash 复制代码
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路径

bash 复制代码
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh

6.创建数据库文件

bash 复制代码
 mysqld --initialize-insecure --user=mysql --datadir=/data/mysql

初始化完成后,/data/mysql就会出现数据库文件。

7.准备服务脚本,并启动服务。

bash 复制代码
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
systemctl daemon-reload
service mysqld start

8.安全初始化

bash 复制代码
/usr/local/mysql/bin/mysql_secure_installation

优化操作

生成提示符

bash 复制代码
vim /etc/my.cnf
[mysql]
prompt=(\\u@\\h) [\\d]>\\_

修改后不是mysql了,是以谁的身份登录的。包含用户名和主机名。

自动补全

bash 复制代码
[mysql]
prompt=(mysql) [\\d]>\\_
auto-rehash
#自动补全 只能补全敲过的命令

四、 安装mycli插件客户端工具

bash 复制代码
安装依赖环境
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
bash 复制代码
解压编译安装
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

五、客户端程序

  • mysql: 交互式或非交互式的CLI工具。
  • mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成 insert等写操作语句保存文本文件中。
  • mysqladmin:基于mysql协议管理mysqld。
  • mysqlimport:数据导入工具。
  • MyISAM存储引擎的管理工具。
  • myisamchk:检查MyISAM库。
  • myisampack:打包MyISAM表,只读。

mysql

客户端命令:本地执行,每个命令都完整形式和简写相识。

mysql命令使用格式

bash 复制代码
mysql [OPTIONS] [database]
常用选项 含义
-A --no-auto-rehash 禁止补全
-u --user= 用户名,默认为root
-h --host= 服务器主机,默认为localhost
-p --passowrd= 用户密码,建议使用-p,默认为空密码
-P(大写) --port= 服务器端口
-S --socket= 指定连接socket文件路径
-D --database= 指定默认数据库
-C --compress 启用压缩
-e "SQL" 执行SQL命令
-V --version 显示版本
-v --verbose 显示详细信息
--print-defaults 获取程序默认使用的配置

运行mysql命令

命令 含义
use mysql 切换数据库
select database(); 查看当前数据库
select user(); 查看当前用户
SELECT User,Host,Password FROM user; 从配置文件中找特定的元素
system clear 清屏
quit ctrl+d 退出

mysqladmin命令

c 复制代码
查看mysql服务是否正常,如果正常提示mysqld is alive
mysqladmin -uroot -pcentos   ping
关闭mysql服务,但mysqladmin命令无法开启
mysqladmin -uroot -pcentos shutdown
创建数据库testdb
mysqladmin -uroot -pcentos   create testdb 
删除数据库testdb
mysqladmin -uroot -pcentos   drop testdb
修改root密码
mysqladmin -uroot -pcentos password '123123'
日志滚动,生成新文件/var/lib/mysql/mariadb-bin.00000N
mysqladmin -uroot -pcentos flush-logs

mysqladmin -uroot -pcentos status;
相关推荐
Json_18179014480几秒前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
煎饼小狗12 分钟前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
永乐春秋29 分钟前
WEB-通用漏洞&SQL注入&CTF&二次&堆叠&DNS带外
数据库·sql
打鱼又晒网1 小时前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
大白要努力!1 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
tatasix2 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。2 小时前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了2 小时前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度2 小时前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
天海华兮2 小时前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql