一、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 |
只导出数据,不导出结构 |