温馨提示×

如何在Ubuntu上实现MariaDB自动化运维

小樊
37
2025-10-16 14:33:58
栏目: 云计算

在Ubuntu上实现MariaDB自动化运维的完整方案

一、前置准备:系统与工具安装

在开始自动化运维前,需确保Ubuntu系统已完成基础配置,并安装必要的自动化工具。首先更新系统软件包列表:

sudo apt update && sudo apt upgrade -y 

安装常用工具(如wgetcurlunzip)及数据库客户端:

sudo apt install -y wget curl unzip mysql-client 

二、自动化部署:Ansible实现批量配置

使用Ansible实现MariaDB的一键部署配置标准化,避免手动操作的错误与不一致性。

  1. 安装Ansible
    sudo apt install -y ansible 
  2. 创建MariaDB Playbook
    新建mariadb_setup.yml文件,定义安装、配置、启动等步骤(支持变量驱动,如mysql_root_password):
    --- - hosts: all become: yes vars: mysql_root_password: "YourSecureRootPassword" # 替换为实际密码 tasks: - name: Install MariaDB Server apt: name: mariadb-server state: present update_cache: yes - name: Secure MariaDB Installation command: > mysql_secure_installation --set-root-password="{{ mysql_root_password }}" --remove-anonymous-users --disable-remote-root --remove-test-database --silent  - name: Enable MariaDB Service on Boot service: name: mariadb enabled: yes - name: Start MariaDB Service service: name: mariadb state: started 
  3. 运行Playbook
    通过inventory文件(如hosts.ini)指定目标服务器,执行自动化部署:
    ansible-playbook -i hosts.ini mariadb_setup.yml 

三、自动备份:Shell脚本+Cron定时任务

定期备份是数据安全的核心,通过Shell脚本封装mysqldump命令,并用Cron调度执行。

  1. 编写备份脚本
    新建/usr/local/bin/mariadb_backup.sh,实现全量备份压缩过期清理
    #!/bin/bash BACKUP_DIR="/var/backups/mariadb" DATE=$(date +%F) LOG_FILE="/var/log/mariadb_backup.log" # 创建备份目录(若不存在) mkdir -p "$BACKUP_DIR" # 执行全量备份(压缩存储) mysqldump -u root -p"{{ mysql_root_password }}" --all-databases --single-transaction --quick --lock-tables=false | gzip > "$BACKUP_DIR/full_backup_$DATE.sql.gz" # 删除7天前的备份(保留最近7天) find "$BACKUP_DIR" -name "full_backup_*.sql.gz" -mtime +7 -exec rm -f {} \; # 记录日志 echo "[$(date)] Backup completed: $BACKUP_DIR/full_backup_$DATE.sql.gz" >> "$LOG_FILE" 
    赋予脚本可执行权限:
    chmod +x /usr/local/bin/mariadb_backup.sh 
  2. 配置Cron定时任务
    编辑当前用户的Cron表(crontab -e),添加每日凌晨2点执行的备份任务:
    0 2 * * * /usr/local/bin/mariadb_backup.sh 

四、监控与告警:Prometheus+Grafana可视化

通过Prometheus采集MariaDB性能指标,Grafana实现可视化,并设置阈值告警(如CPU使用率>80%、连接数超标)。

  1. 安装Prometheus
    下载并安装Prometheus(参考官方文档),配置prometheus.yml添加MariaDB exporter目标:
    scrape_configs: - job_name: 'mariadb' static_configs: - targets: ['localhost:9104'] # MariaDB exporter默认端口 
  2. 安装MariaDB Exporter
    使用mysqld_exporter采集MariaDB指标(需提前配置Prometheus用户权限):
    wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.16.1/mysqld_exporter-0.16.1.linux-amd64.tar.gz tar xvfz mysqld_exporter-*.tar.gz cd mysqld_exporter-* ./mysqld_exporter --config.my-cnf=/etc/mysql/conf.d/prometheus.cnf & 
    (注:需创建/etc/mysql/conf.d/prometheus.cnf文件,配置Prometheus用户权限:[client] user=prometheus password=yourpassword
  3. 安装Grafana并配置告警
    安装Grafana(sudo apt install -y grafana),导入MariaDB监控Dashboard(如ID:11074),设置告警规则(如“当mysql_global_status_threads_connected>100时触发邮件告警”)。

五、服务状态管理:Shell脚本+Systemd

自动化监控MariaDB服务状态,异常时自动重启,确保服务高可用。

  1. 编写服务监控脚本
    新建/usr/local/bin/mariadb_monitor.sh,检查服务是否运行,未运行则重启:
    #!/bin/bash SERVICE="mariadb" LOG_FILE="/var/log/mariadb_monitor.log" # 检查服务状态 if ! systemctl is-active --quiet "$SERVICE"; then echo "[$(date)] $SERVICE is not running. Attempting to restart..." >> "$LOG_FILE" systemctl restart "$SERVICE" if systemctl is-active --quiet "$SERVICE"; then echo "[$(date)] $SERVICE restarted successfully." >> "$LOG_FILE" else echo "[$(date)] Failed to restart $SERVICE." >> "$LOG_FILE" fi else echo "[$(date)] $SERVICE is running normally." >> "$LOG_FILE" fi 
    赋予可执行权限:
    chmod +x /usr/local/bin/mariadb_monitor.sh 
  2. 配置Cron定时任务
    每5分钟检查一次服务状态:
    */5 * * * * /usr/local/bin/mariadb_monitor.sh 

六、安全与优化:自动化加固与性能调优

  1. 自动化安全加固
    使用Ansible Role(如geerlingguy.mysql)自动执行安全脚本,包括:
    • 删除匿名用户:DELETE FROM mysql.user WHERE User='';
    • 禁止远程root登录:REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%';
    • 更新root密码:SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
      (参考Ansible Role: MySQL的security任务)
  2. 性能优化
    使用mysqltuner工具分析数据库性能,生成优化建议(如调整innodb_buffer_pool_sizemax_connections):
    wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl perl mysqltuner.pl --host localhost --user root --pass "{{ mysql_root_password }}" 
    根据建议修改/etc/mysql/mariadb.conf.d/50-server.cnf配置文件,重启服务生效:
    sudo systemctl restart mariadb 

通过以上步骤,可实现MariaDB在Ubuntu上的全生命周期自动化运维,覆盖部署、备份、监控、服务管理及安全优化等环节,显著提升运维效率与系统可靠性。

0