MySQL1数据库

162 阅读9分钟

MySQL数据库

数据库的基同一念

数据

  • 描述事物的符号记录
  • 包括数字、文字、图形、图像、声音、档案记录等
  • 以“记录”形式按统一的格式进行存储

  • 将不同的记录组织在一起
  • 用来存储具体数据

数据库

  • 表的集合,是存储数据的仓库
  • 以一定的组织方式存储的相互相关的数据集合

数据库的发展史

  • 第一阶段:人工管理阶段
  • 第二阶段:文件系统阶段
  • 第三阶段:数据库管理阶段

数据库系统

  • 是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成
  • 用户可以通过DBMS或应用程序操作数据库

1669104576685.jpg

数据库管理系统(DBMS)

  • 是实现对数据库资源有效阻止、管理和存取的系统软件
  • 数据库的建立和维护功能、数据定义功能、数据操纵功能、数据库的运行管理功能、通信功能

DBMS概念

  • Database:数据库是数据的汇集,它以一定的组织形式存于存储介质上
  • DBMS:是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心
  • DBA:负责数据库的规划、设计、协调、维护和管理等工作
  • 应用程序:指以数据库为基础的应用程序

数据库管理系统的优点

  • 相互关联的数据集合
  • 较少的数据冗余
  • 程序与数据相互独立
  • 保证数据的安全、可靠
  • 最大限度的保证数据的正确性
  • 数据可以并发使用并能同时保证一致性

DBMS的工作模式

  1. 接受应用程序的数据请求和处理请求
  2. 将用户的数据请求(高级指定)转换为复杂机器代码(底层指令)
  3. 实现对数据库的操作
  4. 从数据库的操作中接受查询结果
  5. 对查询结果进行处理(格式转换)
  6. 将处理结果返回给用户

当今主流的数据库

  • SQL Server(微软公司产品)
    • 面向windows操作系统
    • 简单、易用
  • Oracle(甲骨文公司产品)
    • 面向所有主流平台
    • 安全、完善、操作复杂
  • DB2(IBM公司产品)
    • 面向所有主流平台
    • 大型、安全、完善
  • MySQL(甲骨文公司收购)
    • 免费、开源、体积小

关系型数据库

  • 关系型数据库系统是基于关系模型的数据库系统
  • 关系模型的数据结构使用简单易懂的二维数据库
  • 关系模型可用简单的“实体-关系”(E-R)图来表示
  • E-R图中包含了实体(数据对象)、关系和属性三个要素

关系型数据库三要素

  • 实体
    • 也成为了实例,对应现实世界中可区别于其他对象的“事件”或“事务”
  • 属性
    • 实体所具有的的某一特性、一个实体可以有多个属性
  • 联系
    • 实体集之间的对应关系称为联系,也称为关系

非关系型数据库

  • 非关系数据库也被称为NoSQL(Not Only SQL)
  • 存储数据不以关系模型为依据,不需要固定的表格式
  • 非关系型数据库的特点
    • 数据库可高并发读写
    • 读海量数据高效存储与访问
    • 数据库具有高扩展性与高可用性
  • 常用的非关系型数据库:Redis、mongoDB等

非关系数据库的优缺点

  • 优点:
  1. 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,场景应用广泛,而关系型数据库则只支持基础类型
  2. 速度快:nosql可以使用硬盘或者随机存储作为载体,而关系型数据库只能使用硬盘
  3. 高扩展性
  4. 成本低:nosql数据库部署简单,基本上都是开源软件
  • 缺点
  1. 不提供sql支持,学习和使用成本较高
  2. 无事务处理
  3. 数据结构相对复杂,复杂查询方面稍欠
  4. 好多数据写在内存中

MySQL数据库介绍

  • 一款深受欢迎的开源关系型数据库
  • Oracle旗下的产品
  • 遵守GPL协议,可以免费试用与修改

特点

  • 性能卓越、服务稳定
  • 开源、无版权限制、成本低
  • 多线程、多用户
  • 基于C/S(客户端/服务端)架构
  • 安全可靠

MySQL商业版与社区版

  • MySQL商业版是由MySQL AB公司负责开发与维护,需要付费才能使用
  • MySQL社区版是由分散在世界各地的MySQL开发者,爱好者一起开发有维护,可以免费使用

MySQL商业版与社区版区别

  • 商业版组织管理与测试环节更加严格,会比社区版更稳定
  • 商业版不遵守GPL,社区版遵从GPL可以免费使用
  • 商业版可获得7*24小时服务,社区版则没有

日志

数据库日志文件用户备份、恢复、故障定位、分析是最核心的部分

MySQL与Oracle区别:

  • MySQL写一条数据,同步到日志中一条
  • Oracle会重做日志组,一个组中至少三个日志成员,轮流存储日志,还会有另一个组与之同步/备份

实验

安装MySQL

环境

由于MySQL需求的内存和存储量较大,还有内核需求高,所以尽量将内存给大点,内核数给多点,硬盘给大点

安装MySQL

先下载MySQL安装包和boost安装包
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
boost_1_59_0.tar.gz  mysql-5.7.17.tar.gz  rh
[root@localhost opt]#
#安装需要的依赖包
[root@localhost opt]# yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
[提示:如果出现镜像报错等问题,表示yum仓库有问题,搭建一个yum仓库就好]

#创建程序用户管理,不允许登陆系统
[root@localhost ]# useradd -s /sbin/nologin mysql
#解压安装包
[root@localhost opt]# tar zxvf mysql-5.7.17.tar.gz
#将boost安装包解压到/usr/local目录里面
[root@localhost opt]# tar zxvf boost_1_59_0.tar.gz -C /usr/local/
[root@localhost opt]# mv /usr/local/boost_1_59_0 /usr/local/boost

[root@localhost opt]# cd mysql-5.7.17/
#编译安装MySQL
[root@localhost mysql-5.7.17]# 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_EXTRA_CHARSETS=all \
> -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=/usr/local/boost \
> -DWITH_SYSTEMD=1
说明
cmake \
-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_EXTRA_CHARSETS=all \		
#指定支持其他字符集编码
-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=/usr/local/boost \          
#指定boost的路径,若使用mysql-boost集成包安装则-DWITH_BOOST=boost
-DWITH_SYSTEMD=1

#编译安装
[root@localhost mysql-5.7.17]# make && make install
时间很长,耐心等待

#修改mysql 配置文件
[root@localhost ~]# vim /etc/my.cnf
#删除原本的配置,添加
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysql]
port = 3306
socket = /usr/local/mysql/mysql.sock
auto-rehash

[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
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
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

说明
[mysqld]				
#服务全局设置
user = mysql       			
#设置管理用户
basedir=/usr/local/mysql		
#指定数据库的安装目录
datadir=/usr/local/mysql/data		
#指定数据库文件的存储路径
port = 3306				
#指定端口
character-set-server=utf8		
#设置服务器字符集编码格式为utf8
pid-file = /usr/local/mysql/mysqld.pid	
#指定pid 进程文件路径
socket=/usr/local/mysql/mysql.sock
#指定数据库连接文件
bind-address = 0.0.0.0			
#设置监听地址,0.0.0.0代表允许所有,如允许多个IP需空格隔开
skip-name-resolve			
#禁用DNS解析
max_connections=2048			
#设置mysql的最大连接数
default-storage-engine=INNODB		
#指定默认存储引擎
max_allowed_packet=16M			
#设置数据库接收的数据包大小的最大值
server-id = 1				
#指定服务ID号

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

----------------------------------------------------------------------------------------------------------
sql_mode常用值如下:
NO_ENGINE_SUBSTITUTION
如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
STRICT_TRANS_TABLES
在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制
NO_AUTO_CREATE_USER
禁止GRANT创建密码为空的用户
NO_AUTO_VALUE_ON_ZERO
mysql中的自增长列可以从0开始。默认情况下自增长列是从1开始的,如果你插入值为0的数据会报错
NO_ZERO_IN_DATE
不允许日期和月份为零
NO_ZERO_DATE
mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
ERROR_FOR_DIVISION_BY_ZERO
在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。默认情况下数据被零除时MySQL返回NULL
PIPES_AS_CONCAT
将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
ANSI_QUOTES
启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

image.png

image.png

image.png

image.png

image.png

image.png

image.png image.png

更改mysql安装目录和配置文件的属主属组和设置路径环境变量

[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql/
[root@localhost ~]# chown mysql:mysql /etc/my.cnf
[root@localhost ~]# echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
[root@localhost ~]# source /etc/profile

image.png

初始化数据库

[root@localhost ~]# cd /usr/local/mysql/bin/
[root@localhost bin]# ./mysqld \
> --initialize-insecure \
> --user=mysql \
> --basedir=/usr/local/mysql \
> --datadir=/usr/local/mysql/data
说明
./mysqld \
--initialize-insecure \			
#生成初始化密码为空
--user=mysql \                    
#指定管理用户
--basedir=/usr/local/mysql \        
#指定数据库的安装目录
--datadir=/usr/local/mysql/data	
#指定数据库文件的存储路径

image.png

添加mysqld系统服务

[root@localhost bin]# cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
[root@localhost bin]# systemctl daemon-reload
#刷新识别  
[root@localhost bin]# systemctl start mysqld.service
#开启服务
[root@localhost bin]# systemctl enable mysqld
#开机自启动
[root@localhost bin]# netstat -anpt | grep 3306
#查看端口

image.png

修改MySQL登陆密码并授权登陆

[root@localhost bin]# mysqladmin -u root -p password "123456"
[root@localhost bin]# mysql -u root -p

image.png

image.png 注意!!!如果输入修改密码代码时候,报错在配置文件中vim /etc/my.cnf中最后一行加上skip-grant-tables

1669119145560.jpg