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

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

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

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

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

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程序有许多选项可以在启动时指定。运行以下命令查看完整的选项列表:

root@guangchen-vm:~# mysqld --verbose --help

mysql客户端怎么学呢?

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

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

# 连接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.选项以单破折号“-”或双破折号“--”开头。-表示短格式,--表示长格式就比如这两句是一样的:

mysql -?
mysql --help

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

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

mysql -h 127.0.0.1
msyql --host=127.0.0.1

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

--host=127.0.0.1
-h127.0.0.1
-h 127.0.0.1

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

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秒:

mysqladmin --count=1K --sleep=3 ping -uroot -p

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

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长这样:

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客户端导入

mysql < /root/test_db.sql -uroot -p
//路径是.sql文件的绝对路径

 

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

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

MySQL配置文件

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

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

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

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

# 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的安装⽬录

D:\Program Files\MySQL\MySQL Server 8.0

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

C:\Users\Lenovo>echo %APPDATA%
# 以下是结果
C:\Users\Lenovo\AppData\Roaming

DATADIR 代表MySQL数据⽬录 

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程序时在命令行上指定的任何长选项都可以在选项文件中指定,要获取选项列表可以用如下命令:

mysql --help

mysqld --verbose --help

 

一堆,,,刷屏都截不完

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

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

#comment     ;comment

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

[ group ]设置选项的程序或组的名称,不区分⼤⼩写。如果选项组名称与程序名称相同,则组中的选项专⻔应⽤于该程序,例如, [mysqld] 和 [mysql] 组分别适⽤于mysqld服务端程序和mysql客⼾端程序

opt_name 相当于命令⾏上的选项名

opt_name = value 选项名对应的值,可以使⽤转义序列 \b ,\t ,\n ,\r , \\ 和\s 来表⽰退格符、制表 符、换⾏符、回⻋符、反斜杠和空格字符

tips:

1.选项名称和值的前导和尾随空格会自动删除

2.在Windows系统中设置路径应该使用转义字符

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]写入公共配置:

[client]
host=127.0.0.1
port=3306
user=root
password=123456

然后直接运行mysql,不用用户名密码就能直接登录

 

 可以通过[客户端程序名]的形式为不同的客户端程序指定选项,例如[mysql],当运行mysql程序时会读取并应用该组下的配置

[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相同

这是一些公共选项:

 

mysqlcheck 

mysqlcheck客户端用于执行表维护,可对表进行分析检查优化或者修复操作

分析:查看表的关键字分布,能让sql生成正确的执行计划(InnoDB,MyISAM,NDB)

检查:检查表的完整性以及数据库表和索引是否损坏(InnoDB,MyISAM,ARCHIVE,CSV)

优化:回收空间、减少碎片、提高IO(InnoDB,MyISAM,ARCHIVE)

修复:修复可能已经损坏的表(MyISAM,ARCHIVE,CSV)

当使用mysqlcheck工具时,MySQL服务器必须在运行状态

执行过程中相应的表会被锁定,其他的操作将会被挂起

如果遇到不支持的引擎会报错

在执行表修复的操作之前对表进行备份(有些情况下数据会丢失)

来试试查一下这个数据库:

mysqlcheck -a test_db -uroot -p

 

这是一些选项:

tips:修复不支持InnoDB存储引擎,如果要修复InnoDB存储引擎的数据,就要InnoDB存储引擎的表转换成MyISAM存储引擎

 InnoDB在优化的过程中,执行了重建的操作,不建议经常(一小时,一天,大多数一个月优化一次就可以了)执行优化操作

mysqlcheck程序的默认功能是对数据表进行检查操作(相当于指定选项--check),如果想要对表进行修复操作,可以通过复制原来的mysqlcheck程序,重命名为mysqlrepair,并运行它:

 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是逐行转储数据,所以不适用于大数据量的转储与导入

 这样使用:

mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases

如果在db_name后面没有指定任何的表名,或使用--databases或者--alldatabases选项,那么整个数据库都会被转储

mysqldump中有如下常用选项,可以在命令行中指定,也可以在选项文件中通过[mysqldump]和[client]组进行指定

 

 

可以这样使用:

mysqldump  test_db > /root/dump.sql -uroot -p

 相当于打了个包

 mysqladmin

mysqladmin是一个MySQL服务器管理程序,可以用来检查服务器的配置和当前状态,以及创建和删除数据库...

mysqladmin [options] command [command-arg] [command [command-arg]] ...

这是mysqladmin的常用命令:

 version(显示来自服务器的版本信息)

mysqladmin version -uroot -p

 查看来自服务器的版本信息:

mysqladmin status -uroot -p

 

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有可能存在安全问题 

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.htmlicon-default.png?t=O83Ahttps://dev.mysql.com/doc/refman/8.0/en/mysqlshow.html

和公共选项也差不多

可以使用这样的语法:

mysqlshow [options] [db_name [tbl_name [col_name]]]

 db_name tbl_name col_name可以使用通配符*、?、%或_

如果没有指定数据库,则显示所有数据库名称列表

如果没有指定表,则显示数据库中所有匹配的表

如果没有指定列,则显示表中所有匹配的列和列类型

输出仅显示当前权限可以访问的数据库、表或者列的名称

mysqlshow test_db -uroot -p 

 

mysqlshow test_db student -uroot -p

 

mysqlshow test_db student id -uroot -p

 

mysqldumpslow

在使用MySQL数据库的时候,我们经常进行查询操作,有些查询语句执行的时间非常长,当执行时间超过设定的 阈值的时候,我们称这个查询为慢查询,慢查询的相关信息通常需要用日志记录下来(慢查询日志),mysqldumpslow可以解析慢查询日志文件并汇总其内容

通常情况下,mysqldumpslow会将相似的查询分组并显示摘要输出,一般会把数字和字符串用N和S代替,想要显示真实的值可以使用-a和-n选项

mysqldumpslow [options] [log_file ...]

 常用选项:

这个主要用于优化SQL语句 (因为是慢查询日志)

-s sort_type sort_type可选值:

t,at:按查询时间或平均查询时间排序,默认排序

l,al:按锁占用时间或平均锁占用时间排序

r,ar:按发送的行数或平均发送的行数排序

c:按计数排序

mysqlbinlog

mysqlbinlog可以处理二进制日志文件

什么是二进制文件捏?

我们平时对数据库的修改(增删改),都会被描述成一个事件,每一个事件都会以二进制的形式记录在一个文件里,这个文件就是服务器的二进制文件(Binary Log或binlog)

主要在主从复制的场景里使用,大概就是写入主节点(修改数据时都会把对应的事件记录在binlog里),从节点读取主节点的binlog,解析后执行对应的SQL

mysqlbinlog可以以文本形式显示二进制日志文件中的内容

binlog的默认保存路径是数据目录:

Linux下默认目录:/var/lib/mysql

Windows下默认目录:C:\ProgramData\MySQL\MySQL Server 8.0\Data

这都是二进制日志文件: 

 

这是一些常用的选项:

 

 

--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服务器的客户端负载,并报告每个阶段的时间,就好比多个客户端正在访问服务器一样,,,

mysqlslap [options]

可以通过--create或--query选项,指定包含SQL语句的字符串或包含SQL语句的文件

如果指定一个包含SQL语句的文件,默认情况下每行必须包含一条语句(隐式语句分隔符是换行符)

如果要把一条语句分为多行书写,可以使用--delimiter选项指定不同的分隔符

不能在文件中包含注释,因为mysqlslap不能解析注释

mysqlslap运行分为三个阶段:

创建测试数据阶段:创建用于测试的库、表或数据,这个阶段使用单个客户端链接

运行负载测试阶段:可使用许多客户端链接

清理阶段:执行删除表,断开链接等操作,这个解读那使用单个客户端链接

 这是自定义创建查询语句,创建五十个客户端链接,每个客户端进行两百次select查询(在一行内输入命令):

mysqlslap --delimiter=";" --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23);" --query="SELECT * FROM a" --concurrency=50 --iterations=200

这是让mysqlslap用包含两个INT列和三个VARCHAR列的自动构建查询的SQL语句,使用五个客户端,每个客户端查询20次

mysqlslap --concurrency=5 --iterations=20 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql

 

这是从指定的文件(但是我还没有这文件,只是展示一下写法)中加载创建、插入和查询SQL语句,SQL文件中的语句以;分割,使用五个客户端,每个客户端查询5次: 

mysqlslap --concurrency=5 --iterations=5 --query=query.sql --create=create.sql --delimiter=";"

常用选项: 

 

 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部