初识mysql数据库及MYSQL的安装配置

一、数据库简介

21 世纪,人类迈入了“信息爆炸时代”,大量的数据、信息在不断产生,伴随而来的 就是如何安全、有效地存储、检索和管理它们。对数据的有效存储、高效访问、方便共享和 安全控制已经成为信息时代亟待解决的问题。

1、使用数据库的必要性

使用数据库可以高效且条理分明地存储数据,使人们能够更加迅速、方便地管理数据。 数据库具有以下特点。

  • 可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。
  • 可以有效地保持数据信息的一致性、完整性,降低数据冗余。
  • 可以满足应用的共享和安全方面的要求。

2、数据库的基本概念

2.1 数据

描述事物的符号记录称为数据(Data)。数字、文字、图形、图像、声音、档案记录等 都是数据。 在数据库中,数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱无章的。 相同格式和类型的数据统一存放在一起,而不会把“人”和“书”混在一起存储。这样,数据的存储就能够井然有序。

2.1.1 数据库和数据库表

不同的记录组织在一起,就形成了数据库(Database,DB)的“表”(Table)。也可 以说,表是用来存储具体数据的,简单地 说,数据库就是表的集合。它是以一定的组织方式存储的相互有关的数据集合。例如,关系 数据库的表由记录组成,记录由字段组成,字段由字符或数字组成。它可以供各种用户共享, 具有最小冗余度和较高的数据独立性,它是统一管理的相关数据的集合。 通常,数据库并不是简单地存储这些数据的,还要表示它们之间的关系。例如,书和人 是存在联系的,书的作者可能就是某个人,因此需要建立书与人的“关系”。这种关系也需 要用数据库来表示,因此关系的描述也是数据库的一部分。

2.1.2 数据库管理系统和数据库系统

数据库管理系统(Database Management System,DBMS)是实现对数据库资源有效组织、 管理和存取的系统软件。它在操作系统的支持下,支持用户对数据库的各项操作。
数据库系统(Database System,DBS)是一个人-机系统,一般由硬件、操作系统、数 据库、DBMS、应用软件和数据库用户(包括数据库管理员)组成。用户可以通过 DBMS 操作 数据库,也可以通过应用程序操作数据库。

3、主流数据库介绍

3.1 关系数据库

20 世纪 80~90 年代是关系数据库产品发展和竞争的时代。在市场逐渐淘汰了第一代数 据库管理系统的大局面下,SQL Server、Oracle、IBM DB2、MySQL 等一批很有实力的关系 数据库产品走到了主流商用数据库的位置

3.1.1 SQL Server

SQL Server 是 Microsoft 公司的数据库产品,在设计上大量利用了 Microsoft Windows 操作系统的底层结构,直接面向 Microsoft Windows,尤其是 Windows 系列服务器操作系统 的用户。Microsoft Windows 拥有众多的用户群,Microsoft 所有的产品都遵循统一的操作习惯。 对数据库基本概念熟悉的 Windows 用户,可以很快地学会使用 SQL Server,上手比较容易。 Windows 系统的易用性也让数据库管理员可以更容易、更方便、更轻松地进行管理。 Microsoft 公司针对市场的需求,不断扩展其性能,使得 SQL Server 在网络数据库服 务和电子商务方面展示了强大的性能。

3.1.2 Oracle

Oracle 公司成立于 1977 年,最初就是专门的数据库公司。
数据库领域 Oracle 公司在很长一段时间内一直处于领先地位,不仅数据库核心相当优 秀,而且其相关的支持产品也相当完善和全面。Oracle 能适应 70 多种操作系统,这也是其 他产品难以企及的优势。不过随着云计算的不断发展,以 Oracle 为代表的传统数据库正在 逐渐失势,云数据库时代正在来临。2019 年 10 月 15 日亚马逊宣布永久关闭 Oracle 数据库 业务。可以说亚马逊关闭 Oracle 既是自身产业转型升级的需要,也是云计算领域发展迈出 的重要一步。如今已经有越来越多的企业开始上云,抛弃传统数据库,转而使用云数据库, 推动着云计算的不断发展

3.1.3 DB2

1970 年,IBM 公司的一位研究员德加·考特发表论文,提出“关系模型”的概念。此后, 他被称为“关系数据库之父”。IBM 公司投入巨资,开展包括“SystemR”和“SystemR*” 项目在内的关系数据库技术的研究。13 年后,在“SystemR”和“SystemR*”项目的基础上, DB2 以 SystemR 为原型面世。 DB2 支持从 PC 到 UNIX,从中小型机到大型机,从 IBM 到非 IBM(HP 及 Sun UNIX 系统等) 的各种操作系统平台。其中,服务器平台可以是 OS/400、AIX、OS/2、HP-UNIX、Sun Solaris 等操作系统,客户机平台可以是 OS/2 或 Windows、DOS、AIX、HP-UX、Sun Solaris 等操作 系统。但是,DB2 服务器端的最佳运行环境还是 IBM 自己的操作系统平台 OS/400。 DB2 数据库核心又称为 DB2 通用服务器,可以运行于多种操作系统之上,它根据相应的 平台环境做了调整和优化,以便达到较好的性能。由于 IBM 公司在商用服务器领域内的长期 优势,在全球 500 强的企业中,超过 80%的企业曾使用 DB2 作为数据库平台

3.1.4 MySQL

MySQL 也是一个关系型数据库管理系统,现已被 Oracle 公司收购。它与上述大型数据 库相比,有不足之处,但是这丝毫没有减少它受欢迎的程度。 MySQL 运行于 Linux 操作系统之上,Apache 和 Nginx 作为 Web 服务器,MySQL 作为后台 数据库,PHP/Perl/Python 作为脚本解释器。这四款软件都是免费或开源的,也就是说,企 业可以不花一分钱(除人工外)就能建立起一个稳定、高速的网站系统,业内称为“LAMP” 组合。因此,其以体积小、速度快、开源等特点,霸占了中小型网站相当大的市场。

3.2 非关系数据库

非关系数据库也被称作 NoSQL(Not Only SQL),存储数据不以关系模型为依据,不需要 固定的表格式。非关系型数据库作为关系数据库的一个补充,在日益快速发展的网站时代, 发挥着高效率与高性能。

非关系型数据库的优点:

  • 数据库高并发读写的需求
  • 对海量数据高效率存储与访问
  • 数据库的高扩展性与高可用性的需求

常用的非关系数据库例如 Memcached、Redis、MongoDB、HBase

4、关系数据库基本概念

关系数据库系统是基于关系模型的数据库系统,是关系模型应用到数据库领域的实例 化。它的基本概念来自于关系模型。

4.1 基本结构

关系数据库使用的存储结构是多个二维表格,即反映事物及其联系的数据描述是以平面 表格形式体现的。 在每个二维表中,每一行称为一条记录,用来描述一个对象的信息;每一列称为一个字 段,用来描述对象的一个属性。数据表与数据库之间存在相应的关联,这些关联用来查询相 关的数据

关系数据库是由数据表之间的关联组成的。其中:

  • 数据表通常是一个由行和列组成的二维表,每一个数据表分别说明数据库中某一特定的方面或部分的对象及其属性。

  • 数据表中的行通常叫做记录或者元组,它代表众多具有相同属性的对象中的一个。

  • 数据表中的列通常叫做字段或者属性,它代表相应数据库中存储对象的共有属性。

4.2 主键与外键

(1)主键
数据表中的每行记录都必须是唯一的,而不允许出现完全相同的记录,通过定义主键(主关键字,Primary Key)可以保证记录(实体)的唯一性

键,即关键字,它是关系模型中一个非常重要的元素。 主键唯一标识表中的行数据,一个主键值对应一行数据。主键由一个或多个字段组成, 其值具有唯一性,不允许取空值(NULL)。一个表只能有一个主键。 如果一个属性集能唯一地标识表的一行而又不含有多余的属性,那么这个属性集称为候 选键。表中可以有多个候选键,但是只能有一个候选键可以选作表的主键,所有其他候选键 称为备用键。

(2)外键
一个关系数据库通常包含多个表,通过外键(Foreign Key)可以使这些表关联起来。 外键是用于建立和加强两个表数据之间的链接的一列或多列。通过将表中主键值的一列 或多列添加到另一个表中,可创建两个表之间的链接。这个列就称为第二个表的外键。

4.3 完整性规则

为了维护数据库中的数据与现实世界的一致性,关系数据库的数据与更新操作必须遵守 下列四类完整性规则。
(1)实体完整性规则 实体完整性规则要求关系中的元组在主键的属性上不能有空值。如果出现空值,那么主 键值就起不到唯一标识元组的作用。
(2)域完整性规则 域完整性也称列完整性,指定一个数据集对某一个列是否有效或确定是否允许空值。
(3)引用完整性规则 如果两个表之间相互关联,那么引用完整性规则要求不允许引用不存在的元组

二、MYSQL基础

MySQL 是一个真正的多线程、多用户的 SQL 数据库服务,凭借其高性能、高可 靠和易于使用的特性,成为服务器领域中最受欢迎的开源数据库系统。在 2008 年以前,
MySQL 项目由 MySQL AB 公司进行开发、发布和支持,之后历经 Sun 公司收购 MySQL AB 公司, Oracle 公司收购 Sun 公司的过程,目前 MySQL 项目由 Oracle 公司负责运营和维护。

1、源码编译安装

首先需要yum安装一下库软件

[root@server ~]# yum install ncurses ncurses-devel bison cmake -y

第一步:为mysql创建一个管理用户mysql

[root@server ~]# useradd -s /sbin/nologin mysql

第二步:解压mysql源码包

[root@server ~]# cd /opt
[root@server opt]# tar xzvf mysql-boost-5.7.20.tar.gz

第三步:自定义配置

[root@server opt]# cd mysql-5.7.20/
[root@server mysql-5.7.20]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \   <---指定安装目录
-DMYSQL_UNIX_ADDR=/usr/local/mysql.sock \  <---指定mysql的sock路径
-DSYSCONFDIR=/etc \    <---指定配置文件路径
-DSYSTEMD_PID_DIR=/usr/local/mysql \   <---指定pid路径
-DDEFAULT_CHARSET=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库主要是在对mysql的数据备份时用到
-DWITH_SYSTEMD=1     <---这是MySQL 5.7原生支持Systemd的选项,如果要是用systemctl启动,就必须开启。

第四步:安装编译

[root@server mysql-5.7.20]# make && make install

2、优化配置

第五步:修改mysql属主和属组为mysql,否则影响启动!

[root@server mysql-5.7.20]# chown -R mysql.mysql /usr/local/mysql/

第六步:修改my.cnf配置文件(mysql 可以通过sql_mode 来控制mysql 数据库的行为)

[root@server ~]# 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   <---指定默认启动用户为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_DAT    E,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

第七步:优化设置

[root@server ~]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
[root@server ~]# echo 'export PATH' >> /etc/profile
[root@server ~]# source /etc/profile

第八步:初始化配置mysql(Mysql 5.7.6以后的5.7系列版本使用mysqld --initialize
或mysqld --initialize-insecure命令来初始化数据库)

[root@server bin]# mysqld \
--initialize-insecure \  <---初始化数据库的时候不随机生成密码,设置数据库空密码
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
2020-08-08T05:39:36.615339Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-08-08T05:44:46.685380Z 0 [Warning] InnoDB: New log files created, LSN=45790
2020-08-08T05:44:46.712869Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2020-08-08T05:44:46.770159Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 446f5f0a-d93a-11ea-99d3-000c295a2680.
2020-08-08T05:44:46.773250Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2020-08-08T05:44:46.774057Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

第九步:拷贝启动文件,使用systemctl启动mysql

[root@server bin]# cd ..

[root@server mysql]# cp usr/lib/systemd/system/mysqld.service /lib/systemd/system
[root@server mysql]# systemctl start mysqld.service 
[root@server mysql]# netstat -antp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      27393/mysqld 

3、访问数据库

第十步:为mysql创建管理账户root,密码为abc123

[root@server mysql]# mysqladmin -u root -p password
Enter password: (密码为空,直接回车)
New password: 
Confirm new password: 
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

第十一步:用管理员账户登陆数据库成功

[root@server mysql]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> quit
Bye

猜你喜欢

转载自blog.csdn.net/shengjie87/article/details/108179307