这一篇和上一篇有重合的内容,,我决定从头开始再学一下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,不用用户名密码就能直接登录
可以通过[客户端程序名]的形式为不同的客户端程序指定选项,例如[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为后缀的文件)
- 只会读取包含文件中当前客户端的组配置(例如当前运行的是mysql程序,那么只会读取[mysql]组中的选项配置)
在Windows中请确保在配置⽂件的最后⼀⾏加⼀个换⾏符,否则该⾏将被忽略
工具包中的其他程序
在命令行中使用MySQL发行版中的其他工具,一些选项是公共的,使用方法和mysql相同
这是一些公共选项:
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
这是一些选项:
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是逐行转储数据,所以不适用于大数据量的转储与导入
这样使用:
bash
mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases
如果在db_name后面没有指定任何的表名,或使用--databases或者--alldatabases选项,那么整个数据库都会被转储
mysqldump中有如下常用选项,可以在命令行中指定,也可以在选项文件中通过[mysqldump]和[client]组进行指定
可以这样使用:
bash
mysqldump test_db > /root/dump.sql -uroot -p
相当于打了个包
mysqladmin
mysqladmin是一个MySQL服务器管理程序,可以用来检查服务器的配置和当前状态,以及创建和删除数据库...
bash
mysqladmin [options] command [command-arg] [command [command-arg]] ...
这是mysqladmin的常用命令:
version(显示来自服务器的版本信息)
bash
mysqladmin version -uroot -p
查看来自服务器的版本信息:
bash
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
-
drop db_name :删除名为 db_name 的数据库及其所有表
-
extended-status:显⽰服务器状态变量的值
-
flush-hosts :刷新主机缓存中的所有信息
-
flush-logs [log_type ...] :刷新所有⽇志
7.log_type :中可以提供以下⼀种或多种⽇志类型binary,engine,error,general,relay,slow,多个类型之间⽤空格分隔
-
flush-privileges :重新加载授权表
-
flush-status :清除状态变量
-
flush-tables :刷新所有表
-
flush-threads :刷新线程缓存
-
password new_password : 设置新密码
• 如果密码中有空格必须⽤双引号把密码包裹起来
• password 后可以省略新密码,mysqladmin会在之后提⽰输⼊新密码
• password 做为最后⼀个command时才可以省略密码值,否则下⼀个参数将作为密码被设置
Warning有可能存在安全问题
-
ping :检查服务器是否可⽤
-
processlist :显⽰活动服务器线程的列表(默认MySQL服务器可以维护150个活动链接,如果链接被用完,可以kill手动结束休眠时间最长的那个线程)
-
kill id , id ,...:终⽌服务器线程。如果给出了多个线程ID值,则列表中不能有空格
-
reload :重新加载授权表
-
refresh : 刷新所有表
-
shutdown : 停⽌服务器
-
start-replica : 在副本服务器上开始复制,MySQL8.0.26及以后的版本使⽤此命令
-
start-slave : 在副本服务器上开始复制,MySQL8.0.26之前使⽤此命令
-
status : 显⽰简短的服务器状态消息
-
stop-replica : 停⽌副本服务器上的复制,MySQL8.0.26及以后的版本使⽤此命令
-
stop-slave : 停⽌副本服务器上的复制,MySQL8.0.26之前使⽤此命令
-
variables : 显⽰服务器系统变量及其值
看看就得了,记不下来的
荷叶饭你怎么看
mysqlshow
mysqlshow客户端可用于快速查看存在哪些数据库,数据库的表以及表中的列或者索引
具体的操作可以参考一下官方给出的操作文档:
和公共选项也差不多
可以使用这样的语法:
bash
mysqlshow [options] [db_name [tbl_name [col_name]]]
db_name tbl_name col_name可以使用通配符*、?、%或_
如果没有指定数据库,则显示所有数据库名称列表
如果没有指定表,则显示数据库中所有匹配的表
如果没有指定列,则显示表中所有匹配的列和列类型
输出仅显示当前权限可以访问的数据库、表或者列的名称
bash
mysqlshow test_db -uroot -p
bash
mysqlshow test_db student -uroot -p
bash
mysqlshow test_db student id -uroot -p
mysqldumpslow
在使用MySQL数据库的时候,我们经常进行查询操作,有些查询语句执行的时间非常长,当执行时间超过设定的 阈值的时候,我们称这个查询为慢查询,慢查询的相关信息通常需要用日志记录下来(慢查询日志),mysqldumpslow可以解析慢查询日志文件并汇总其内容
通常情况下,mysqldumpslow会将相似的查询分组并显示摘要输出,一般会把数字和字符串用N和S代替,想要显示真实的值可以使用-a和-n选项
bash
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服务器的客户端负载,并报告每个阶段的时间,就好比多个客户端正在访问服务器一样,,,
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
这是让mysqlslap用包含两个INT列和三个VARCHAR列的自动构建查询的SQL语句,使用五个客户端,每个客户端查询20次
bash
mysqlslap --concurrency=5 --iterations=20 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql
这是从指定的文件(但是我还没有这文件,只是展示一下写法)中加载创建、插入和查询SQL语句,SQL文件中的语句以;分割,使用五个客户端,每个客户端查询5次:
sql
mysqlslap --concurrency=5 --iterations=5 --query=query.sql --create=create.sql --delimiter=";"
常用选项: