引言:数据库运维的核心地位
数据库是几乎所有应用系统的核心组件,其稳定性和性能直接决定了业务的可用性。对于运维工程师和DBA来说,高效的数据库远程管理能力至关重要。FinalShell作为一款专业的SSH终端工具,通过安全的SSH隧道连接,为数据库远程管理提供了安全、高效、便捷的操作环境。本文将系统讲解如何利用FinalShell管理MySQL、Redis、MongoDB三大主流数据库。
一、MySQL数据库管理
1.1 MySQL安装与初始配置
通过FinalShell SSH连接到数据库服务器后,安装并配置MySQL:
# CentOS/RHEL 安装MySQL 8.0
yum install -y mysql-server
systemctl start mysqld
systemctl enable mysqld
# Ubuntu/Debian 安装MySQL 8.0
apt-get update
apt-get install -y mysql-server
# 获取MySQL临时密码
grep 'temporary password' /var/log/mysqld.log
# 运行安全初始化向导
mysql_secure_installation
# 创建远程管理用户
mysql -uroot -p
CREATE USER 'admin'@'%' IDENTIFIED BY 'YourStrongPassword!2026';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
1.2 MySQL性能监控
结合FinalShell的服务器监控功能,实时监控MySQL性能:
# 查看MySQL运行状态概览
mysqladmin -uroot -p status
# 查看当前活动连接
mysql -uroot -p -e "SHOW PROCESSLIST\G"
# 查看关键性能指标
mysql -uroot -p -e "
SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Queries';
SHOW GLOBAL STATUS LIKE 'Slow_queries';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';
"
# 查看InnoDB引擎状态
mysql -uroot -p -e "SHOW ENGINE INNODB STATUS\G"
# 查看慢查询日志
mysql -uroot -p -e "
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
"
# 分析慢查询
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log
通过FinalShell实时监控MySQL数据库性能指标
1.3 MySQL备份与恢复
#!/bin/bash
# MySQL自动备份脚本
DB_USER="root"
DB_PASS="YourPassword"
BACKUP_DIR="/backup/mysql/$(date +%Y%m%d)"
RETENTION_DAYS=7
mkdir -p ${BACKUP_DIR}
# 全库逻辑备份
mysqldump -u${DB_USER} -p${DB_PASS} \
--all-databases \
--single-transaction \
--routines \
--triggers \
--events \
--flush-logs \
| gzip > ${BACKUP_DIR}/all_databases_$(date +%H%M%S).sql.gz
echo "备份大小: $(du -sh ${BACKUP_DIR} | awk '{print $1}')"
# 验证备份文件
gunzip -t ${BACKUP_DIR}/*.sql.gz
if [[ $? -eq 0 ]]; then
echo "备份验证通过"
else
echo "备份文件损坏!"
fi
# 清理过期备份
find /backup/mysql -type d -mtime +${RETENTION_DAYS} -exec rm -rf {} + 2>/dev/null
# 单库备份
# mysqldump -u${DB_USER} -p${DB_PASS} --single-transaction mydb > ${BACKUP_DIR}/mydb.sql
# 恢复数据库
# mysql -u${DB_USER} -p${DB_PASS} < backup.sql
# gunzip < backup.sql.gz | mysql -u${DB_USER} -p${DB_PASS}
1.4 MySQL性能优化配置
通过FinalShell编辑MySQL配置文件进行性能优化:
# 编辑 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# 基础设置
max_connections = 500
max_connect_errors = 100
wait_timeout = 600
interactive_timeout = 600
# InnoDB优化
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 4
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
# 查询缓存(MySQL 8.0已移除)
# query_cache_type = 1
# query_cache_size = 128M
# 日志设置
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
# 临时表
tmp_table_size = 256M
max_heap_table_size = 256M
# 排序和连接缓冲
sort_buffer_size = 4M
join_buffer_size = 4M
read_buffer_size = 2M
二、Redis缓存数据库管理
2.1 Redis安装与配置
# 安装Redis
# CentOS
yum install -y redis
# Ubuntu
apt-get install -y redis-server
# 启动Redis
systemctl start redis
systemctl enable redis
# 基础安全配置 - 编辑 /etc/redis/redis.conf
# 设置密码
requirepass YourRedisPassword2026
# 绑定地址(限制访问来源)
bind 127.0.0.1 192.168.1.100
# 禁用危险命令
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command CONFIG "REDIS_CONFIG_2026"
# 设置最大内存
maxmemory 2gb
maxmemory-policy allkeys-lru
# 重启Redis使配置生效
systemctl restart redis
2.2 Redis运维操作
# 连接Redis
redis-cli -a YourRedisPassword2026
# 查看Redis信息概览
redis-cli -a YourRedisPassword2026 INFO
# 查看内存使用情况
redis-cli -a YourRedisPassword2026 INFO memory
# 查看关键指标
redis-cli -a YourRedisPassword2026 INFO stats | grep -E "keyspace_hits|keyspace_misses|connected_clients|used_memory_human"
# 实时监控命令执行
redis-cli -a YourRedisPassword2026 MONITOR
# 查看慢日志
redis-cli -a YourRedisPassword2026 SLOWLOG GET 10
# 查看所有key的数量
redis-cli -a YourRedisPassword2026 DBSIZE
# 按模式查找key
redis-cli -a YourRedisPassword2026 SCAN 0 MATCH "user:*" COUNT 100
# 查看key的内存占用
redis-cli -a YourRedisPassword2026 MEMORY USAGE mykey
使用FinalShell终端管理Redis缓存数据库
2.3 Redis备份与持久化
# RDB快照备份
redis-cli -a YourRedisPassword2026 BGSAVE
# 查看最后一次RDB备份时间
redis-cli -a YourRedisPassword2026 LASTSAVE
# AOF持久化配置
# 编辑redis.conf
appendonly yes
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 手动触发AOF重写
redis-cli -a YourRedisPassword2026 BGREWRITEAOF
# 备份RDB文件
REDIS_DIR=$(redis-cli -a YourRedisPassword2026 CONFIG GET dir | tail -1)
cp ${REDIS_DIR}/dump.rdb /backup/redis/dump_$(date +%Y%m%d).rdb
# 从RDB恢复
# 1. 停止Redis
# 2. 复制备份文件到Redis数据目录
# 3. 启动Redis
三、MongoDB文档数据库管理
3.1 MongoDB安装与配置
# 安装MongoDB 7.0(Ubuntu)
apt-get install -y gnupg curl
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-7.0.list
apt-get update
apt-get install -y mongodb-org
# 启动MongoDB
systemctl start mongod
systemctl enable mongod
# 配置认证 - 编辑 /etc/mongod.conf
security:
authorization: enabled
net:
port: 27017
bindIp: 127.0.0.1,192.168.1.100
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 2
3.2 MongoDB日常运维
# 连接MongoDB
mongosh --host localhost --port 27017 -u admin -p
# 查看数据库列表
show dbs
# 查看集合列表
use mydb
show collections
# 查看数据库状态
db.stats()
# 查看集合统计信息
db.users.stats()
# 查看当前操作
db.currentOp()
# 查看慢查询
db.setProfilingLevel(1, { slowms: 100 })
db.system.profile.find().sort({ ts: -1 }).limit(10).pretty()
# 索引管理
db.users.getIndexes()
db.users.createIndex({ email: 1 }, { unique: true })
db.users.createIndex({ created_at: -1 })
# 查看索引使用情况
db.users.aggregate([{ $indexStats: {} }])
3.3 MongoDB备份与恢复
#!/bin/bash
# MongoDB自动备份脚本
BACKUP_DIR="/backup/mongodb/$(date +%Y%m%d)"
MONGO_HOST="localhost"
MONGO_PORT="27017"
MONGO_USER="admin"
MONGO_PASS="YourMongoPassword"
mkdir -p ${BACKUP_DIR}
# 全库备份
mongodump \
--host ${MONGO_HOST} \
--port ${MONGO_PORT} \
--username ${MONGO_USER} \
--password ${MONGO_PASS} \
--authenticationDatabase admin \
--gzip \
--out ${BACKUP_DIR}/full
echo "备份完成: $(du -sh ${BACKUP_DIR})"
# 单库备份
# mongodump --db mydb --gzip --out ${BACKUP_DIR}/mydb
# 恢复数据库
# mongorestore --gzip ${BACKUP_DIR}/full
# mongorestore --db mydb --gzip ${BACKUP_DIR}/mydb/mydb
# 清理过期备份
find /backup/mongodb -type d -mtime +7 -exec rm -rf {} + 2>/dev/null
FinalShell终端下的MongoDB数据库管理操作
四、SSH隧道安全访问数据库
4.1 为什么使用SSH隧道?
生产环境中的数据库通常不应直接暴露在公网。通过FinalShell的SSH隧道功能,可以安全地从本地访问远程数据库:
- 安全性:数据通过SSH加密隧道传输,避免明文暴露
- 便捷性:无需修改数据库安全组规则,降低攻击面
- 通用性:适用于所有基于TCP的数据库协议
4.2 配置SSH隧道
在FinalShell中配置SSH隧道连接数据库:
- 打开SSH连接设置
- 切换到"隧道"选项卡
- 添加本地端口转发规则
# SSH隧道配置示例
# MySQL隧道(将本地3307端口映射到远程MySQL的3306端口)
# 类型:本地转发
# 本地端口:3307
# 远程主机:127.0.0.1(数据库服务器本地地址)
# 远程端口:3306
# Redis隧道
# 本地端口:6380
# 远程主机:127.0.0.1
# 远程端口:6379
# MongoDB隧道
# 本地端口:27018
# 远程主机:127.0.0.1
# 远程端口:27017
# 配置完成后,本地GUI工具可以通过以下地址连接:
# MySQL: 127.0.0.1:3307
# Redis: 127.0.0.1:6380
# MongoDB: 127.0.0.1:27018
五、数据库监控自动化
5.1 统一数据库健康检查脚本
#!/bin/bash
# 多数据库统一健康检查
echo "====== 数据库健康检查 $(date) ======"
# MySQL检查
echo ""
echo "--- MySQL ---"
if mysqladmin -uroot -p${MYSQL_PASS} ping &>/dev/null; then
MYSQL_CONN=$(mysql -uroot -p${MYSQL_PASS} -e "SHOW STATUS LIKE 'Threads_connected'" -N 2>/dev/null | awk '{print $2}')
MYSQL_QPS=$(mysqladmin -uroot -p${MYSQL_PASS} extended-status 2>/dev/null | grep "Queries" | head -1 | awk '{print $4}')
MYSQL_SLOW=$(mysql -uroot -p${MYSQL_PASS} -e "SHOW STATUS LIKE 'Slow_queries'" -N 2>/dev/null | awk '{print $2}')
echo " 状态: 运行中"
echo " 当前连接数: ${MYSQL_CONN}"
echo " 总查询数: ${MYSQL_QPS}"
echo " 慢查询数: ${MYSQL_SLOW}"
else
echo " 状态: 已停止 ⚠️"
fi
# Redis检查
echo ""
echo "--- Redis ---"
if redis-cli -a ${REDIS_PASS} ping &>/dev/null; then
REDIS_MEM=$(redis-cli -a ${REDIS_PASS} INFO memory 2>/dev/null | grep "used_memory_human" | cut -d: -f2 | tr -d '\r')
REDIS_KEYS=$(redis-cli -a ${REDIS_PASS} DBSIZE 2>/dev/null | awk '{print $2}')
REDIS_CONN=$(redis-cli -a ${REDIS_PASS} INFO clients 2>/dev/null | grep "connected_clients" | cut -d: -f2 | tr -d '\r')
echo " 状态: 运行中"
echo " 内存使用: ${REDIS_MEM}"
echo " Key数量: ${REDIS_KEYS}"
echo " 连接数: ${REDIS_CONN}"
else
echo " 状态: 已停止 ⚠️"
fi
# MongoDB检查
echo ""
echo "--- MongoDB ---"
if mongosh --eval "db.adminCommand('ping')" &>/dev/null; then
echo " 状态: 运行中"
mongosh --quiet --eval "
var status = db.serverStatus();
print(' 当前连接数: ' + status.connections.current);
print(' 可用连接数: ' + status.connections.available);
print(' 内存使用: ' + Math.round(status.mem.resident) + 'MB');
" 2>/dev/null
else
echo " 状态: 已停止 ⚠️"
fi
5.2 数据库容量预警
#!/bin/bash
# 数据库容量预警脚本
WARN_THRESHOLD=80
CRIT_THRESHOLD=90
# MySQL数据库大小检查
echo "===== MySQL数据库大小 ====="
mysql -uroot -p${MYSQL_PASS} -e "
SELECT
table_schema AS '数据库',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS '大小(MB)',
COUNT(*) AS '表数量'
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema', 'performance_schema', 'mysql', 'sys')
GROUP BY table_schema
ORDER BY SUM(data_length + index_length) DESC;
" 2>/dev/null
# 检查数据目录磁盘使用率
MYSQL_DIR=$(mysql -uroot -p${MYSQL_PASS} -e "SHOW VARIABLES LIKE 'datadir'" -N 2>/dev/null | awk '{print $2}')
if [[ -n "${MYSQL_DIR}" ]]; then
USAGE=$(df ${MYSQL_DIR} | tail -1 | awk '{print $5}' | tr -d '%')
if [[ ${USAGE} -ge ${CRIT_THRESHOLD} ]]; then
echo "CRITICAL: MySQL数据目录磁盘使用率 ${USAGE}% 超过阈值!"
elif [[ ${USAGE} -ge ${WARN_THRESHOLD} ]]; then
echo "WARNING: MySQL数据目录磁盘使用率 ${USAGE}%"
fi
fi
自动化数据库健康检查和容量预警
六、数据库运维最佳实践
6.1 安全管理要点
- 最小权限原则:为不同应用创建独立的数据库用户,只授予必要的权限
- 网络隔离:数据库服务器不直接暴露公网,通过SSH隧道或VPN访问
- 定期审计:检查数据库用户权限,删除不再使用的账户
- 加密传输:启用SSL/TLS加密数据库连接
- 密码策略:使用强密码并定期轮换
6.2 备份策略建议
- 全量+增量:每周全量备份,每天增量备份
- 异地备份:将备份文件同步到其他服务器或对象存储
- 定期演练:每季度进行一次数据恢复演练
- 备份验证:每次备份后自动验证备份文件的完整性
- 保留策略:全量备份保留30天,增量备份保留7天
总结
数据库运维是一项需要耐心和细致的工作。通过FinalShell强大的SSH终端和SFTP功能,您可以高效、安全地管理远程数据库。本文涵盖了MySQL、Redis、MongoDB三大主流数据库的安装配置、性能监控、备份恢复和安全管理,提供了大量可直接使用的运维脚本和命令。建议将这些常用操作保存为FinalShell命令片段,结合定时任务实现自动化管理,让数据库运维更加省心省力。
立即下载最新版FinalShell,开始高效的数据库远程管理!