MySQL程序特别酷

这一篇和上一篇有重合的内容,,我决定从头开始再学一下MySQL,和上一篇的区别是写的更细了,以及写这篇的时候Linux已经学完了

下面就是关于MySQL很多程序的介绍:

MySQL安装完成通常会包含如下程序:

Linux系统程序一般在/usr/bin目录下,可以通过命令查看:

Windows系统目录也可以查看(如果安装过MySQL的话):

bash 复制代码
PS D:\Program Files\MySQL\MySQL Server 8.0\bin> dir *.exe

每一个MySQL程序都有许多不同的选项,大多数程序都提供一个--help选项,可以使用这个选项来获取程序不同选项的描述

mysql是客户端程序

mysqld是服务端程序

这乱七八糟的东西(常用的 MySQL程序)可以用,,,一张表来描述一下:

mysqld是服务端程序,mysql是客户端程序,上面那个表除了mysqld都是客户端程序

搞怪裤太裤了

mysqld也被称为MySQL服务器,是⼀个多线程程序,对数据目录(可以理解为mysql的主要工作目录)进行访问管理(包含数据库和表)。数据目录也是其他信息(如日志文件和状态文件)的默认存储位置。

当MySQL服务器启动时,会侦听指定的端⼝、处理来⾃客⼾端程序的网络连接,并管理不同客户端对数据库的访问

mysqld程序有许多选项可以在启动时指定。运行以下命令查看完整的选项列表:

cpp 复制代码
root@guangchen-vm:~# mysqld --verbose --help

mysql客户端怎么学呢?

mysql是⼀个简单的SQLshell,可以输入命令和执行SQL语句,当执行SQL语句时,查询结果以ASCII表格式显示

mysql的基本使用还是比较简单的,,:

cpp 复制代码
# 连接MySQL服务器,⻓选项格式
mysql --user=user_name --password [db_name]
# 短选项格式
mysql -uuser_name -p [db_name]
# 输⼊密码
Enter password: your_password

mysql有指定选项的方式:

1.在mysql后⾯的命令行中列出选项

2.在mysql后⾯指定配置⽂件的路径以便在程序启动时读取配置⽂件中的选项

(读取并解析对应程序选项的值,并应用在启动参数中)

3.使⽤环境变量中的选项

特别裤

MySQL客户端命令

这是对应的选项

在命令行中指定选项遵循原则:

1.选项在程序名之后给出

2.选项以单破折号"-"或双破折号"--"开头。-表示短格式,--表示长格式就比如这两句是一样的:

bash 复制代码
mysql -?
mysql --help

3.选项名区分大小写(-v和-V都是合法的,但是意义不同,分别是--verbose和--version选项的相应缩写形式)

4.有些选项需要在后面指定一个值,例如指定主机:

bash 复制代码
mysql -h 127.0.0.1
msyql --host=127.0.0.1

5.对于带值的长格式选项,通常用=符号分割选项名和值,对于带值的短选项,选项值可以紧跟在选项只有也可以用空格隔开,这三个是等价的:

bash 复制代码
--host=127.0.0.1
-h127.0.0.1
-h 127.0.0.1

但如果要指定密码,选项和值之间就不能有空格:

bash 复制代码
mysql -ptest # test表⽰密码,但没有指定要访问的数据库
mysql -p test # test 表⽰指定了访问的数据库,但没有指定密码

tips:在命令⾏中,第⼀个不带破折号 - 的值被解析为要访问的数据库名,所以 --database 选项⼀ 般可以省略

在选项的名称中,-和_大多数情况下可以互换使用,但前导破折号不能转为_,例如:--skip-grant-tables和--skip_grant_tables是等价的

对于采⽤数值的选项,该值可以带有后缀 K ,M 或 G 以指⽰乘数1024、1024^2或1024^3,例如,以下命令告诉mysqladmin对服务器执⾏1024次ping,每次ping之间休眠3秒:

bash 复制代码
mysqladmin --count=1K --sleep=3 ping -uroot -p

在命令行中包含空格的选项值必须用""引起,例如,--execute(-e)选项与mysql一起使用时,表示将一个或多个SQL语句发送给服务器并显示结果:

bash 复制代码
mysql -u root -p -e "SELECT VERSION();SELECT NOW();"

这是一些格式上的区别

tips:如果选项的值中包含空格,那么值需要包含在双引号中

在命令行中使用选项时,选项应该在程序名之后给出,以单破折号或双破折号开头,-表示短格式,--表示长格式

这是一些MySQL命令:

\r是重新链接服务器,会有链接的次数

\s是查看当前服务器的状态

delimiter(\d)是一个重新指定SQL语句结束标识符的命令

quit(\q)都是退出MySQL客户端(没什么好说的)

tee(\T)也是一条命令,可以把所有结果保存到一个指定的文件中

/root目录下回生成一个指定的文件

如果要禁用(执行结果不再写入文件),那就采用notee(\t)呃呃呃

其他的命令可以用help查询:

用help contents命令可以查看关于MySQL数据库的使用帮助,包括用户管理,SQL语法,数据类型,组件等相关内容列表

可以通过help contents中的具体条目查看介绍:

继续输入help具体的条目可以查看关于此条目的详细说明:

source(\.)是加载并执行指定的.sql脚本

system(\!)就像是:

执行系统命令(比较危险容易被做手脚)

这个W和w是设置警告显示的:

如图所示

.sql文件执行SQL语句

为什么有的时候需要从.sql文件中执行一些SQL语句呢?

在这样的情况下适用:有时候我们需要从.sql文件执行一些SQL语句,比如要把一个数据库从一台服务器A复制到另一台服务器B上,那么可以先从服务器A导出数据到.sql文件,然后在服务器B上执行这个.sql文件(需要对应的权限)

也可以使用MySQL客户端直接导入

下面来演示一下source命令的使用方法!

1.准备要执行的.sql文件,我的test_db.sql长这样:

cpp 复制代码
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP DATABASE IF EXISTS `test_db`;
CREATE DATABASE `test_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `test_db`;
-- ----------------------------
-- Table structure for classes
-- ----------------------------
DROP TABLE IF EXISTS `classes`;
CREATE TABLE `classes` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL 
DEFAULT NULL,
 `desc` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL 
DEFAULT NULL,
 PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = 
utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of classes
-- ----------------------------
INSERT INTO `classes` VALUES (1, '计算机系2023级1班', '学习了计算机原理、C和Java语⾔、数据结构和算法');
INSERT INTO `classes` VALUES (2, '中⽂系2023级3班', '学习了中国传统⽂学');
INSERT INTO `classes` VALUES (3, '光电2023级2班', '学习了概率论与数理统计');
-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL 
DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = 
utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (1, 'Java');
INSERT INTO `course` VALUES (2, '中国传统⽂化');
INSERT INTO `course` VALUES (3, '计算机原理');
INSERT INTO `course` VALUES (4, '语⽂');
INSERT INTO `course` VALUES (5, '⾼阶数学');
INSERT INTO `course` VALUES (6, '英⽂');
-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
 `score` decimal(3, 1) NULL DEFAULT NULL,
 `student_id` int(11) NULL DEFAULT NULL,
 `course_id` int(11) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci 
ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (70.5, 1, 1);
INSERT INTO `score` VALUES (98.5, 1, 3);
INSERT INTO `score` VALUES (33.0, 1, 5);
INSERT INTO `score` VALUES (98.0, 1, 6);
INSERT INTO `score` VALUES (60.0, 2, 1);
INSERT INTO `score` VALUES (59.5, 2, 5);
INSERT INTO `score` VALUES (33.0, 3, 1);
INSERT INTO `score` VALUES (68.0, 3, 3);
INSERT INTO `score` VALUES (99.0, 3, 5);
INSERT INTO `score` VALUES (67.0, 4, 1);
INSERT INTO `score` VALUES (23.0, 4, 3);
INSERT INTO `score` VALUES (56.0, 4, 5);
INSERT INTO `score` VALUES (72.0, 4, 6);
INSERT INTO `score` VALUES (81.0, 5, 1);
INSERT INTO `score` VALUES (37.0, 5, 5);
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
 `id` int(11) PRIMARY KEY AUTO_INCREMENT,
 `sn` int(11) NOT NULL COMMENT '学号',
 `name` varchar(20) NOT NULL COMMENT '姓名',
 `mail` varchar(20) COMMENT 'QQ邮箱'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci 
ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, 50001, '张三', 'zs@qq.com');
INSERT INTO `student` VALUES (2, 50002, '李四', 'ls@qq.com');
INSERT INTO `student` VALUES (3, 50003, '王五', 'ww@qq.com');
INSERT INTO `student` VALUES (4, 50004, '赵六', 'zl@qq.com');
INSERT INTO `student` VALUES (5, 50005, '钱七', 'qq@qq.com');
SET FOREIGN_KEY_CHECKS = 1;

2.用source命令执行.sql文件的SQL语句(要是绝对路径)

3.查看数据库并查询数据验证导入是否成功

成功哩:

除了上面这种方式,也可以使用mysql客户端导入

cpp 复制代码
mysql < /root/test_db.sql -uroot -p
//路径是.sql文件的绝对路径

可以根据实际的需要选择导入.sql的方式

使用环境:开发-->测试-->生产

MySQL配置文件

⼤多数MySQL程序都可以从选项⽂件(配置⽂件)中读取启动选项。可以在选项⽂件中指定常⽤选项,这样就不⽤在每次运⾏程序时都在命令⾏中输⼊它们。⼤部分选项⽂件都是纯⽂本格式,可以使⽤任何⽂本编辑器创建

如果在使用MySQL的程序时没有指定配置文件的路径,那就会自动读取默认路径下的配置文件

MySQL按一下表格中的顺序查找并读取选项文件,如果文件不存在就粗腰手动创建,读取顺序从上到下,后读取的文件配置的选项优先级更高

选项--defaults-file 可以指定要使⽤的选项⽂件,客⼾端程序会读取并应⽤选项⽂件中的相关配置

bash 复制代码
# Linux
mysql --defaults-file=/etc/mysql/my.cnf -uroot -p
# windows下
mysql "--defaults-file=C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" -uroot -p

MySQL按以下表格中的顺序查找并读取选项⽂件

如果⽂件不存在则需要⼿动创建。

读取顺序从上到下,后读取的⽂件中配置的选项优先级越⾼

在Windows系统可以读取选项文件

%WINDIR% 表示Windows目录的位置,可以通过命令查看

BASEDIR 表⽰MySQL的安装⽬录

cpp 复制代码
D:\Program Files\MySQL\MySQL Server 8.0

%APPDATA% 表⽰应⽤程序数据的⽬录

bash 复制代码
C:\Users\Lenovo>echo %APPDATA%
# 以下是结果
C:\Users\Lenovo\AppData\Roaming

DATADIR 代表MySQL数据⽬录

cpp 复制代码
C:\ProgramData\MySQL\MySQL Server 8.0

在Unix和Linux系统上读取的选项文件:

~表示当前用户的主目录

MYSQL_HOME是设置的环境变量路径

DATADIR代表MySQL的数据目录

mysqld-auto.cnf的优先级最⾼For the server,one exception applies: The mysqld-auto.cnf option file in the data directory is processed last, so it takes precedence even over command -line options

运行MySQL程序时在命令行上指定的任何长选项都可以在选项文件中指定,要获取选项列表可以用如下命令:

bash 复制代码
mysql --help
bash 复制代码
mysqld --verbose --help

一堆,,,刷屏都截不完

选项文件中指定选项时,省略两个前导破折号,并且每一行表示一个选项

选项文件中的空行会被忽略,非空行可以采用以下形式:

#comment ;comment

注释⾏以 # 或 ; 开,注释可以从⼀⾏的中间开始

group \]设置选项的程序或组的名称,不区分⼤⼩写。如果选项组名称与程序名称相同,则组中的选项专⻔应⽤于该程序,例如, \[mysqld\] 和 \[mysql\] 组分别适⽤于mysqld服务端程序和mysql客⼾端程序 opt_name 相当于命令⾏上的选项名 opt_name = value 选项名对应的值,可以使⽤转义序列 \\b ,\\t ,\\n ,\\r , \\\\ 和\\s 来表⽰退格符、制表 符、换⾏符、回⻋符、反斜杠和空格字符 > tips: > > 1.选项名称和值的前导和尾随空格会自动删除 > > 2.在Windows系统中设置路径应该使用转义字符 ```cpp basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0" # 或 basedir="C:/Program Files/MySQL/MySQL Server 8.0" ``` \[client\]MySQL发行版中所有的客户端程序都会读取并应用这个组下的选项(除了mysqld),在这个组下可以指定适用于所有客户端程序的通用选项(配置用户名和密码,但要确保只有自己才可以访问这个文件以防密码泄漏) 可以这样配置mysql的免密登录: 在当前用户的home目录下创建.my.cnf,并在\[client\]写入公共配置: ```cpp [client] host=127.0.0.1 port=3306 user=root password=123456 ``` 然后直接运行mysql,不用用户名密码就能直接登录 ![](https://i-blog.csdnimg.cn/direct/b49039cc34a2484597e97fa5a7cb8af6.png) 可以通过\[客户端程序名\]的形式为不同的客户端程序指定选项,例如\[mysql\],当运行mysql程序时会读取并应用该组下的配置 ```cpp [client] host=127.0.0.1 port=3306 user=root password=123456 # 设置为必须输⼊密码 [mysql] password root@guangchen-vm:~# mysql Enter password: # 强制要求登录时输⼊密码 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 8.0.34 MySQL Community Server - GPL Copyright (c) 2000, 2023, 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版本设置选项可以使用\[mysqld-5.7\]、\[mysqld-8.0\]的组名 在选项文件中使用!include指令来包含其他选项文件,例如:!include /home/mydir/myopt.cnf 在选项文件中使用!includedir指令来搜索指定目录中的其他选项文件(但不保证目录中选项文件的读取顺序) tips: 1.!includedir在Unix和Linux操作系统中会搜索指定目录下任何以.cnf为后缀的文件(在Windows中会搜索指定目录下任何以.ini或.cnf为后缀的文件) 2. 只会读取包含文件中当前客户端的组配置(例如当前运行的是mysql程序,那么只会读取\[mysql\]组中的选项配置) 在Windows中请确保在配置⽂件的最后⼀⾏加⼀个换⾏符,否则该⾏将被忽略 #### 工具包中的其他程序 在命令行中使用MySQL发行版中的其他工具,一些选项是公共的,使用方法和mysql相同 这是一些公共选项: ![](https://i-blog.csdnimg.cn/direct/646388cc912145a5a5952c67113bd816.png) ![](https://i-blog.csdnimg.cn/direct/d4a1f1a88c4343dd97a926d395abccab.png) ##### mysqlcheck mysqlcheck客户端用于执行表维护,可对表进行分析检查优化或者修复操作 > 分析:查看表的关键字分布,能让sql生成正确的执行计划(InnoDB,MyISAM,NDB) > > 检查:检查表的完整性以及数据库表和索引是否损坏(InnoDB,MyISAM,ARCHIVE,CSV) > > 优化:回收空间、减少碎片、提高IO(InnoDB,MyISAM,ARCHIVE) > > 修复:修复可能已经损坏的表(MyISAM,ARCHIVE,CSV) 当使用mysqlcheck工具时,MySQL服务器必须在运行状态 执行过程中相应的表会被锁定,其他的操作将会被挂起 如果遇到不支持的引擎会报错 在执行表修复的操作之前对表进行备份(有些情况下数据会丢失) 来试试查一下这个数据库: ```bash mysqlcheck -a test_db -uroot -p ``` ![](https://i-blog.csdnimg.cn/direct/6cbf6cabbb614894b99dba6d91ee8cba.png) 这是一些选项: ![](https://i-blog.csdnimg.cn/direct/ac656aed3e5b49dd9218d091257c6757.png) **tips:修复不支持InnoDB存储引擎,如果要修复InnoDB存储引擎的数据,就要InnoDB存储引擎的表转换成MyISAM存储引擎** InnoDB在优化的过程中,执行了重建的操作,不建议经常(一小时,一天,大多数一个月优化一次就可以了)执行优化操作 mysqlcheck程序的默认功能是对数据表进行检查操作(相当于指定选项--check),如果想要对表进行修复操作,可以通过复制原来的mysqlcheck程序,重命名为mysqlrepair,并运行它: ![](https://i-blog.csdnimg.cn/direct/357016d7957244dba0bc6698cba4fb0d.png) ##### mysqldump 作用:mysqldump客户端程序可以执行逻辑备份并生成一组SQL语句,包含原始数据库和表的定义以及表中的数据,以便实现对数据库的简单备份或复制(mysqldump命令可以生成CSV、XML格式的文件) > tips: > > 1.转储表的时候必须要有SELECT权限 > > 2.转储视图时必须要有SHOW VIEW权限 > > 3.转储触发器时必须要有TRIGGER权限 > > 4.如果没有--single-transaction选项时必须要有LOCK TABLES权限 > > 5.如果没有--no-tablespaces选项时必须要有PROCESS权限 > > 6.重新导入转储文件时也要有相应的权限 > > 7.由于mysqldump是逐行转储数据,所以不适用于大数据量的转储与导入 这样使用: ```bash mysqldump [options] db_name [tbl_name ...] mysqldump [options] --databases db_name ... mysqldump [options] --all-databases ``` 如果在db_name后面没有指定任何的表名,或使用--databases或者--alldatabases选项,那么整个数据库都会被转储 mysqldump中有如下常用选项,可以在命令行中指定,也可以在选项文件中通过\[mysqldump\]和\[client\]组进行指定 ![](https://i-blog.csdnimg.cn/direct/97f3b5d705c546b1b5971edf45f82efb.png) ![](https://i-blog.csdnimg.cn/direct/7985bf7a992d46efae32d2c467f4f03f.png) 可以这样使用: ```bash mysqldump test_db > /root/dump.sql -uroot -p ``` 相当于打了个包 ![](https://i-blog.csdnimg.cn/direct/62e545b23ed44800821f5e7fa954eb1d.png) ##### mysqladmin mysqladmin是一个MySQL服务器管理程序,可以用来检查服务器的配置和当前状态,以及创建和删除数据库... ```bash mysqladmin [options] command [command-arg] [command [command-arg]] ... ``` 这是mysqladmin的常用命令: version(显示来自服务器的版本信息) ```bash mysqladmin version -uroot -p ``` ![](https://i-blog.csdnimg.cn/direct/ad36bb01b58f4b599cfa91beb0f5395f.png) 查看来自服务器的版本信息: ```bash mysqladmin status -uroot -p ``` ![](https://i-blog.csdnimg.cn/direct/09da392c5234424d899be7038471a505.png) > Uptime:MySQL服务器已经运行的秒数 > > Threads:活动线程(客户端)的数量 > > Questions:自服务器启动以来客户端的问题(查询)数 > > Slow queries:慢SQL的查询数 > > Opens:服务器已经打开的表数 > > Flush tables:服务器已经执行flush-\*、refresh和reload命令的数量 > > Open tables当前打开的表数 2.create db_name :创建⼀个数据库名为db_name 3. drop db_name :删除名为 db_name 的数据库及其所有表 4. extended-status:显⽰服务器状态变量的值 5. flush-hosts :刷新主机缓存中的所有信息 6. flush-logs \[log_type ...\] :刷新所有⽇志 7.log_type :中可以提供以下⼀种或多种⽇志类型binary,engine,error,general,relay,slow,多个类型之间⽤空格分隔 7. flush-privileges :重新加载授权表 8. flush-status :清除状态变量 9. flush-tables :刷新所有表 10. flush-threads :刷新线程缓存 11. password new_password : 设置新密码 • 如果密码中有空格必须⽤双引号把密码包裹起来 • password 后可以省略新密码,mysqladmin会在之后提⽰输⼊新密码 • password 做为最后⼀个command时才可以省略密码值,否则下⼀个参数将作为密码被设置 Warning有可能存在安全问题 ![](https://i-blog.csdnimg.cn/direct/f1f544b2880b453f9097d5b36987823d.jpeg) 12. ping :检查服务器是否可⽤ 13. processlist :显⽰活动服务器线程的列表(默认MySQL服务器可以维护150个活动链接,如果链接被用完,可以kill手动结束休眠时间最长的那个线程) 14. kill id , id ,...:终⽌服务器线程。如果给出了多个线程ID值,则列表中不能有空格 15. reload :重新加载授权表 16. refresh : 刷新所有表 17. shutdown : 停⽌服务器 18. start-replica : 在副本服务器上开始复制,MySQL8.0.26及以后的版本使⽤此命令 19. start-slave : 在副本服务器上开始复制,MySQL8.0.26之前使⽤此命令 20. status : 显⽰简短的服务器状态消息 21. stop-replica : 停⽌副本服务器上的复制,MySQL8.0.26及以后的版本使⽤此命令 22. stop-slave : 停⽌副本服务器上的复制,MySQL8.0.26之前使⽤此命令 23. variables : 显⽰服务器系统变量及其值 看看就得了,记不下来的 荷叶饭你怎么看 ##### mysqlshow mysqlshow客户端可用于快速查看存在哪些数据库,数据库的表以及表中的列或者索引 具体的操作可以参考一下官方给出的操作文档: [https://dev.mysql.com/doc/refman/8.0/en/mysqlshow.html![icon-default.png?t=O83A](https://csdnimg.cn/release/blog_editor_html/release2.3.7/ckeditor/plugins/CsdnLink/icons/icon-default.png)https://dev.mysql.com/doc/refman/8.0/en/mysqlshow.html](https://dev.mysql.com/doc/refman/8.0/en/mysqlshow.html "https://dev.mysql.com/doc/refman/8.0/en/mysqlshow.html")![](https://i-blog.csdnimg.cn/direct/32ae9c11ed6f4270ae99f5e28af7d469.png) 和公共选项也差不多 可以使用这样的语法: ```bash mysqlshow [options] [db_name [tbl_name [col_name]]] ``` db_name tbl_name col_name可以使用通配符\*、?、%或_ 如果没有指定数据库,则显示所有数据库名称列表 如果没有指定表,则显示数据库中所有匹配的表 如果没有指定列,则显示表中所有匹配的列和列类型 输出仅显示当前权限可以访问的数据库、表或者列的名称 ```bash mysqlshow test_db -uroot -p ``` ![](https://i-blog.csdnimg.cn/direct/598e9f1f2c5e4bba8e7b15b519b2a634.png) ```bash mysqlshow test_db student -uroot -p ``` ![](https://i-blog.csdnimg.cn/direct/0f4ff83fd22a44729b4c72eba4e615d9.png) ```bash mysqlshow test_db student id -uroot -p ``` ![](https://i-blog.csdnimg.cn/direct/ba58294ff22d475cb8c840a6899b08d6.png) ##### mysqldumpslow 在使用MySQL数据库的时候,我们经常进行查询操作,有些查询语句执行的时间非常长,当执行时间超过设定的 阈值的时候,我们称这个查询为慢查询,慢查询的相关信息通常需要用日志记录下来(慢查询日志),mysqldumpslow可以解析慢查询日志文件并汇总其内容 通常情况下,mysqldumpslow会将相似的查询分组并显示摘要输出,一般会把数字和字符串用N和S代替,想要显示真实的值可以使用-a和-n选项 ```bash mysqldumpslow [options] [log_file ...] ``` 常用选项: ![](https://i-blog.csdnimg.cn/direct/dd818a4cc1324ce1b940367d89b9a5f2.png) 这个主要用于优化SQL语句 (因为是慢查询日志) -s sort_type sort_type可选值: > t,at:按查询时间或平均查询时间排序,默认排序 > > l,al:按锁占用时间或平均锁占用时间排序 > > r,ar:按发送的行数或平均发送的行数排序 > > c:按计数排序 ##### mysqlbinlog mysqlbinlog可以处理二进制日志文件 什么是二进制文件捏? 我们平时对数据库的修改(增删改),都会被描述成一个事件,每一个事件都会以二进制的形式记录在一个文件里,这个文件就是服务器的二进制文件(Binary Log或binlog) 主要在主从复制的场景里使用,大概就是写入主节点(修改数据时都会把对应的事件记录在binlog里),从节点读取主节点的binlog,解析后执行对应的SQL ![](https://i-blog.csdnimg.cn/direct/f1a869e8dce64290a9de14aa3dfd2eca.jpeg) mysqlbinlog可以以文本形式显示二进制日志文件中的内容 binlog的默认保存路径是数据目录: > Linux下默认目录:/var/lib/mysql > > Windows下默认目录:C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Data 这都是二进制日志文件: ![](https://i-blog.csdnimg.cn/direct/c32d7ea170b14bc7bf5b7c9d23588350.png) 这是一些常用的选项: ![](https://i-blog.csdnimg.cn/direct/a018e4bdee054410bad39d65b5338d74.png) ![](https://i-blog.csdnimg.cn/direct/4a7423e8e4ac4c25950e72464ab73694.png) --base64-output=value,value有这些允许的值(默认是AUTO): > 🐣 AUTO ("automatic")或 UNSPEC ("unspecified")在必要时⾃动显⽰BINLOG语句 > > 如果使⽤mysqlbinlog重新执行⼆进制⽇志⽂件内容,那么使⽤ AUTO 选项是唯⼀安全的⾏为,其他选项值仅⽤于调试或测试,如果 --base64-output 没有指定,那么默认值是 AUTO 🐣 NEVER 不显示BINLOG语句 > > 🐣 DECODE-ROWS 不显示加密内容,可以配合mysqlbinlog的 -verbose 选项以注释的形式只显⽰事件的SQL语句 ##### mysqlslap mysqlslap是一个诊断程序,用于模拟MySQL服务器的客户端负载,并报告每个阶段的时间,就好比多个客户端正在访问服务器一样,,, ```cpp mysqlslap [options] ``` 可以通过--create或--query选项,指定包含SQL语句的字符串或包含SQL语句的文件 如果指定一个包含SQL语句的文件,默认情况下每行必须包含一条语句(隐式语句分隔符是换行符) 如果要把一条语句分为多行书写,可以使用--delimiter选项指定不同的分隔符 不能在文件中包含注释,因为mysqlslap不能解析注释 > mysqlslap运行分为三个阶段: > > 🐣创建测试数据阶段:创建用于测试的库、表或数据,这个阶段使用单个客户端链接 > > 🐥 运行负载测试阶段:可使用许多客户端链接 > > 🐤清理阶段:执行删除表,断开链接等操作,这个解读那使用单个客户端链接 这是自定义创建查询语句,创建五十个客户端链接,每个客户端进行两百次select查询(在一行内输入命令): ```cpp mysqlslap --delimiter=";" --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23);" --query="SELECT * FROM a" --concurrency=50 --iterations=200 ``` ![](https://i-blog.csdnimg.cn/direct/3d275fffdec24f8f89b39695c6109b7b.png) 这是让mysqlslap用包含两个INT列和三个VARCHAR列的自动构建查询的SQL语句,使用五个客户端,每个客户端查询20次 ```bash mysqlslap --concurrency=5 --iterations=20 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql ``` ![](https://i-blog.csdnimg.cn/direct/03abded1b55d4fa5844edfa2da1c2502.png) 这是从指定的文件(但是我还没有这文件,只是展示一下写法)中加载创建、插入和查询SQL语句,SQL文件中的语句以;分割,使用五个客户端,每个客户端查询5次: ```sql mysqlslap --concurrency=5 --iterations=5 --query=query.sql --create=create.sql --delimiter=";" ``` 常用选项: ![](https://i-blog.csdnimg.cn/direct/c6f69b4c299e423e80590a26607e036e.png) ![](https://i-blog.csdnimg.cn/direct/4e08b8cc55ae4ec99758445ab590cc35.png) ![](https://i-blog.csdnimg.cn/direct/9a5ab7c7918a459e80c81886b786e0ed.png)

相关推荐
nongcunqq3 小时前
abap 操作 excel
java·数据库·excel
rain bye bye3 小时前
calibre LVS 跑不起来 就将setup 的LVS Option connect下的 connect all nets by name 打开。
服务器·数据库·lvs
冻咸鱼3 小时前
MySQL的配置
mysql·配置
阿里云大数据AI技术5 小时前
云栖实录|MaxCompute全新升级:AI时代的原生数据仓库
大数据·数据库·云原生
不剪发的Tony老师5 小时前
Valentina Studio:一款跨平台的数据库管理工具
数据库·sql
weixin_307779135 小时前
在 Microsoft Azure 上部署 ClickHouse 数据仓库:托管服务与自行部署的全面指南
开发语言·数据库·数据仓库·云计算·azure
六元七角八分5 小时前
pom.xml
xml·数据库
虚行6 小时前
Mysql 数据同步中间件 对比
数据库·mysql·中间件
奥尔特星云大使6 小时前
mysql读写分离中间件Atlas安装部署及使用
数据库·mysql·中间件·读写分离·atlas
牛马baby6 小时前
【mysql】in 用到索引了吗?
数据库·mysql·in