You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在删除Docker容器前执行命令?MySQL数据库备份需求

How to Automate SQL Dump Before Deleting Your MySQL Docker Container

Absolutely you can set up a backup to run automatically before your MySQL container is deleted—no need to risk losing your data! Here are a few practical methods depending on your use case:

Method 1: Manual Backup First (Quick & Temporary)

If you're just doing a one-off delete, run the backup manually before removing the container:

  • Step 1: Export your database
    Use docker exec to run mysqldump directly in the container, saving the backup to your host machine:

    # Replace placeholders with your actual values
    MYSQL_PWD=your_root_password docker exec your-mysql-container mysqldump -u root --all-databases > /path/on/host/backups/mysql_backup_$(date +%Y%m%d).sql
    

    Using MYSQL_PWD avoids exposing your password in command history (never put a space after -p in the mysqldump command if you include the password directly).

  • Step 2: Delete the container
    Once the backup finishes safely, you can delete the container:

    docker rm your-mysql-container
    

Method 2: Automated Backup on Container Shutdown (For Permanent Setups)

If you want backups to run automatically every time the container is stopped/deleted, use a custom entrypoint script that listens for shutdown signals:

Step 1: Create a Backup Script

Make a file named mysql-backup.sh with the following content (adjust user/password logic if you're not using root):

#!/bin/bash

# Function to run backup when shutdown signal is received
handle_shutdown() {
    echo "Shutdown detected: Starting database backup..."
    # Use environment variable for password (set when running the container)
    mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" --all-databases > /backup/backup_$(date +%Y%m%d_%H%M%S).sql
    
    if [ $? -eq 0 ]; then
        echo "Backup completed successfully!"
    else
        echo "Warning: Backup failed!"
    fi

    # Gracefully stop MySQL
    mysqladmin -u root -p"$MYSQL_ROOT_PASSWORD" shutdown
}

# Trap SIGTERM (Docker's default stop signal) and SIGINT (Ctrl+C)
trap handle_shutdown SIGTERM SIGINT

# Start MySQL in the background
mysqld &

# Wait for MySQL process to finish
wait $!

Give the script executable permissions:

chmod +x mysql-backup.sh

Step 2: Build a Custom MySQL Image

Create a Dockerfile to package the script with the official MySQL image:

FROM mysql:latest

# Copy the backup script into the container
COPY mysql-backup.sh /usr/local/bin/

# Ensure the script is executable
RUN chmod +x /usr/local/bin/mysql-backup.sh

# Set the custom entrypoint
ENTRYPOINT ["/usr/local/bin/mysql-backup.sh"]

Build the image:

docker build -t mysql-with-auto-backup .

Step 3: Run the Container with a Backup Volume

Mount a host directory to /backup so backups are stored outside the container (critical—otherwise backups are deleted with the container):

docker run -d \
  -v /path/on/host/mysql-backups:/backup \
  -v mysql-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=your_secure_password \
  --name mysql-auto-backup \
  mysql-with-auto-backup

Now, whenever you run docker stop mysql-auto-backup or docker rm -f mysql-auto-backup, the container will first run the backup before shutting down.

Method 3: Docker Compose with Shutdown Hooks

If you use Docker Compose, you can add a shutdown trap directly in the command field, plus a grace period to ensure backups finish:

version: '3.8'
services:
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: your_secure_password
    volumes:
      - mysql-data:/var/lib/mysql
      - ./host-backups:/backup
    # Give 2 minutes for backups to complete before forced shutdown
    stop_grace_period: 2m
    command: >
      sh -c "
      trap '
        echo \"Starting backup...\";
        mysqldump -u root -p\"$MYSQL_ROOT_PASSWORD\" --all-databases > /backup/backup_$(date +%Y%m%d_%H%M%S).sql
      ' SIGTERM;
      mysqld
      "
volumes:
  mysql-data:

Run with docker-compose up -d, and when you stop the service with docker-compose down, the backup will run automatically.

Key Notes to Avoid Mistakes

  • Always use external volumes for both your MySQL data (/var/lib/mysql) and backups—never rely on container-only storage.
  • Adjust stop_grace_period based on your database size; large databases need more time to dump.
  • Test your backup script manually first to ensure it works before relying on it for automated shutdowns.

内容的提问来源于stack exchange,提问作者Alberto Corella

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:02:55