笔者上周刚好有个面试,对方听到我说熟悉mysql,随后就来了一句,你使用的是什么版本的MSQL…
我知道是8.x,就凭着记忆说了个8.6
然后他说那你知道MySQL8.x和5.x的区别有哪些吗?
我是真说不上来…
那个面试给我的启发之一是:我们在使用一个技术/产品的时候应该关注多一些它的其他信息,比如版本以及该版本的新特性,选择使用该产品的理由等等…
在安装了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。
以下只列举其中比较重要的特性,详见MySQL官网
注:
Windows下mysql的配置文件默认名字为my.ini
Linux/Mac下默认为my.cnf
笔者博客的MySQL篇中相关操作基于Windows
默认位置:C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
配置内容:
回顾笔者在上一篇博客中提到的:
《MySQL技术内幕 InnoDB存储引擎》中提到:
连接MySQL操作是一个连接进程和MySQL数据库实例进行通信,从程序设计的角度来说,本质上是进程通信。即MySQL数据库提供的连接方式从本质上看就是进程通信方式。
注:如果对进程通信比较了解,可以知道常用的进程通信方式有管道、命名管道、命名字、TCP/IP套接字、UNIX域套接字
> 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实例。
MySQL默认是不启用命名管道连接方式,需要在配置文件中启用–enable-named-pipe选项。
在MySQL4.1之后的版本中,MySQL还提供了共享内存的连接方式,需要在配置文件中添加–shared-memory。除此之外,在连接时,MySQL客户端还必须适用–protocol=memory
用户可以在配置文件中指定套接字文件的路径,如–socket=/tmp/mysql.sock。
当数据库实例启动后,用户可以通过下列命令进行UNIX域套接字文件的查找:
mysql> SHOW VARIABLES LIKE 'socket';
在知道了UNIX域套接字文件的路径后,就可以适用该方式进行连接了:
mysql -u [用户名] -S [socket文件路径]
连接本地mysql
> mysql -u [用户名] -p
查看mysql版本
> mysql -V
查看本地数据库
mysql> SHOW DATAVASES;
查看系统配置参数
mysql> SHOW VARIABLES LIKE [xxx];
退出mysql
mysql> exit;
安装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>
主要用于收集数据库服务器性能参数
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