MySQL 工具使用指南

一、mysql bin下的一些可执行文件

这些文件是编译后的二进制可执行文件。

二、MySQL 各工具的实际类型

工具 类型 说明
mysql 二进制 用 C/C++ 编写,编译成二进制
mysqldump 二进制或Perl脚本 取决于 MySQL 版本和安装方式
mysqladmin 二进制 用 C/C++ 编写
mysqlcheck Perl 脚本 是一个 Perl 脚本
mysqlimport 二进制或脚本 取决于版本
mysqlshow 二进制 用 C/C++ 编写
mysqlbinlog 二进制 用 C/C++ 编写

三、7大工具详解

  • mysql - 连接和执行 SQL
  • mysqldump - 数据备份和恢复
  • mysqladmin - 服务器管理
  • mysqlcheck - 表检查和修复
  • mysqlimport - 数据导入
  • mysqlshow - 查看数据库信息
  • mysqlbinlog - 查看二进制日志

MySQL 工具使用指南

1. mysql - 连接 MySQL 服务器

用途:连接 MySQL 数据库,执行 SQL 语句

基本语法

bash 复制代码
mysql -h 主机地址 -P 端口 -u 用户名 -p 密码 -D 数据库名

常用示例

bash 复制代码
# 方式1:连接本地 MySQL,输入密码后进入交互式界面
mysql -u root -p
# 输入密码后,进入 mysql> 提示符

# 方式2:直接指定密码(不安全,不推荐)
mysql -u root -pPassword123 -h 127.0.0.1 -P 3306

# 方式3:连接远程 MySQL
mysql -u root -p -h 192.168.1.100 -P 3306

# 方式4:连接并指定数据库
mysql -u root -p -D mydb

# 方式5:执行 SQL 文件
mysql -u root -p -D mydb < /path/to/script.sql

# 方式6:执行单条 SQL 语句
mysql -u root -p -D mydb -e "SELECT * FROM users;"

进入交互式界面后

bash 复制代码
mysql> USE mydb;                    # 选择数据库
mysql> SHOW TABLES;                 # 查看表
mysql> SELECT * FROM users LIMIT 5; # 查询数据
mysql> EXIT;                        # 退出

2. mysqldump - 数据库备份

用途:备份数据库、表或整个 MySQL 实例

基本语法

bash 复制代码
mysqldump -h 主机 -u 用户名 -p 密码 [选项] 数据库名 [表名] > 备份文件.sql

常用示例

bash 复制代码
# 备份整个数据库
mysqldump -u root -p mydb > mydb_backup.sql

# 备份多个数据库
mysqldump -u root -p --databases db1 db2 db3 > multi_db_backup.sql

# 备份单个表
mysqldump -u root -p mydb users > users_table_backup.sql

# 备份所有数据库
mysqldump -u root -p --all-databases > all_databases_backup.sql

# 仅备份表结构(不备份数据)
mysqldump -u root -p --no-data mydb > mydb_structure.sql

# 仅备份数据(不备份表结构)
mysqldump -u root -p --no-create-info mydb > mydb_data.sql

# 备份并压缩(减少文件大小)
mysqldump -u root -p mydb | gzip > mydb_backup.sql.gz

# 显示进度
mysqldump -u root -p --verbose mydb > mydb_backup.sql

恢复备份

bash 复制代码
# 恢复数据库
mysql -u root -p mydb < mydb_backup.sql

# 恢复压缩的备份
gunzip < mydb_backup.sql.gz | mysql -u root -p mydb

# 使用 source 命令恢复
mysql -u root -p
mysql> SOURCE /path/to/mydb_backup.sql;

3. mysqladmin - 服务器管理

用途:管理 MySQL 服务器(创建、删除数据库,查看状态等)

基本语法

复制代码
mysqladmin -h 主机 -u 用户名 -p 命令

常用示例

bash 复制代码
# 查看 MySQL 服务器状态
mysqladmin -u root -p status

# 查看服务器变量
mysqladmin -u root -p variables

# 创建数据库
mysqladmin -u root -p create mydb

# 删除数据库(需要确认)
mysqladmin -u root -p drop mydb

# 强制删除(不需要确认)
mysqladmin -u root -p -f drop mydb

# 查看连接的用户和进程
mysqladmin -u root -p processlist

# 关闭 MySQL 服务
mysqladmin -u root -p shutdown

# 重启 MySQL(需要有权限)
mysqladmin -u root -p flush-privileges

# 修改 root 密码
mysqladmin -u root -p password newpassword

# 查看 MySQL 版本
mysqladmin -u root -p version

# ping MySQL(检查连接是否正常)
mysqladmin -u root -p ping
# 输出: mysqld is alive

# 查看所有数据库
mysqladmin -u root -p -e "SHOW DATABASES;"

4. mysqlcheck - 检查和修复表

用途:检查、修复、分析和优化数据库表

基本语法

复制代码
mysqlcheck -h 主机 -u 用户名 -p [选项] 数据库名 [表名]

常用示例

bash 复制代码
# 检查某个数据库的所有表
mysqlcheck -u root -p mydb

# 检查特定的表
mysqlcheck -u root -p mydb users

# 修复表中的错误
mysqlcheck -u root -p --repair mydb

# 修复特定的表
mysqlcheck -u root -p --repair mydb users

# 优化表(整理表数据,释放空间)
mysqlcheck -u root -p --optimize mydb

# 分析表(更新表的统计信息,用于查询优化)
mysqlcheck -u root -p --analyze mydb

# 同时执行检查、修复、优化
mysqlcheck -u root -p --check --repair --optimize mydb

# 检查所有数据库
mysqlcheck -u root -p --all-databases

# 显示详细信息
mysqlcheck -u root -p --verbose mydb

# 自动修复(检查失败时自动尝试修复)
mysqlcheck -u root -p --auto-repair mydb

5. mysqlimport - 导入数据

用途:从文本文件批量导入数据到数据库表

基本语法

复制代码
mysqlimport -h 主机 -u 用户名 -p [选项] 数据库名 文件名

常用示例

bash 复制代码
# 导入单个文件(文件名必须与表名一致)
# 比如要导入到 users 表,文件应该命名为 users.txt
mysqlimport -u root -p mydb /path/to/users.txt

# 导入多个文件
mysqlimport -u root -p mydb /path/to/users.txt /path/to/products.txt

# 导入 CSV 文件(指定字段分隔符)
mysqlimport -u root -p --fields-terminated-by=',' mydb users.csv

# 导入 TSV 文件(制表符分隔)
mysqlimport -u root -p --fields-terminated-by='\t' mydb users.txt

# 忽略第一行(通常是标题)
mysqlimport -u root -p --ignore-lines=1 mydb users.csv

# 显示导入的详细信息
mysqlimport -u root -p --verbose mydb users.txt

# 导入时指定列的顺序
mysqlimport -u root -p --columns=id,name,email mydb users.txt

文件格式要求

bash 复制代码
# users.txt(制表符分隔)
1	张三	zhangsan@example.com
2	李四	lisi@example.com

# users.csv(逗号分隔)
1,张三,zhangsan@example.com
2,李四,lisi@example.com

6. mysqlshow - 显示数据库和表信息

用途:查看 MySQL 中的数据库、表、列信息

基本语法

bash 复制代码
mysqlshow -h 主机 -u 用户名 -p [数据库名] [表名]

常用示例

bash 复制代码
# 显示所有数据库
mysqlshow -u root -p

# 显示指定数据库中的所有表
mysqlshow -u root -p mydb

# 显示表的详细信息(包括列信息)
mysqlshow -u root -p mydb users

# 显示表的列信息
mysqlshow -u root -p mydb users -v

# 显示表的列和类型信息
mysqlshow -u root -p mydb users --verbose

# 显示表的统计信息(包括行数、大小等)
mysqlshow -u root -p mydb --status

# 显示所有表的统计信息
mysqlshow -u root -p mydb --status -v

# 显示某个表的索引信息
mysqlshow -u root -p mydb users -k

# 显示数据库的字符集信息
mysqlshow -u root -p mydb -c

# 只显示表名
mysqlshow -u root -p mydb | grep "Tables"

7. mysqlbinlog - 查看二进制日志

用途:查看 MySQL 二进制日志,用于恢复数据、分析数据变更

基本语法

复制代码
mysqlbinlog [选项] 二进制日志文件

常用示例

bash 复制代码
# 查看二进制日志的内容
mysqlbinlog /var/lib/mysql/mysql-bin.000001

# 输出为 SQL 语句
mysqlbinlog --base64-output=never /var/lib/mysql/mysql-bin.000001

# 显示事件的详细信息
mysqlbinlog --verbose /var/lib/mysql/mysql-bin.000001

# 查看指定时间范围内的日志
mysqlbinlog --start-datetime='2025-01-01 00:00:00' \
            --stop-datetime='2025-01-01 23:59:59' \
            /var/lib/mysql/mysql-bin.000001

# 查看指定位置的日志
mysqlbinlog --start-position=154 --stop-position=954 /var/lib/mysql/mysql-bin.000001

# 输出到文件
mysqlbinlog /var/lib/mysql/mysql-bin.000001 > binlog.sql

# 恢复数据(通常用于灾难恢复)
mysqlbinlog /var/lib/mysql/mysql-bin.000001 | mysql -u root -p mydb

# 查看多个日志文件
mysqlbinlog /var/lib/mysql/mysql-bin.000001 /var/lib/mysql/mysql-bin.000002 > all_binlog.sql

常见使用场景

场景1:完整的数据备份和恢复流程

bash 复制代码
# 备份
mysqldump -u root -p --all-databases | gzip > all_db_backup_$(date +%Y%m%d).sql.gz

# 恢复
gunzip < all_db_backup_20250109.sql.gz | mysql -u root -p

场景2:批量导入数据

bash 复制代码
# 准备 CSV 文件
cat users.csv
# 1,张三,zhangsan@example.com
# 2,李四,lisi@example.com

# 导入数据
mysqlimport -u root -p --fields-terminated-by=',' --ignore-lines=1 mydb users.csv

场景3:数据库维护

bash 复制代码
# 检查所有表
mysqlcheck -u root -p --all-databases

# 修复和优化
mysqlcheck -u root -p --check --repair --optimize --all-databases

场景4:定时备份脚本

bash 复制代码
#!/bin/bash                          # 指定使用 bash 解释器
BACKUP_DIR="/backup/mysql"          # 定义变量:备份目录
DATE=$(date +%Y%m%d_%H%M%S)         # 定义变量:当前时间戳

# 执行 mysqldump 备份,并用 gzip 压缩
mysqldump -u root -p --all-databases | gzip > $BACKUP_DIR/backup_$DATE.sql.gz

# 删除 30 天前的备份文件
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +30 -delete

添加crontab定时命令:

bash 复制代码
# 编辑 crontab 定时任务
crontab -e

# 添加以下行:每天凌晨 2 点执行备份
0 2 * * * /home/admin/backup.sh

# 每周日执行备份
0 2 * * 0 /home/admin/backup.sh

# 每小时执行备份
0 * * * * /home/admin/backup.sh

crontab 时间规则解释:

bash 复制代码
┌─────────────── 分钟 (0-59)
│ ┌───────────── 小时 (0-23)
│ │ ┌─────────── 日期 (1-31)
│ │ │ ┌───────── 月份 (1-12)
│ │ │ │ ┌─────── 周几 (0-7, 0和7都表示周日)
│ │ │ │ │
│ │ │ │ │
0 2 * * * /path/to/backup.sh

# 含义:每天凌晨2点0分执行

什么是 Crontab?

Crontab 是 Linux/Unix 中的定时任务工具,可以在指定的时间自动执行脚本或命令。


常用选项总结

选项 说明
-h 指定主机地址
-P 指定端口号(默认3306)
-u 用户名
-p 密码(建议互动输入)
-D 指定数据库
--verbose 显示详细信息
--force/-f 强制执行(不提示确认)
--all-databases 操作所有数据库
--databases 指定多个数据库
--no-data 只导出结构,不导出数据
--no-create-info 只导出数据,不导出结构
相关推荐
爱学java的ptt1 天前
mysql的存储引擎
数据库·mysql
龘龍龙1 天前
Python基础学习(十一)
python·学习·mysql
不屈的铝合金1 天前
SQL 语言概述与数据库核心前置配置了解
数据库·sql·mysql·约束·sql 语句分类·字符集配置·校对规则
萧曵 丶1 天前
可重复读(Repeatable Read)隔离级别下幻读产生的原因
数据库·sql·mysql
Antoine-zxt1 天前
MySQL宕机日志迷局破解指南:从前台启动到精准排错
数据库·mysql·adb
·云扬·1 天前
MySQL运维效率提升:实用SQL语句合集
运维·sql·mysql
剑来.1 天前
一次完整的 MySQL 性能问题排查思路(线上实战总结)
数据库·mysql·oracle
欢乐的小猪1 天前
windows10如何安装多个版本mysql
数据库·mysql
Antoine-zxt1 天前
MySQL数据脱敏技术全解析:从原理到可视化实践
数据库·mysql