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;
相关推荐
瓜牛_gn25 分钟前
mysql特性
数据库·mysql
奶糖趣多多1 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt2 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧4 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml45 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
Channing Lewis5 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
追风林6 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
毕业设计制作和分享7 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil277 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk8 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql