MySQL命令行工具实战指南:从基础操作到高级脚本应用

张开发
2026/5/20 15:26:25 15 分钟阅读
MySQL命令行工具实战指南:从基础操作到高级脚本应用
1. MySQL命令行工具基础入门第一次接触MySQL命令行工具时我盯着黑乎乎的终端窗口有点发怵。但真正用起来才发现这套自带工具才是数据库管理的瑞士军刀。不需要花哨的界面只需几个简单的命令就能完成大部分日常操作。最基础的mysql命令就像数据库的钥匙。连接数据库时我习惯这样用mysql -h 127.0.0.1 -P 3306 -u root -p这里-h指定主机-P指定端口注意是大写-u是用户名-p会提示输入密码。实际使用中我发现个小技巧如果密码包含特殊字符最好用单引号包裹比如-pAbc123。连接成功后你会看到mysql提示符。这里可以执行各种SQL语句SHOW DATABASES; -- 查看所有数据库 USE test_db; -- 切换到test_db数据库 SHOW TABLES; -- 显示当前数据库的所有表有次我忘记带-p参数直接连接结果收到Access denied错误。这时候不要慌重新带上密码参数就行。如果连不上数据库可以先检查MySQL服务是否启动systemctl status mysql # Linux系统 net start mysql # Windows系统2. 高效查询技巧与参数妙用在命令行中执行查询时我特别喜欢-e参数它允许不进入交互模式直接执行SQL语句。比如要快速检查数据库版本mysql -uroot -p -e SELECT VERSION();这个特性在写脚本时特别有用。有次我需要批量检查多个表的行数写了这样的脚本#!/bin/bash TABLES$(mysql -uroot -p -e SHOW TABLES FROM inventory; | grep -v Tables_in) for TABLE in $TABLES; do COUNT$(mysql -uroot -p -e SELECT COUNT(*) FROM inventory.$TABLE; | tail -1) echo $TABLE: $COUNT rows done--vertical参数或简写-E是我另一个心头好。当查询结果字段很多时它会以纵向格式显示避免内容挤在一起mysql -uroot -p -E -e SELECT * FROM users LIMIT 1\G注意结尾的\G代替了分号这是纵向显示的另一个写法。对于需要导出数据的场景--xml和--html参数能直接生成格式化的输出mysql -uroot -p -X -e SELECT * FROM products products.xml mysql -uroot -p -H -e SELECT * FROM orders orders.html3. 运维监控实战mysqladmin的妙用mysqladmin是DBA的好帮手它专门用于管理操作。我最常用的是ping命令检查服务状态mysqladmin -uroot -p ping如果返回mysqld is alive说明服务正常运行。监控数据库状态时这几个命令特别实用mysqladmin -uroot -p status # 查看基础状态 mysqladmin -uroot -p processlist # 查看当前连接 mysqladmin -uroot -p variables # 查看系统变量有次线上数据库突然变慢我用processlist发现大量sleep连接原来是应用没有正确关闭连接。通过kill命令解决了问题mysqladmin -uroot -p kill 12345 # 终止ID为12345的连接对于空间监控这个命令可以查看数据库大小mysql -uroot -p -e SELECT table_schema Database, ROUND(SUM(data_lengthindex_length)/1024/1024,2) Size (MB) FROM information_schema.tables GROUP BY table_schema;4. 自动化脚本与高级应用命令行工具真正的威力在于脚本化。我经常用Shell脚本自动备份数据库#!/bin/bash DATE$(date %Y%m%d) mysqldump -uroot -p --all-databases | gzip /backup/full_$DATE.sql.gz如果要定时执行可以配合crontab0 2 * * * /path/to/backup_script.sh # 每天凌晨2点执行性能测试时mysqlslap非常有用。这是我常用的压力测试命令mysqlslap --userroot --password --concurrency100 --iterations10 \ --auto-generate-sql --auto-generate-sql-load-typemixed \ --engineinnodb --number-of-queries1000对于主从复制监控我会定期检查Slave状态mysql -uroot -p -e SHOW SLAVE STATUS\G | grep -E Running|Seconds5. 安全实践与故障排查安全方面我强烈建议避免在命令行直接暴露密码# 不推荐密码会出现在历史记录中 mysql -uroot -p123456 # 推荐做法 mysql -uroot -p # 然后交互式输入密码对于生产环境我习惯用--tee记录所有操作mysql -uroot -p --tee/var/log/mysql_audit.log遇到连接问题时检查网络和权限telnet 127.0.0.1 3306 # 测试端口连通性 mysql -uroot -p -e SHOW GRANTS FOR userhost; # 查看用户权限慢查询是常见性能问题我这样启用慢查询日志mysql -uroot -p -e SET GLOBAL slow_query_log ON; SET GLOBAL long_query_time 1; SET GLOBAL slow_query_log_file /var/log/mysql_slow.log;6. 系统数据库深度解析MySQL有几个关键的系统数据库information_schema存储元数据performance_schema性能监控数据mysql用户权限等信息我最常查询的是information_schema比如查找大表SELECT TABLE_NAME, ROUND((DATA_LENGTHINDEX_LENGTH)/1024/1024,2) AS SIZE_MB FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN (information_schema,mysql,performance_schema) ORDER BY SIZE_MB DESC LIMIT 10;performance_schema对性能调优很有帮助。比如查看最耗资源的SQLSELECT * FROM performance_schema.events_statements_summary_by_digest ORDER BY SUM_TIMER_WAIT DESC LIMIT 5;7. 实战案例从问题发现到解决有一次客户报告系统变慢我通过以下步骤定位问题先用mysqladmin processlist发现大量查询堆积检查SHOW ENGINE INNODB STATUS发现锁等待用performance_schema定位到具体SQL分析执行计划发现缺失索引添加索引后问题解决整个过程用的全是命令行工具没有借助任何GUI。这让我深刻体会到掌握命令行工具就像学会了内功心法无论遇到什么情况都能应对自如。

更多文章