MYSQL1-基础与安装

常用数据库

Oracle 是甲骨文公司的一款关系型数据库管理系统,在数据库领域一直处于领先地位的产品,是目前世界上流行的关系型数据库之一,是一种高效率、可靠性好、适应高吞吐量的数据库方案。

优点:

  1. Oracle 可移植性好,能在所有主流平台上运行(包括 Windows),完全支持所有工业标准。采用完全开放策略,使客户可以选择最适合解决方案。以及对开发商的全力支持。
  2. 获得最高认证级别的 ISO 标准认证,安全性高。
  3. 与其它数据库相比,Oracle 性能最高。保持着开放平台下 TPC-D 和 TPC-C 世界记录。
  4. 多层次网络计算,支持多种工业标准,可以用 ODBC、JDBC、OCI 等网络客户连接 。
  5. 完全向下兼容,因此被广泛应用,且风险低 。

缺点:

  1. 对硬件的要求高
  2. 价格比较昂贵
  3. 管理维护麻烦
  4. 操作比较复杂

SQL Server 是 Microsoft(微软)公司推出的关系型数据库管理系统,主要应用于大型的管理系统中

优点:

  1. 与微软的 Windows 系列操作系统的兼容性很好。
  2. 高性能设计,可充分利用 WindowsNT 的优势。
  3. 系统管理先进,支持 Windows 图形化管理工具,支持本地和远程的系统管理和配置。
  4. 强壮的事务处理功能,采用各种方法保证数据的完整性。
  5. 支持对称多处理器结构、存储过程、ODBC,并具有自主的 SQL 语言。

缺点:

  1. SQL Server 只能在 Windows 系统上运行,没有丝毫开放性。
  2. 没有获得任何安全证书。
  3. 多用户时性能不佳 。
  4. 只支持 C/S 模式,SQL Server C/S 结构只支持 Windows 客户用 ADO、DAO、OLEDB、ODBC 连接。

MySQL 是一种开放源代码的关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。因为其速度、可靠性和适应性而备受关注。MySQL 是流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是最好的应用软件之一。

优点:

  1. 性能卓越服务稳定,很少出现异常宕机
  2. 开放源代码且无版权制约,自主性强、使用成本低。
  3. 历史悠久、社区及用户非常活跃,遇到问题,可以很快获取到帮助。
  4. 软件体积小,安装使用简单,并且易于维护,安装及维护成本低。
  5. 支持多种操作系统,提供多种 API 接口,支持多种开发语言。

缺点:

  1. MySQL 最大的缺点是其安全系统,主要是复杂而非标准,只有调用 mysqladmin 来重读用户权限才会发生改变。
  2. MySQL 不允许调试存储过程,开发和维护存储过程很难。
  3. MySQL 不支持热备份。
  4. MySQL 的价格随平台和安装方式变化。

专业术语

数据库管理系统(DBMS)是位于操作系统与用户之间的一种操纵和管理数据库的软件。关系型数据库通过关系数据库管理系统(RDBMS)进行管理。

关系(Relational,即 RDBMS 里的 R)表示这是一种特殊的 DBMS,数据库中表与表之间要存在关系。

数据库(DataBase,即 RDBMS 里的 DB)是一个用来存储和管理数据的仓库。它的存储空间很大,并且有一定的数据存放规则。通过由行和列组成的二维表(类似 Excel 工作表)来管理数据。数据库中可以同时存储多个表。

管理系统(Management System,即 RDBMS 里的 MS)是一个软件,我们可以通过它来插入(insert)、查询(query)、修改(modify)或删除(delete)表中的数据。

用来管理数据的二维表在关系数据库中简称为表(Table),每个表由多个行(Row)和列(Column)组成。

表的列(垂直方向)称为字段,是具有相同数据类型的数据集合。表的行(水平方向)称为记录(Record),相当于一条数据。记录可以包含多项信息,表中的每一列都对应于其中的某一项。

表的列(垂直方向)称为字段,是具有相同数据类型的数据集合。表的行(水平方向)称为记录(Record),相当于一条数据。记录可以包含多项信息,表中的每一列都对应于其中的某一项

SQL(Structured Query Language,结构化查询语言)是用来操作关系型数据库的语言,使用 SQL 可以对数据库和表进行添加、删除、修改和查询等操作

MySQL 中创建表

CREATE TABLE `student` (
  `id` int(4),
  `name` varchar(20),
  `age` int(4),
  `stuno` int(11),
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

为了使用MySQL,你需要访问运行 MySQL 服务器的计算机和发布命令到 MySQL 客户端的计算机。对于 MySQL 数据库管理系统,服务器为MySQL DBMS。你可以在本地安装的副本上运行,也可以连接到运行在你具有访问权的远程服务器上的一个副本。

客户端可以是 MySQL 提供的工具(如 MySQL Workbench、SQLyog)、脚本语言(如Perl)、Web 应用开发语言(如ASP、ColdFusion、JSPPHP)和程序设计语言(如 C、C++Java)等。

MySQL内部结构

连接池、SQL 接口、解析器、优化器、缓存、存储引擎等组成,可以分为三层即: MySQL Server 层、存储引擎层和文件系统层。MySQL Server 层又包括连接层和 SQL 层。

如下是官方文档中 MySQL 的基础架构图:

 Connection pool  为连接层,Management Services & Utilities ...Caches & Buffers 为 SQL 层,Pluggable Storage Engines 为存储引擎层,File system、Files & Logs 为文件系统层。

Co​nnectors 不属于以上任何一层,可以将 Co​nnectors 理解为各种客户端、应用服务,主要指的是不同语言与 SQL 的交互。

1. 连接层

应用程序通过接口(如 ODBC、JDBC)来连接 MySQL,最先连接处理的是连接层。连接层包括通信协议、线程处理、用户名密码认证 3 部分。

  • 通信协议负责检测客户端版本是否兼容 MySQL 服务端。
  • 线程处理是指每一个连接请求都会分配一个对应的线程,相当于一条 SQL 对应一个线程,一个线程对应一个逻辑 CPU,在多个逻辑 CPU 之间进行切换。
  • 密码认证用来验证用户创建的账号、密码,以及 host 主机授权是否可以连接到 MySQL 服务器。


Connection Pool(连接池)属于连接层。由于每次建立连接都需要消耗很多时间,连接池的作用就是将用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求缓存下来,下次可以直接用已经建立好的连接,提升服务器性能。

2. SQL层

SQL 层是 MySQL 的核心,MySQL 的核心服务都是在这层实现的。主要包含权限判断、查询缓存、解析器、预处理、查询优化器、缓存和执行计划。

  • 权限判断可以审核用户有没有访问某个库、某个表,或者表里某行数据的权限。
  • 查询缓存通过 Query Cache 进行操作,如果数据在 Query Cache 中,则直接返回结果给客户端,不必再进行查询解析、优化和执行等过程。
  • 查询解析器针对 SQL 语句进行解析,判断语法是否正确。
  • 预处理器对解析器无法解析的语义进行处理。
  • 查询优化器对 SQL 进行改写和相应的优化,并生成最优的执行计划,就可以调用程序的 API 接口,通过存储引擎层访问数据。


Management Services & Utilities、SQL Interface、Parser、Optimizer 和 Caches & Buffers 属于 SQL 层,详细说明如下表所示。

名称说明
Management Services & Utilities MySQL 的系统管理和控制工具,包括备份恢复、MySQL 复制、集群等。
SQL Interface(SQL 接口)用来接收用户的 SQL 命令,返回用户需要查询的结果。例如 SELECT FROM 就是调用 SQL Interface。
Parser(查询解析器)在 SQL 命令传递到解析器的时候会被解析器验证和解析,以便 MySQL 优化器可以识别的数据结构或返回 SQL 语句的错误。
Optimizer(查询优化器)SQL 语句在查询之前会使用查询优化器对查询进行优化,同时验证用户是否有权限进行查询,缓存中是否有可用的最新数据。它使用“选取-投影-连接”策略进行查询。

例如 SELECT id, name FROM student WHERE gender = "女";语句中,SELECT 查询先根据 WHERE 语句进行选取,而不是将表全部查询出来以后再进行 gender 过滤。SELECT 查询先根据 id 和 name 进行属性投影,而不是将属性全部取出以后再进行过滤,将这两个查询条件连接起来生成最终查询结果。
Caches & Buffers(查询缓存)如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的,比如表缓存、记录缓存、key 缓存、权限缓存等。

3. 存储引擎层

Pluggable Storage Engines 属于存储引擎层。存储引擎层是 MySQL 数据库区别于其他数据库最核心的一点,也是 MySQL 最具特色的一个地方。主要负责 MySQL 中数据的存储和提取。

因为在关系数据库中,数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。

4. 文件系统层

文件系统层主要是将数据库的数据存储在操作系统的文件系统之上,并完成与存储引擎的交互。

安装与配置

windows安装配置与linux安装配置有许多可以借鉴,有的内容在inux安装配置写了就没在windows安装配置写

linux安装

ubuntu18.4下

安装的是MySQL 5.7

步骤:

sudo apt install mysql-server-5.7

之后查看mysql:

mysql -V

查看MySQL5.7默认账号和密码:

sudo cat /etc/mysql/debian.cnf

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = U1l3HUfjvYEoop0q
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = U1l3HUfjvYEoop0q
socket   = /var/run/mysqld/mysqld.sock

配置MYSQL

sudo mysql_secure_installation

以下是设置,设置的密码是:zj

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: N
Please set the password for root here.

New password: 

Re-enter new password: 
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : N

 ... skipping.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : N

 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : N

 ... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done! 

查询运行状态

systemctl status mysql.service

出现以下内容,则无误

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2023-04-01 16:30:02 CST; 20min ago
 Main PID: 7644 (mysqld)
    Tasks: 29 (limit: 4915)
   CGroup: /system.slice/mysql.service
           └─7644 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid

4月 01 16:30:02 zhaojia-Lenovo-Legion-R9000P2021H systemd[1]: Starting MySQL Community Server...
4月 01 16:30:02 zhaojia-Lenovo-Legion-R9000P2021H systemd[1]: Started MySQL Community Server.

修改root账户秘密认证方式

连接到Mysql,可通过以下命令连接任意电脑的mysql

sudo mysql -h "IP地址" -P "端口号" -u root -p

或者,只能连接本地

sudo mysql -u root -p

连接成功后:

select user, plugin from mysql.user;

出现

+------------------+-----------------------+
| user             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.session    | mysql_native_password |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
4 rows in set (0.00 sec)

重置Root密码:

mysql> update mysql.user set authentication_string=PASSWORD('123456'), plugin='mysql_native_password' where user='root';
mysql>flush privileges;
mysql> exit

设置远程访问MYSQL

需要设置 mysql 数据库支持外部或者远程访问,则需要把绑定 IP 地址改为 0.0.0.0,或者不写IP地址。因此编辑配置文件:

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

修改绑定地址为 0.0.0.0。原来默认绑定 127.0.0.1 注释掉

#bind-address       = 127.0.0.1
bind-address = 0.0.0.0

保存退出,然后进入mysql:

sudo mysql -uroot -p

mysql> grant all ON *.* to root@'%' identified by 'zj' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

其中root@%localhost就是本地访问,配置成%就是所有主机都可连接;'zj'为用户设置的密码。

修改完毕

修改完 mysqld.cnf 文件,重新启动服务器

systemctl restart mysql.service

完成了 MySQL 的安装与远程访问设置

删除MySQL

删除

sudo apt autoremove --purge mysql-server-*
sudo apt remove mysql-server
sudo apt autoremove mysql-server
sudo apt remove mysql-common

清理残余

dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P

window安装

MySQL官网中下载社区8.0的社区版本

下载后,点击安装,安装的流程参考:

MySQL安装配置教程(Windows系统) (biancheng.net)

MySQL 端口号默认 3306

之后设置密码:123456 

系统默认的用户名为 root,如果想添加新用户,可以单击“Add User(添加用户)”按钮进行添加

进入服务器名称窗口设置服务器名称,不做修改

MYSQL80

后面按步骤就好,安装好后,可从此电脑-->管理-->服务应用程序-->服务-->找到MYSQL80(默认自启动)

 之后按照此流程配置环境变量:MySQL配置环境变量 (biancheng.net)

配置完成后可通过cmd直接登录:

连接到Mysql,可通过以下命令连接任意电脑的mysql

mysql -h "IP地址" -P "端口号" -u root -p

或者,只能连接本地

mysql -u root -p

登录后,输入 status 命令查看 MySQL 版本信息

 MYSQL服务启动

MySQL 服务是一系列的后台进程,而 MySQL 数据库则是一系列的数据目录和数据文件。MySQL 数据库必须在 MySQL 服务启动之后才可以进行访问

以管理员身份打开cmd,输入:

net start mysql80

net stop mysql80

MYSQL配置文件

linux下是my.cnf,windows下是my.ini

linux寻找方法:Linux下MySQL的配置文件(my.cnf)的存放路径_linux my.cnf 位置_李阿昀的博客-CSDN博客

5.7版本的配置文件:

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

windows寻找方法:windows下mysql配置文件my.ini的位置_mysql的配置文件在哪_sam_zhang1984的博客-CSDN博客

windows下的目录结构

MySQL安装后的目录结构介绍 (biancheng.net)

MySQL数据库文件存放目录结构详解 (biancheng.net)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值