MySQL篇-02 MySQL基础知识

1. 版本

1.1 面试经历

笔者上周刚好有个面试,对方听到我说熟悉mysql,随后就来了一句,你使用的是什么版本的MSQL…
我知道是8.x,就凭着记忆说了个8.6
然后他说那你知道MySQL8.x和5.x的区别有哪些吗?
我是真说不上来…

那个面试给我的启发之一是:我们在使用一个技术/产品的时候应该关注多一些它的其他信息,比如版本以及该版本的新特性,选择使用该产品的理由等等…

1.2 查看mysql版本

在安装了MySQL并且配置好环境变量后,可以在cmd输入mysql -V查看使用的mysql版本号。

C:\Users\Medi>mysql -V
mysql  Ver 8.0.30 for Win64 on x86_64 (MySQL Community Server - GPL)

可以看到我的mysql版本是8.0.30。

1.3 mysql8.0新特性

以下只列举其中比较重要的特性,详见MySQL官网

  • 性能提升
  • 更强的NoSQL文档支持
  • 窗口函数(Window Functions)
  • UTF-8编码
  • 隐藏索引
  • 持久化设置
  • 重构BLOB
  • 事务性数据字典
  • SQL角色

2. 配置文件my.ini

注:
Windows下mysql的配置文件默认名字为my.ini
Linux/Mac下默认为my.cnf
笔者博客的MySQL篇中相关操作基于Windows

默认位置:C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

配置内容:

  • [client] 客户端参数
  • [mysqld_safe] mysqld的守护进程
  • [mysqld] 服务端基本配置
  • Query Cache 查询缓存
  • 错误日志
  • 慢查询记录
  • 全局查询日志
  • 从属线程变量
  • 安全变量
  • 存储引擎配置:MyISAM变量,MEMORY变量,InnoDB变量
  • WSREP配置

3. 连接MySQL的方式

回顾笔者在上一篇博客中提到的:

  1. 数据库实例才是真正用于操作数据库文件的;
  2. 应用层提供连接处理功能

《MySQL技术内幕 InnoDB存储引擎》中提到:
连接MySQL操作是一个连接进程和MySQL数据库实例进行通信,从程序设计的角度来说,本质上是进程通信。即MySQL数据库提供的连接方式从本质上看就是进程通信方式。

注:如果对进程通信比较了解,可以知道常用的进程通信方式有管道、命名管道、命名字、TCP/IP套接字、UNIX域套接字

3.1 TCP/IP

  • 适用场景:任意平台,一般情况下客户端(client)在一台服务器上,而MySQL实例(server)在另一台服务器上,这两台机器通过TCP/IP网络连接。

> mysql -h [ip地址] -u [用户名] -P [端口号] -p

例如用户在Windows服务器下请求一个远程Linux服务器下的Mysql实例:

C:\Users\medi>mysql -u root -P 21313 -h 192.168.235.2 -p
Enter password: *************
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20075
Server version: 8.0.30 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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>

在上面的示例中, 客户端使用root的用户去连接ip为192.168.235.2,端口为21313的远程MySQL实例。
MySQL的应用层处理连接请求:在接收到连接请求会检查mysql数据库下的user表,该表相当于是一张权限表,判断发起请求的客户端IP(host字段,%表示任意ip地址)是否允许连接到MySQL实例。

3.2 命名管道(Named Pipe)和共享内存

  • 适用场景:使用命名管道方式连接 MySQL 只适合在部分 Windows 系统下用来连接本机的 MySQL ,性能可比一般的TCP/IP方式提升30%~50%。

MySQL默认是不启用命名管道连接方式,需要在配置文件中启用–enable-named-pipe选项。

在MySQL4.1之后的版本中,MySQL还提供了共享内存的连接方式,需要在配置文件中添加–shared-memory。除此之外,在连接时,MySQL客户端还必须适用–protocol=memory

3.3 UNIX域套接字(Socket)

  • 适用场景:Linux和Unix环境下,MySQL客户端和数据库实例在一台服务器上。

用户可以在配置文件中指定套接字文件的路径,如–socket=/tmp/mysql.sock。
当数据库实例启动后,用户可以通过下列命令进行UNIX域套接字文件的查找:
mysql> SHOW VARIABLES LIKE 'socket';

在知道了UNIX域套接字文件的路径后,就可以适用该方式进行连接了:
mysql -u [用户名] -S [socket文件路径]

4. 常用指令

  • 连接本地mysql
    > mysql -u [用户名] -p

  • 查看mysql版本
    > mysql -V

  • 查看本地数据库
    mysql> SHOW DATAVASES;

  • 查看系统配置参数
    mysql> SHOW VARIABLES LIKE [xxx];

  • 退出mysql
    mysql> exit;

5. 自带的数据库

安装MySQL后,会发现它自带了下面四个数据库,这些数据库完全可以当成是普通的数据库,使用查询语句去获取其中的信息。

5.1 information_schema

提供了访问数据库元数据的方式。

注:元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。又称为“数据词 典”或“系统条目”。
主要的表有:

以下是主要的三个表:

  • SCHEMATA:提供了当前mysql实例中所有数据库的信息,SHOW DATABASES就是从这里读取数据的。
  • TABLES:提供了关于数据库中的表的信息(包括视图),包括表属于哪个schema(数据库),表引擎,类型(BASE TABLE | VIEW | SYSTEM VIEW),创建时间,备注等信息。
  • STATISTICS:提供了关于表索引的信息

5.2 mysql

mysql的核心库,我们的用户、密码、权限等相关信息都存储在这里。使用grant命令和直接对这个数据库的user表进行增删改查的作用是相等的。

查看用户权限:

mysql> use mysql
Database changed
mysql> SELECT host,user
    -> FROM user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | medi             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.19 sec)

mysql>

5.3 performance_schema

主要用于收集数据库服务器性能参数

5.4 sys

sys库是一个简单版的performance_schema


参考资料:

《MySQL技术内幕 InnoDB存储引擎》 -第2版 姜承尧著
https://www.cnblogs.com/jlonghe/p/13439391.html
https://kalacloud.com/blog/how-to-edit-mysql-configuration-file-my-cnf-ini/
https://cloud.tencent.com/developer/article/1453746

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值