mysqladmin 是 MySQL 数据库的管理客户端工具,用于执行各种管理操作,如创建/删除数据库、检查服务器状态、关闭服务器、修改密码等。它是 MySQL 服务器管理的重要命令行工具。
📖 基本语法
bash
mysqladmin [选项] 命令 [命令参数]
🎯 常用选项
| 选项 | 说明 |
|---|---|
-h, --host=主机名 |
连接的主机名(默认 localhost)。 |
-P, --port=端口号 |
连接的端口(默认 3306)。 |
-u, --user=用户名 |
连接的用户名。 |
-p, --password[=密码] |
连接时使用的密码。 |
-S, --socket=套接字文件 |
用于连接的 Unix 套接字文件。 |
-v, --verbose |
显示更多信息。 |
-V, --version |
显示版本信息并退出。 |
-f, --force |
强制执行操作,不询问确认。 |
-c, --count=次数 |
重复执行命令的次数。 |
-i, --sleep=秒数 |
重复执行命令的间隔秒数。 |
-r, --relative |
显示相对值(与 -i 一起使用)。 |
-s, --silent |
静默模式,只输出错误信息。 |
-E, --vertical |
垂直输出结果(类似 \G)。 |
-?, --help |
显示帮助信息。 |
💡 常用命令
| 命令 | 说明 |
|---|---|
create 数据库名 |
创建新数据库。 |
drop 数据库名 |
删除数据库。 |
extended-status |
显示服务器状态变量。 |
flush-hosts |
刷新所有主机缓存。 |
flush-logs |
刷新所有日志。 |
flush-privileges |
重新加载授权表(同 reload)。 |
flush-status |
清除状态变量。 |
flush-tables |
刷新所有表。 |
flush-threads |
刷新线程缓存。 |
kill 进程id,... |
杀死 MySQL 进程。 |
old-password 新密码 |
使用旧格式设置密码(MySQL 4.1 之前)。 |
password 新密码 |
设置新密码。 |
ping |
检查 MySQL 服务器是否运行。 |
processlist |
显示活动进程列表。 |
refresh |
刷新所有表并关闭/打开日志文件。 |
reload |
重新加载授权表。 |
shutdown |
关闭 MySQL 服务器。 |
start-slave |
启动从服务器复制。 |
status |
显示服务器状态。 |
stop-slave |
停止从服务器复制。 |
variables |
显示系统变量。 |
version |
显示版本信息。 |
🔧 核心用法示例
1. 检查 MySQL 服务器状态
bash
# 检查服务器是否运行
mysqladmin -u root -p ping
# 显示服务器状态
mysqladmin -u root -p status
# 显示详细状态变量
mysqladmin -u root -p extended-status
# 显示系统变量
mysqladmin -u root -p variables
2. 管理数据库
bash
# 创建数据库
mysqladmin -u root -p create new_database
# 删除数据库
mysqladmin -u root -p drop old_database
# 会提示确认
# 删除数据库(不提示)
mysqladmin -u root -p drop -f old_database
3. 管理密码
bash
# 设置 root 密码(初始设置)
mysqladmin -u root password "newpassword"
# 修改 root 密码(已有密码)
mysqladmin -u root -p'oldpassword' password "newpassword"
# 使用提示输入旧密码
mysqladmin -u root -p password "newpassword"
4. 刷新操作
bash
# 刷新权限表(使新授权生效)
mysqladmin -u root -p flush-privileges
# 刷新所有表
mysqladmin -u root -p flush-tables
# 刷新日志
mysqladmin -u root -p flush-logs
# 刷新主机缓存
mysqladmin -u root -p flush-hosts
# 刷新所有(相当于同时执行 flush-tables 和 flush-logs)
mysqladmin -u root -p refresh
5. 进程管理
bash
# 显示进程列表
mysqladmin -u root -p processlist
# 显示详细进程列表
mysqladmin -u root -p -v processlist
# 杀死进程
mysqladmin -u root -p kill 进程ID1,进程ID2,...
# 杀死所有进程(危险!)
mysqladmin -u root -p processlist | awk '/^| [0-9]+ /{print $2}' | xargs mysqladmin -u root -p kill
6. 服务器控制
bash
# 关闭 MySQL 服务器
mysqladmin -u root -p shutdown
# 启动从服务器复制
mysqladmin -u root -p start-slave
# 停止从服务器复制
mysqladmin -u root -p stop-slave
📊 监控 MySQL 服务器
1. 基本监控脚本
bash
#!/bin/bash
# 监控 MySQL 状态
echo "=== MySQL 状态监控 ==="
echo "时间: $(date)"
# 检查服务器是否运行
if mysqladmin -u root -p ping > /dev/null 2>&1; then
echo "状态: 运行中"
else
echo "状态: 停止"
exit 1
fi
# 显示状态
mysqladmin -u root -p status
# 显示关键状态变量
echo -e "\n=== 关键状态变量 ==="
mysqladmin -u root -p extended-status | \
grep -E '(Threads_connected|Threads_running|Queries|Slow_queries|Bytes_received|Bytes_sent|Innodb_buffer_pool_reads|Innodb_rows_read)'
2. 定期监控
bash
# 每5秒监控一次
while true; do
clear
mysqladmin -u root -p -i 5 processlist
sleep 5
done
# 或使用 watch 命令
watch -n 5 'mysqladmin -u root -p processlist'
3. 性能监控
bash
# 监控连接数
mysqladmin -u root -p extended-status | grep -i threads_connected
# 监控查询性能
mysqladmin -u root -p extended-status | grep -E '(Queries|Slow_queries)'
# 监控 InnoDB 状态
mysqladmin -u root -p extended-status | grep -i innodb
# 监控网络流量
mysqladmin -u root -p extended-status | grep -E '(Bytes_received|Bytes_sent)'
⚠️ 重要注意事项
- 权限要求 :大多数
mysqladmin命令需要管理员权限(如 root 用户)。 - 密码安全:在脚本中使用密码时,考虑使用配置文件或环境变量,避免在命令行中暴露。
- 生产环境谨慎操作 :
shutdown、kill、drop等命令在生产环境中需特别小心。 - 备份重要数据:在执行删除或修改操作前,确保有备份。
🔍 故障排除
1. 连接失败
bash
# 检查 MySQL 服务是否运行
systemctl status mysql
# 检查端口
netstat -tlnp | grep 3306
# 检查 socket 文件
ls -l /var/run/mysqld/mysqld.sock
# 使用 TCP 连接(如果 socket 连接失败)
mysqladmin -h 127.0.0.1 -P 3306 -u root -p ping
2. 权限不足
sql
-- 在 MySQL 中授予用户 mysqladmin 权限
GRANT SHUTDOWN, PROCESS, RELOAD, SUPER ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
3. 密码问题
bash
# 如果忘记 root 密码,可以重置
# 1. 停止 MySQL 服务
sudo systemctl stop mysql
# 2. 以安全模式启动
sudo mysqld_safe --skip-grant-tables &
# 3. 重置密码
mysql -u root
UPDATE mysql.user SET authentication_string=PASSWORD('newpassword') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;
# 4. 重启 MySQL 服务
sudo systemctl restart mysql
📌 最佳实践
-
使用配置文件 :将连接参数存储在
~/.my.cnf中:ini[mysqladmin] user=root password=your_password host=localhost然后可以直接运行:
mysqladmin status -
监控脚本:定期监控 MySQL 状态并记录日志:
bash# 记录状态到日志文件 mysqladmin -u root -p extended-status >> /var/log/mysql_status.log -
自动化管理:结合 cron 定时任务进行自动化管理:
bash# 每天凌晨刷新日志 0 0 * * * /usr/bin/mysqladmin -u root -p flush-logs # 每小时检查服务器状态 0 * * * * /usr/bin/mysqladmin -u root -p ping > /dev/null || systemctl restart mysql -
安全考虑 :为
mysqladmin操作创建专用用户,并仅授予必要权限。
mysqladmin 是 MySQL 数据库管理员的强大工具,特别适合在脚本和自动化任务中使用。虽然许多操作也可以通过 MySQL 客户端执行,但 mysqladmin 提供了更直接和简洁的命令行界面。