本文使用的版本是MySQL8,5.7可能会有所不同。
MySQL提供了一些重要的程序用来管理和操作数据库。这里会介绍一些常用的程序及其使用。对于MySQL程序的使用,可以查看官方帮助手册来学习。
MySQL :: MySQL 8.0 Reference Manual :: 6 MySQL Programs
程序存放位置
对于Linux,这些程序通常在 /usr/bin目录下
对于Windows,文件则是 安装MySQL目录下的bin中
程序概览
程序名 | 作用 |
---|---|
mysqld | MySQL的守护进程,d是daemon。 这个程序就代表着MySQL服务器,只有当它运行起来,MySQL才能提供服务。 |
mysql | MySQL客户端。通常用于交互或者批处理执行sql。 |
mysqlcheck | 检查、修复、分析和优化表。 |
mysqldump | 把MySQL的数据库转存成sql、文本或者xml文件。 |
mysqlimport | 把文本文件导入到数据库。 |
mysqladmin | MySQL的管理工具,用于创建、删除数据库,重新加载授权表,将表刷新到磁盘,重新打开日志文件,检查服务器状态等。 |
mysqlshow | 显示数据库、表、列和索引的客户端。 |
mysqldumpslow | 读取和汇总慢速查询日志。 |
mysqlbinlog | 从二进制日志中读取sql语句。可从崩溃中恢复数据 |
mysqlslap | 客户端负载工具,模拟多个客户端访问服务器,并报告每个阶段使用的时间。 |
程序的选项说明
由于下面的程序中都会使用到选项,这里对于选项做一个说明。只针对MySQL中的程序。
选项介绍
选项通常以一种预定义的格式出现,用户可以通过命令行或者程序接口来指定这些选项。选项可以包括开关选项(Boolean Options)和带值选项(Value Options)两种类型。
开关选项:开关选项是布尔类型的选项,通常用于打开或关闭某些功能。它们通常不需要额外的参数值,只需要指定是否启用即可。例如,-v 表示开启详细输出,--verbose 是它的长格式。
带值选项:带值选项需要一个额外的参数值来指定其设置。这些参数值可以是字符串、数字或其他类型的数据,用于配置程序的某些特性。例如,-o filename 表示指定输出文件名为 filename,--output=filename 是它的长格式。
长短格式
长格式和短格式是命令行选项的两种常见形式,用于向程序传递参数或设置选项。它们的作用相同,只是形式不同,适用于不同的使用场景。
长格式:长格式选项通常以两个短横线(--)开头,后跟选项的完整名称。例如,--host、--user、--password 等。长格式选项更具可读性,但在键盘上输入时可能较为繁琐。
短格式:短格式选项通常以单个短横线(-)开头,后跟选项的单个字符缩写。例如,-h、-u、-p 等。短格式选项通常更为紧凑,适合在命令行中快速输入,但可读性稍差。
长格式和短格式选项通常是可互换的,用户可以根据个人喜好或需求选择使用哪种形式。例如,--host=localhost 和 -h localhost 具有相同的效果,都用于指定连接到 MySQL 服务器的主机名为 localhost。但前导破折号不能转为下划线,例如: --skip-grant-tables 和 --skip_grant_tables 是等价的
带值长短格式
带值的长格式:选项通常使用等号(=)分隔选项名称和值,例如:--host=127.0.0.1
带值的短格式:选项可以有两种形式,选项值可以紧跟在选项后面,也可以用空格隔开,例如:-h127.0.0.1 和 -h 127.0.0.1 是等价的。
对于密码选项的短格式,如果要指定密码,选项与值之间不能有空格。
如果选项的值中包含空格,那么值需要包含在双引号中。
对于采用数值的选项,该值可以带有后缀 K , M 或 G 以指⽰乘数 1024、1024^2或 1024^3,例如,以下命令告诉 mysqladmin对服务器执⾏ 1024 次 ping,每次 ping 之间休眠 3 秒 mysqladmin --count=1K --sleep=3 ping -uroot -p
选项命令行
在命令行中使用很简单,格式如下:
MySQL程序名字 选项
选项配置文件
大多数 MySQL 程序都可以从选项文件(配置文件)中读取启动选项。可以在选项文件中指定常用选项,这样就不用在每次运行程序时都在命令行中输入它们。大部分选项文件都是纯⽂本格式,可以使用任何文本编辑器创建。
使用方法
选项 --defaults-file 可以用来指定客户端程序要使用的选项文件,客户端程序会读取并应用选项文件中的相关配置。这个选项允许用户将配置信息保存在一个独立的文件中,而不是通过命令行参数来指定每个配置项,这样可以更方便地管理和维护配置。
格式如下:
--defaults-file=path_to_file
其中,path_to_file 是指定的选项文件的路径和名称。
文件读取顺序
MySQL是按照下面表格的顺序查找并读取文件。读取顺序从上到下,越下面的文件优先级越高。也就是下面的选项值会把上面的选项值覆盖(如果有冲突的话)。
对于Windows
%WINDIR%:
%WINDIR% 是一个环境变量,它指示了 Windows 操作系统的安装目录,通常是 C:\Windows。
这个变量可以在命令行或脚本中使用,用于引用 Windows 系统目录的路径,而不必硬编码路径。
例如,%WINDIR%\System32 是指向 Windows 系统目录下的 System32 文件夹。BASEDIR:
BASEDIR 通常表示某个软件或应用程序的安装基准目录。
在 MySQL 中,BASEDIR 表示 MySQL 服务器的安装目录,例如 C:\Program Files\MySQL\MySQL Server\。
使用 BASEDIR 可以在不同的环境中轻松地指定 MySQL 安装目录,而不必硬编码路径。%APPDATA%:
%APPDATA% 也是一个环境变量,它指向当前用户的应用程序数据目录。
在 Windows 中,%APPDATA% 通常指向 C:\Users\<username>\AppData\Roaming 目录,其中 <username> 是当前登录用户的用户名。
这个目录用于存储应用程序的用户特定数据,例如配置文件、临时文件等。
对于Linux
~:表示当前用户的主目录。
MYSQL_HOME:是设置的环境变量路径,通常用于指向 MySQL 服务器的安装目录。
DATADIR:代表 MySQL 数据目录,即存储数据库文件的目录。
选项文件语法
当在命令行上指定MySQL程序时,任何长选项都可以在选项文件中指定。以下是选项文件的格式化规则:
- 选项文件中省略两个前导破折号,并且每一行表示一个选项。例如,--quick 和 --host=127.0.0.1 在选项文件中应表示为 quick 和 host=127.0.0.1。
- 空行会被忽略,非空行可以采用以下形式:#comment 或 ;comment。注释以 # 或 ; 开头,可以从一行的中间开始。
- [group] 表示设置选项的程序或组的名称,不区分大小写。如果选项组名称与程序名称相同,则组中的选项专门应用于该程序,例如,[mysqld] 和 [mysql] 组分别适用于 mysqld 服务端程序和 mysql 客户端程序。
- opt_name 相当于命令行上的选项名。
- opt_name = value 表示选项名对应的值,可以使用转义序列 \b, \t, \n, \r, \\ 和 \s 来表示退格符、制表符、换行符、回车符、反斜杠和空格字符。
内容大致如下
注意事项:
选项名称和值中的前导和尾随空格会自动删除。
在 Windows 系统中设置路径应该使用转义字符。
!include 指令可以包含其他选项文件,例如:!include /home/mydir/myopt.cnf。
!includedir 指令用来搜索指定目录中的其他选项文件,但不保证目录中选项文件的读取顺序。
只会读取包含文本中当前客户端的组配置,例如当前运行的是 mysql 程序,那么只会读取 [mysql] 组中的选项配置。
在 Windows 中请确保在配置文件的最后一行加一个换行符,否则该行将被忽略。
mysqld
mysqld也被称为MySQL服务器,是一个多线程程序,用来监听客户端的请求。mysqld收到请求后,可以执行相应的操作。
官方文档:MySQL :: MySQL 8.0 Reference Manual :: 6.3.1 mysqld — The MySQL Server
常用选项
后续更新
mysql
mysql是一个简单的SQL shell,可以输入命令和执行SQL语句。
官方文档:MySQL :: MySQL 8.0 Reference Manual :: 6.5.1 mysql — The MySQL Command-Line Client
常用选项
官方文档:MySQL :: MySQL 8.0 Reference Manual :: 6.5.1.1 mysql Client Options
选项是非常的多,下面将介绍一些比较常用的。
mysqladmin
mysqladmin是一个执行管理操作的客户端。可以用来检查服务器的配置和当前状态,以及创建和删除数据库等。
官方文档:MySQL :: MySQL 8.0 Reference Manual :: 6.5.2 mysqladmin — A MySQL Server Administration Program
注意事项
安全性:确保只有授权的用户可以访问mysqladmin。避免将mysqladmin暴露在公共网络中,以防止未经授权的访问。
权限:使用mysqladmin执行管理操作时,确保当前用户具有足够的权限来执行所需的操作,包括创建和删除数据库等敏感操作。
谨慎操作:在执行数据库创建、删除等操作时要谨慎,确认操作无误后再进行执行,以免造成不可逆的损失。
备份:在执行可能影响数据完整性的操作前,建议先进行数据库备份,以便在意外发生时能够恢复数据。
使用
mysqladmin [options] command [command-arg] [command [command-arg]] ...
command表示命令,有些命令后面需要跟上一个参数
常见命令
常见选项
mysqlcheck
mysqlcheck客户端用于执行表维护,可以对表进行以下操作:
分析:查看表的关键字分布,以便让 SQL 生成正确的执行计划(支持 InnoDB,MyISAM,NDB)。
检查:检查表的完整性以及数据库表和索引是否损坏(支持 InnoDB,MyISAM,ARCHIVE,CSV)。
优化:回收空间、减少碎片、提高I/O(支持 InnoDB,MyISAM,ARCHIVE)。
修复:修复可能已经损坏的表(支持 MyISAM,ARCHIVE,CSV)。
官方文档:MySQL :: MySQL 8.0 Reference Manual :: 6.5.3 mysqlcheck — A Table Maintenance Program
注意事项
- 当使用mysqlcheck工具时,MySQL服务器必须在运行状态。
- 执行过程中相应的表将会被锁定,导致其他操作挂起。
- 并非所有的存储引擎都支持mysqlcheck的操作,如果遇到不支持的引擎会报出相应的错误。
- 在执行表修复操作之前,对表进行备份是十分重要的,因为在某些情况下可能会导致数据丢失。
使用
通常可以通过以下三种方法使用mysqlcheck:
mysqlcheck [options] db_name [tbl_name ...]
mysqlcheck [options] --databases db_name ...
mysqlcheck [options] --all-databases
如果在 db_name 后没有指定任何表名,或者使用 --databases 或 --all-databases 选项,那么整个数据库都会被检查。
特殊使用
对于mysqlcheck的复制改名,可以简化选项操作
这里只是InnoDB不支持修复
常用选项
mysqldump
mysqldump 是一个用于逻辑备份 MySQL 数据库的客户端程序。它可以生成包含原始数据库和表的定义以及表中数据的 SQL 格式的备份文件。除了 SQL 格式外,mysqldump 还可以生成 CSV 格式或 XML 格式的备份文件。
官方文档:MySQL :: MySQL 8.0 Reference Manual :: 6.5.4 mysqldump — A Database Backup Program
注意事项
- 转储表时必须要有 SELECT 权限。
- 转储视图时必须要有 SHOW VIEW 权限。
- 转储触发器时必须要有 TRIGGER 权限。
- 如果没有使用 --single-transaction 选项时,必须要有 LOCK TABLES 权限。
- 如果没有使用 --no-tablespaces 选项时,必须要有 PROCESS 权限。
- 重新导入转储文件时,也需要有相应的权限。
- 由于mysqldump是逐行转储数据,所以不适用于大数据量的转储与导入。
使用
mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases
如果在 db_name 后没有指定任何表名,或者使⽤ --databases 或 --all-databases 选项,那么整个数据库都会被转储
常用选项
mysqlshow
mysqlshow是一个用于显示MySQL数据库、表和列的命令行工具。它提供了一种简单的方法来查看数据库服务器中可用的数据库、每个数据库中的表以及每个表中的列
官方文档:MySQL :: MySQL 8.0 Reference Manual :: 6.5.7 mysqlshow — Display Database, Table, and Column Information
使用
mysqlshow [options] [db_name [tbl_name [col_name]]]
当使用mysqlshow命令时,可以使用通配符 * 、 ? 、 % 或 _ 来匹配数据库、表和列的名称。具体规则如下:
- 如果没有指定数据库,则显示所有数据库名称列表。
- 如果没有指定表,则显示数据库中所有匹配的表。
- 如果没有指定列,则显示表中所有匹配的列和列类型。
- 输出仅显示当前权限可以访问的数据库、表或列的名称。
常用选项
与之前的差不多
mysqldumpslow
官方文档:MySQL :: MySQL 8.0 Reference Manual :: 6.6.10 mysqldumpslow — Summarize Slow Query Log Files
注意事项
通常情况下,mysqldumpslow会将相似的查询分组并显示摘要输出。一般会将数字和字符串用 N 和 "S" 代替。如果想要显示真实的值,可以使用 -a 和 -n 选项。
使用
mysqldumpslow [options] [log_file ...]
如果没有指定数据库,则显示数据库名称列表。
如果没有指定表,则显示数据库中所有匹配的表。
如果没有指定列,则显示表中所有匹配的列和列类型。
常用选项
mysqlbinlog
二进制日志文件是一种记录数据库修改操作的文件格式。对数据库的任何修改,如数据的增加、删除、修改等,都会被描述成一个"事件",每个事件都以二进制形式记录在一个文件中。这个文件称为服务器的二进制日志文件,通常被称为 Binary Log 或者 binlog。mysqlbinlog能够以文本的形式显示二进制日志。
官方文档:MySQL :: MySQL 8.0 Reference Manual :: 6.6.9 mysqlbinlog — Utility for Processing Binary Log Files
注意事项
binlog 的默认保存路径如下:
在 Linux 下,默认目录是:/var/lib/mysql
在 Windows 下,默认目录是:mysql的安装路径\Data
binlog 文件以 .00000n 结尾命名,其中 n 是一个递增的数字。每三十天进行一次删除
使用
mysqlbinlog [options] log_file ...
常用选项
mysqlslap
mysqlslap 是一个诊断程序,用于模拟 MySQL 服务器的客户端负载,并报告每个阶段的时间,就好比多个客户端正在访问服务器一样。
官方文档:MySQL :: MySQL 8.0 Reference Manual :: 6.5.8 mysqlslap — A Load Emulation Client
注意事项
- 可以通过 --create 或 --query 选项,指定包含 SQL 语句的字符串或包含 SQL 语句的文件。
- 如果指定一个包含 SQL 语句的文件,默认情况下每行必须包含一条语句(也就是说,隐式语句分隔符是换行符)。
- 如果要把一条语句分为多行书写,可以使用 --delimiter 选项指定不同的分隔符。
- 不能在文件中包含注释,因为 mysqlslap 不能解析注释。
- mysqlslap 运行分为三个阶段:
- a. 创建测试数据阶段:创建用于测试的库、表或数据,这个阶段使用单个客户端连接。
- b. 运行负载测试阶段:这个阶段可以使用许多客户端连接。
- c. 清理阶段:执行删除表、断开连接等操作,这个阶段使用单个客户端连接。
使用
mysqlslap [options]
mysqlslap -uroot -p --delimiter=";" --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23);" --query="SELECT * FROM a" --concurrency=50 --iterations=200