终极Bash数据库操作:MySQL与PostgreSQL命令行实战指南
你还在为数据库操作频繁切换工具?一行命令搞定所有数据库任务
当你在服务器上需要紧急导出数据时,还在苦等图形界面加载吗?当需要对比MySQL与PostgreSQL的查询性能时,是否在两个终端间疲于奔命?本文将彻底改变你的数据库操作方式,通过30+实战命令、8张对比表格和4个流程图,系统讲解如何用Bash一行命令掌控MySQL与PostgreSQL数据库。读完本文,你将掌握:
- 5秒连接任意数据库的密码安全方案
- 10类数据库运维任务的一行命令解决方案
- MySQL与PostgreSQL命令对比速查表
- 数据库性能监控与问题诊断的命令行神器
数据库连接:安全高效的认证方案
密码安全处理三剑客
# 方法1:环境变量传递(推荐)
export MYSQL_PWD='S3cur3P@ssw0rd'
mysql -u root -h db.example.com -e "SELECT NOW()"
# 方法2:配置文件读取
mysql --defaults-extra-file=<(echo -e "[client]\npassword=S3cur3P@ssw0rd") -u root dbname
# 方法3:加密存储与动态解密
gpg -d ~/.dbpass.gpg | mysql -u root -p$(cat) dbname
MySQL与PostgreSQL连接命令对比
| 任务 | MySQL命令 | PostgreSQL命令 | 共同参数 |
|---|---|---|---|
| 基本连接 | mysql -u user -p dbname | psql -U user -d dbname | -h指定主机 -P指定端口 |
| 执行单行查询 | mysql -e "SELECT 1" | psql -c "SELECT 1" | -t只显示数据 -s静默模式 |
| 脚本执行 | mysql < script.sql | psql -f script.sql | -v变量传递 --echo-all调试 |
| 套接字连接 | mysql --socket /tmp/mysql.sock | psql -h /var/run/postgresql | -U指定用户 -d指定数据库 |
数据查询:从简单检索到复杂统计
一行命令数据提取
# MySQL:获取用户表前10条记录(格式化输出)
mysql -u root -p$MYSQL_PWD -D mysql -B -e "SELECT host,user FROM user LIMIT 10" | column -t
# PostgreSQL:计算各部门平均工资(带表头)
psql -U postgres -d hr -t -c "SELECT department,AVG(salary) FROM employees GROUP BY department"
# 通用:查询结果保存为CSV(带表头)
mysql -B -e "SELECT * FROM products" | sed 's/\t/","/g;s/^/"/;s/$/"/' > products.csv
高级查询技巧
# 实时监控MySQL慢查询
mysql -e "SHOW PROCESSLIST" | grep -v "Sleep" | awk '$6>10 {print "KILL "$1";"}'
# PostgreSQL表空间使用情况
psql -c "SELECT pg_size_pretty(pg_tablespace_size(oid)),spcname FROM pg_tablespace" -t -A
数据备份与恢复:自动化方案
全量备份一行命令
# MySQL:压缩备份(包含存储过程和事件)
mysqldump -u root -p$MYSQL_PWD --all-databases --routines --events | gzip > backup_$(date +%F).sql.gz
# PostgreSQL:自定义格式备份(支持并行)
pg_dump -U postgres -F c -j 4 -f backup_$(date +%F).dump dbname
# 备份验证
zcat backup_2023-05-20.sql.gz | mysql -e "SELECT COUNT(*) FROM mysql.user" > /dev/null && echo "Backup OK"
增量数据提取
# MySQL:按时间戳导出增量数据
mysqlbinlog --start-datetime="2023-05-20 00:00:00" /var/log/mysql/binlog.000001 | grep -i "INSERT" > incremental.sql
# PostgreSQL:基于LSN的增量备份
pg_basebackup -D /backup/incremental -F p -X s -c fast -P
数据库管理:用户与权限控制
用户管理命令速查表
# 创建带权限的用户(MySQL)
mysql -e "CREATE USER 'appuser'@'%' IDENTIFIED BY 'Passw0rd'; GRANT SELECT,INSERT ON appdb.* TO 'appuser'@'%'"
# 创建带有效期的用户(PostgreSQL)
psql -c "CREATE ROLE appuser WITH LOGIN PASSWORD 'Passw0rd' VALID UNTIL '2024-01-01'; GRANT SELECT,INSERT ON ALL TABLES IN SCHEMA public TO appuser"
性能监控:一行命令诊断数据库健康
实时性能指标查询
# MySQL:查询性能TOP 10
mysql -e "SHOW GLOBAL STATUS LIKE 'Threads%'; SHOW GLOBAL STATUS LIKE 'Connections%'"
# PostgreSQL:连接数与锁等待
psql -c "SELECT count(*) FROM pg_stat_activity; SELECT count(*) FROM pg_locks WHERE NOT granted"
# 通用:数据库响应时间监控
while true; do
mysql -e "SELECT NOW()" > /dev/null
psql -c "SELECT NOW()" > /dev/null
sleep 1
done | ts '[%Y-%m-%d %H:%M:%S]'
数据导入导出:跨数据库迁移方案
高效数据迁移命令
# CSV导入MySQL
mysql -e "LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE users FIELDS TERMINATED BY ',' ENCLOSED BY '\"' IGNORE 1 ROWS"
# PostgreSQL表导出为JSON
psql -c "COPY (SELECT row_to_json(t) FROM users t) TO '/tmp/users.json'"
# MySQL到PostgreSQL迁移(一行命令)
mysqldump -u root -p$MYSQL_PWD --compatible=postgresql --no-create-info dbname table | psql -U postgres -d dbname -f -
总结:构建你的数据库命令军火库
本文系统梳理了MySQL与PostgreSQL的命令行操作技巧,从安全连接到性能监控,从数据迁移到权限管理,覆盖DBA日常工作的80%场景。记住三个黄金法则:
- 永远使用环境变量或配置文件传递密码,避免命令历史泄露
- 批量操作前先用
--dry-run参数验证(如mysqldump --dry-run) - 关键命令加入定时任务自动执行:
0 2 * * * mysql -e "ANALYZE TABLE users"
立即克隆项目开始你的命令行数据库之旅:
git clone https://gitcode.com/GitHub_Trending/ba/Bash-Oneliner
cd Bash-Oneliner
cp examples/db_scripts/* ~/.local/bin/
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



