Debian MariaDB定期维护指南
备份是数据库定期维护的重中之重,需确保数据安全与可恢复性。
mysqldump(原生支持,生成SQL脚本,适合小到中型数据库);对于生产环境,可选择Percona XtraBackup(支持热备份,不锁表,适合大型数据库)。mysqldump --single-transaction --flush-logs实现)。cron定时任务调度备份脚本。例如,每日凌晨2点执行全备份的脚本(保存为/usr/local/bin/mysql_daily_backup.sh):#!/bin/bash
BACKUP_DIR="/var/backups/mariadb"
DATE=$(date +"%Y-%m-%d")
mkdir -p "$BACKUP_DIR/$DATE"
mysqldump -u root -p'your_password' --all-databases --single-transaction --quick --lock-tables=false > "$BACKUP_DIR/$DATE/full_backup_$DATE.sql"
find "$BACKUP_DIR" -type d -mtime +7 -exec rm -rf {} \;  # 删除7天前的备份
添加cron任务:crontab -e → 输入0 2 * * * /usr/local/bin/mysql_daily_backup.sh。mysql -u root -p dbname < backup_file.sql),确保备份有效性。合理管理日志可避免磁盘空间耗尽,同时保留关键信息用于故障排查。
/etc/mysql/mariadb.conf.d/50-server.cnf:[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 2  # 超过2秒的查询视为慢查询
log_queries_not_using_indexes = 1  # 记录未使用索引的查询
重启服务生效:sudo systemctl restart mariadb。/var/log/mysql/error.log,定期检查(如每周)是否有启动错误、连接异常或查询报错。logrotate工具自动轮转日志(避免单个日志文件过大)。创建/etc/logrotate.d/mysql文件:/var/log/mysql/*.log {
    weekly
    missingok
    rotate 4
    compress
    delaycompress
    notifempty
    create 640 mysql adm
    sharedscripts
    postrotate
        systemctl reload mariadb > /dev/null 2>&1 || true
    endscript
}
此配置表示每周轮转日志,保留最近4周的压缩日志。定期优化表可整理碎片、回收空间,更新统计信息可帮助优化器生成更优的执行计划。
OPTIMIZE TABLE your_table_name;
对于大型表,建议在业务低峰期执行(可能锁表,影响写入)。ANALYZE TABLE your_table_name;
cron每周执行一次优化与统计更新(保存为/usr/local/bin/mysql_optimize_tables.sh):#!/bin/bash
MYSQL_USER="root"
MYSQL_PASS="your_password"
DATABASE="your_database"
mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" "$DATABASE" -e "SHOW TABLES" | grep -v "Tables_in_" | while read table; do
    echo "Optimizing $table..."
    mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" "$DATABASE" -e "OPTIMIZE TABLE $table; ANALYZE TABLE $table;"
done
添加cron任务:crontab -e → 输入0 3 * * 0 /usr/local/bin/mysql_optimize_tables.sh(每周日凌晨3点执行)。定期进行安全检查与配置更新,降低数据库被攻击的风险。
mysql_secure_installation,完成以下操作:设置root密码、移除匿名用户、禁止root远程登录、移除测试数据库。/etc/mysql/mariadb.conf.d/50-server.cnf,将bind-address设置为127.0.0.1(仅允许本地访问);若需远程访问,需添加可信IP的白名单。apt更新MariaDB到最新稳定版本(修复安全漏洞):sudo apt update
sudo apt upgrade mariadb-server mariadb-client
更新前建议备份数据库。定期监控性能指标,识别瓶颈并进行针对性优化。
mytop(实时查看查询与线程状态,安装:sudo apt install mytop)、mysqladmin(查看服务器状态,如mysqladmin -u root -p processlist查看当前连接)。Prometheus + Grafana(可视化监控指标,如QPS、TPS、连接数)、Percona Monitoring and Management (PMM)(专为MariaDB设计,提供性能分析与优化建议)。SHOW GLOBAL STATUS LIKE 'Slow_queries';);SHOW GLOBAL STATUS LIKE 'Threads_connected';),避免超过max_connections设置;SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_hit%';),理想值应大于95%(若低于90%,需增大innodb_buffer_pool_size)。SHOW INDEX FROM your_table_name;),删除未使用或重复的索引(减少写操作开销)。