【MySQL高阶】3.工具包中的其他程序(1)
文章目录
- 4. 工具包中的其他程序
- 4.1 mysqlcheck - 表维护程序
- 4.1.1 作用
- 4.1.2 注意事项
- 4.1.3 使用方法
- 4.1.4 常用选项
- 4.1.5 mysqlcheck的特殊使用
- 4.2 Mysqldump - 数据库备份程序
- 4.2.1 作用
- 4.2.2 注意事项
- 4.2.3 使用方法
- 4.2.4 常用选项
- 4.3 mysqladmin - MySQL 服务器管理程序
- 4.3.1 作用
- 4.3.2 使用方法
- 4.3.3 常用选项
- 4.3.4 支持的命令
4. 工具包中的其他程序
在命令行中使用
MySQL发行版中的其他工具时,一些选项是公共的,比如用户名和密码,使用方法和mysql相同,在这里统一列出,后面我们在介绍不同的工具时,只讨论个性的选项及作用,公共选项如下所示:
| 选项–长格式 | 短格式 | 说明 |
|---|---|---|
--host | -h | --host=host_name , -h host_name连接到指定主机上的 MySQL服务 |
--port | -P | --port=port_num , -P port_numTCP/IP连接使用的端口号 |
--user | -u | --user=user_name , -u user_name用于连接到 MySQL服务器的用户名 |
--password | -p | --password[=password] , -p[password]用于连接到 MySQL服务器的密码。可选,如果没有给出, 会提示用户输入 |
--defaults-file | --defaults-file=file_name使用指定的选项文件。如果该文件不存在,则会发生错误。 | |
--compress | -C | --compress , -C如果可能,压缩客户端和服务器之间传输的所有信息 |
--protocol | `–protocol={TCP | |
--version | -V | --version , -V显示版本信息并退出。 |
--help | -? | --help , -?显示帮助信息并退出。 |
4.1 mysqlcheck - 表维护程序
4.1.1 作用
mysqlcheck客户端用于执行表维护,可以对表进行:分析、检查、优化或修复操作。
- 分析的作用是查看表的关键字分布,能够让
sql生成正确的执行计划(支持InnoDB,MyISAM,NDB)- 检查的作用是检查表的完整性以及数据库表和索引是否损坏(支持
InnoDB,MyISAM,ARCHIVE,CSV)- 优化的作用是回收空间、减少碎片、提高
I/O(支持InnoDB,MyISAM,ARCHIVE)- 修复的作用是修复可能已经损坏的表(支持
MyISAM,ARCHIVE,CSV)
4.1.2 注意事项
- 当使用
mysqlcheck工具时,MySQL服务器必须在运行状态- 执行过程中相应的表将会被锁定,所以其他的操作将会被挂起
- 并不是所有的存储引擎都支持以上四种操作,如果遇到不支持的引擎会报出相应的错误
- 执行表修复操作之前对表进行备份,在某些情况下可能会导致数据丢失。
4.1.3 使用方法
一般通过以下三种方法使用mysqlcheck:
mysqlcheck [options] db_name [tbl_name ...] mysqlcheck [options] --databases db_name ... mysqlcheck [options] --all-databases如果在db_name后没有指定任何表名,或者使用--databases或--all-databases选项,那么整个数据库都会被检查。
4.1.4 常用选项
mysqlcheck有如下常用选项,可以在命令行中指定,也可以在选项文件中通过[mysqlcheck]和[client]组进行指定
| 选项 | 说明 |
|---|---|
--analyze,-a | 分析表 |
--auto-repair | 如果检查的表有损坏,则自动修复它。所有表都检查过之后才进行必要的修复 |
--check,-c | 检查表中的错误。mysqlcheck的默认操作 |
--check-only-changed,-C | 仅检查自上次检查以来更改过的表 |
--databases,-B | --databases db_name多个数据库名用空格隔开处理指定数据库中的所有表 |
--force, -f | 即使发生SQL错误也要继续 |
--optimize,-o | 优化表 |
--repair,-r | 执行可能进行的任务修复操作,除了唯一键 |
--skip-database | --skip-database=db_name不需要执行检查的数据库名(区分大小写) |
--tables | --tables=table_name多个表名用空格隔开在选项之后的所有名称参数都被视为表名。 |
--use-frm | 对于MyISAM表的修复操作 |
示例:
root@iZuf68hz06p6s2809gl3i1Z:~/108_class# mysqlcheck -a test_db Enter password: test_db.classes OK test_db.course OK test_db.score OK test_db.student OK root@iZuf68hz06p6s2809gl3i1Z:~/108_class# mysqlcheck --check test_db Enter password: test_db.classes OK test_db.course OK test_db.score OK test_db.student OK root@iZuf68hz06p6s2809gl3i1Z:~/108_class# mysqlcheck -r test_db Enter password: test_db.classes note : The storage engine for the table doesn't support repair test_db.course note : The storage engine for the table doesn't support repair test_db.score note : The storage engine for the table doesn't support repair test_db.student note : The storage engine for the table doesn't support repair root@iZuf68hz06p6s2809gl3i1Z:~/108_class#这里会报错,是因为我们这个数据库创建的引擎是InnoDB,有的引擎会不支持这个命令。
那么怎么办呢?总不能说放弃这个引擎创建的表吧。
修复不支持InnoDB存储引擎的时候,要把InnoDB存储引擎的表转换成Mylsam存储引擎(这个存储引擎修复优化很厉害)。
root@iZuf68hz06p6s2809gl3i1Z:~/108_class# mysqlcheck -o test_db Enter password: test_db.classes note : Table does not support optimize, doing recreate + analyze instead # 可以理解为重新开辟一个控件,把原来的数据一个个复制过来 status : OK test_db.course note : Table does not support optimize, doing recreate + analyze instead status : OK test_db.score note : Table does not support optimize, doing recreate + analyze instead status : OK test_db.student note : Table does not support optimize, doing recreate + analyze instead status : OK root@iZuf68hz06p6s2809gl3i1Z:~/108_class#官网建议不要经常去执行优化操作。比如,一个小时或一天。
一般来说小表可以不优化,大表一个月一次也可以。
4.1.5 mysqlcheck的特殊使用
mysqlcheck程序的默认功能是对数据表进行 检查 操作(相当于指定选项--check),如果想要对表进行修复操作,可以通过复制原来的mysqlcheck程序,并重命名为mysqlrepair,并运行mysqlrepair即可,还可以创建mysqlcheck的快捷方式,并把快捷方式命名为mysqlrepair然后直接运行,这时就执行的是修复操作。
通过下表所示的命名方式可以改变mysqlcheck的默认行为:
| 程序名 | 说明 |
|---|---|
mysqlrepair | 默认行为是修复,相当于选项--repair |
mysqlanalyze | 默认行为是修复,相当于分析--analyze |
mysqloptimize | 默认行为是修复,相当于优化--optimize |
4.2 Mysqldump - 数据库备份程序
4.2.1 作用
mysqldump客户端程序可以执行逻辑备份并生成一组SQL语句,其中包含原始数据库和表的定义以及表中的数据,以便实现对数据库的简单备份或复制。mysqldump命令可以生成CSV、或XML格式的文件。
4.2.2 注意事项
- 转储表时必须要有
SELECT权限- 转储视图时必须要有
SHOW VIEW权限- 转储触发器时必须要有
TRIGGER权限- 如果没有使用
--single-transaction选项时必须要有LOCK TABLES权限- 如果没有使用
--no-tablespaces选项时必须要有PROCESS权限- 重新导入转储文件时,也需要有相应的权限
- 由于
mysqldump是逐行转储数据,所以不适用于大数据量的转储与导入
4.2.3 使用方法
mysqldump的方法通常有以下使用,可以转储一个或多个表或数据库,如下所示:
mysqldump [options] db_name [tbl_name ...] mysqldump [options] --databases db_name ... mysqldump [options] --all-databases如果在db_name后没有指定任何表名,或者使用--databases或--all-databases选项,那么整个数据库都会被转储。
4.2.4 常用选项
mysqldump有如下常用选项,可以在命令行中指定,也可以在选项文件中通过[mysqldump]和[client]组进行指定。
| 选项 | 说明 |
|---|---|
--add-drop-database | 在每个CREATE DATABASE语句之前添加DROP DATABASE语句 |
--add-drop-table | 在每个CREATE TABLE语句之前添加DROP TABLE语句 |
--add-drop-trigger | 在每个CREATE TRIGGER语句之前添加DROP TRIGGER语句 |
--add-locks | 用LOCK TABLES和UNLOCK TABLES语句包裹每个表转储 |
--all-databases,-A | 转储所有数据库中的所有表 |
--databases,-B | --databases=db_name多个数据库名用空格隔开将参数解释为数据库名称并转储所有的表 |
--comments,-i | 添加注释到转储文件 |
--compact | 紧凑格式输出(类似于多个insert语句合并成一条) |
--compatible=ansi | 生成与其他数据库或旧MySQL服务器更兼容的输出 |
--complete-insert,-c | 使用包含列名的完整INSERT语句 |
--events,-E | 从转储数据库中转储事件 |
--extended-insert,-e | 使用多行INSERT语法 |
--flush-logs,-F | 在开始转储前刷新日志 |
--flush-privileges | 在转储后刷新权限 |
--force,-f | 转储期间发生了SQL错误,也要继续 |
--hex-blob | 使用十六进制表示法转储二进制列 |
--ignore-table | --ignore-table=db_name.table_name多个表用空格隔开不转储给定的表 |
--lock-all-tables,-x | 锁定所有数据库中的所有表 |
--lock-tables,-l | 在转储之前锁定指定要转储的表 |
--no-autocommit | 将每个转储表的INSERT语句包含在SET autocommit = 0和COMMIT语句中 |
--no-create-db,-n | 不要生成CREATE DATABASE语句 |
--no-create-info,-t | 不要为每个转储的表生成CREATE TABLE语句 |
--no-data,-d | 不转储表内容 |
--skip-add-drop-table | 在每个CREATE TABLE语句之前不添加DROP TABLE语句 |
--skip-add-locks | 不要添加锁 |
--skip-comments | 转储文件中不添加注释 |
--skip-compact | 不使用紧凑格式 |
--skip-triggers | 不转储触发器 |
--tables | --tables=table_name多个表名用空格隔开在选项之后的所有名称参数都被视为表名。 |
--triggers | 转储每个表中的触发器 |
--xml,-X | 以XML格式输出 |
例子1:导出test_db单个数据库
这里的
test_db是只导出指定的数据库名。
/root/dump.sql是导出的文件地址
root@iZuf68hz06p6s2809gl3i1Z:~/108_class# mysqldump test_db>/root/dump.sql # 将名为 test_db 的数据库备份(导出)到 /root/dump.sql 文件中 Enter password: root@iZuf68hz06p6s2809gl3i1Z:~/108_class# cd /root root@iZuf68hz06p6s2809gl3i1Z:~# ls 108_class code dump.sql mysql.cnf root@iZuf68hz06p6s2809gl3i1Z:~#例子2:导出MySQL所有数据库
将整个MySQL服务器中所有数据库的“表结构(不含数据)”导出到了一个文件中。
-A:转储所有数据库中的所有表。
--add-drop-database:在每个CREATE DATABASE语句之前添加DROP DATABASE语句。
- 作用是:当你未来拿着这个文件去恢复/导入时,会先把同名的旧数据库删掉再重建,防止新旧结构冲突。
--no-data:不转储表内容。只导出表结构,不导出表里面的具体数据。
root@iZuf68hz06p6s2809gl3i1Z:~# mysqldump -A --add-drop-database --no-data > /root/dump2.sql # 通常这个用于新环境初始化,备份了表结构 Enter password: root@iZuf68hz06p6s2809gl3i1Z:~# ls 108_class code dump2.sql dump.sql mysql.cnf4.3 mysqladmin - MySQL 服务器管理程序
4.3.1 作用
mysqladmin是一个执行管理操作的客户端。可以用来检查服务器的配置和当前状态,以及创建和删除数据库等。配合使用
mysqladmin的用户必须具备管理员权限。
4.3.2 使用方法
mysqladmin可以使用以下语法:
mysqladmin [options] command [command-arg] [command [command-arg]] ... mysqladmin [选项] 命令 [命令参数] [命令] [命令参数] ...4.3.3 常用选项
mysqladmin的常用选项参考公共选项部分,可以在命令行中指定,也可以在选项文件中通过[mysqladmin]和[client]组进行指定。
4.3.4 支持的命令
语法中的
command表示命令,有些命令后面需要跟上一个参数,如下列出了mysqladmin的常用命令:
version:显示来自服务器的版本信息。
Uptime MySQL:服务器已运行的秒数。Threads:活动线程(客户端)的数量。Questions:自服务器启动以来客户端的问题(查询)数。Slow queries:慢SQL的查询数。Opens:服务器已打开的表数。Flush tables:服务器已执行flush-*、refresh和reload命令的数量。Open tables:当前打开的表数。
# 查看MySQL版本 root@iZuf68hz06p6s2809gl3i1Z:~/108_class# mysqladmin version Enter password: mysqladmin Ver 8.0.42 for Linux on x86_64 (MySQL Community Server - GPL) Copyright (c) 2000, 2025, 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. Server version 8.0.42 Protocol version 10 Connection 127.0.0.1 via TCP/IP TCP port 3306 Uptime: 181 days 17 hours 32 min 43 sec Threads: 2 Questions: 232001598 Slow queries: 6 Opens: 904 Flush tables: 3 Open tables: 522 Queries per second avg: 14.775 # 查看服务器状态 root@iZuf68hz06p6s2809gl3i1Z:~/108_class# mysqladmin status Enter password: Uptime: 15701590 Threads: 2 Questions: 232001600 Slow queries: 6 Opens: 904 Flush tables: 3 Open tables: 522 Queries per second avg: 14.775 root@iZuf68hz06p6s2809gl3i1Z:~/108_class#
create db_name
创建一个数据库名为db_name。创建数据库时使用的编码集是选项文件中配置的编码集,如果没有指定那么使有和当前
MYSQL版本默认的编码集。
drop db_name
删除名为db_name的数据库及其所有表。
extended-status
显示服务器状态变量的值。
flush-hosts
刷新主机缓存中的所有信息。
flush-logs [log_type ...]
刷新所有日志。log_type中可以提供以下一种或多种日志类型binary, engine, error, general, relay, slow,多个类型之间用空格分隔。
flush-privileges
重新加载授权表
flush-status
清除状态变量。
flush-tables
刷新所有表。
flush-threads
刷新线程缓存。
password new_password设置新密码。
如果密码中有空格必须用双引号把密码包裹起来
password后可以省略新密码,mysqladmin会在之后提示输入新密码
password做为最后一个command时才可以省略密码值,否则下一个参数将作为密码被设置。
Warning有可能存在安全问题:使用mysqladmin设置密码应被视为不安全的做法。在某些系统上,你的密码对系统状态程序(如ps)是可见的,其他用户可能会调用这些程序来显示命令行。MySQL客户端通常会在其初始化序列期间将命令行密码参数覆盖为零。然而,仍然存在一个短暂的时间窗口,在此期间密码值是可见的。此外,在某些系统上,这种覆盖策略无效,密码对ps仍然可见。(SystemV Unix系统及其他系统可能存在此问题。)
ping
检查服务器是否可用
processlist
显示活动服务器线程的列表。默认的
MYSQL服务器可以维护150个活动连接,如果连接被用完,那么可以通过KILL指定去手结束放休眠时间最长的那个线程。
root@iZuf68hz06p6s2809gl3i1Z:~# mysqladmin processlist Enter password: +------+-----------------+-----------------+----+---------+----------+------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +------+-----------------+-----------------+----+---------+----------+------------------------+------------------+ | 5 | event_scheduler | localhost | | Daemon | 15703290 | Waiting on empty queue | | | 2703 | root | localhost:43412 | | Query | 0 | init | show processlist | +------+-----------------+-----------------+----+---------+----------+------------------------+------------------+ root@iZuf68hz06p6s2809gl3i1Z:~#
kill id , id ,...
终止服务器线程。如果给出了多个线程ID值,则列表中不能有空格。reload
重新加载授权表。refresh
刷新所有表。shutdown
停止服务器。start-replica
在副本服务器上开始复制。MySQL 8.0.26及以后的版本使用此命令。start-slave
在副本服务器上开始复制。MySQL 8.0.26之前使用此命令。status
显示简短的服务器状态消息。stop-replica
停止副本服务器上的复制。MySQL 8.0.26及以后的版本使用此命令。stop-slave
停止副本服务器上的复制。MySQL 8.0.26之前使用此命令。variables
显示服务器系统变量及其值。
