备份Docker部署的MySQL

一、MySQL备份脚本

1.本地部署的MySQL

1.1 备份脚本

# vi mysql_backup.sh
#!/bin/bash  
# MySQL连接参数  
USER="MySQL用户名"  
PASSWORD="MySQL密码"  
HOST="主机地址"  
PORT="3306"  
DATABASE="数据库名"  
  
# 备份文件存放目录  
BACKUP_DIR="/mnt/backup/mysql"  
  
# 当前的日期时间,用于备份文件名  
DATE=$(date +"%Y%m%d%H%M%S")  
  
# 完整的备份文件名  
BACKUP_FILE="$BACKUP_DIR/backup_$DATABASE_$DATE.sql"  
  
# 检查备份目录是否存在,如果不存在则创建  
if [ ! -d "$BACKUP_DIR" ]; then  
    mkdir -p "$BACKUP_DIR"  
    echo "已创建备份目录: $BACKUP_DIR"  
fi  
  
# 使用mysqldump进行备份  
mysqldump -h$HOST -P$PORT -u$USER -p$PASSWORD $DATABASE > "$BACKUP_FILE"  
  
# 检查备份是否成功  
if [ $? -eq 0 ]; then  
    echo "数据库 $DATABASE 已成功备份到 $BACKUP_FILE"  
else  
    echo "备份数据库时出错 $DATABASE"  
fi  
  
# (可选)删除旧的备份文件,例如只保留最近7天的备份  
# find $BACKUP_DIR -name "backup_$DATABASE_*.sql" -mtime +7 -delete

1.2 添加权限

# 添加执行权限
chmod +x mysql_backup.sh

1.3 执行脚本

./mysql_backup.sh

1.4 计划任务自动备份(可选)

# 每周六凌晨一点自动执行数据库备份脚本
# crontab -e
0 1 * * 6  /mnt/mysql_backup.sh

2.备份Docker部署的MySQL

注:如果MySQL是docker部署的,需将上方"1.1"数据库备份脚本拷贝到MySQL容器内执行。

# 将脚本复制到容器中  
docker cp ./mysql_backup.sh $CONTAINER_NAME_OR_ID:/tmp/ 
例:docker cp ./mysql_backup.sh  mysql:/tmp/
# 在容器中执行脚本  
# 注意:这里我们不需要-it选项,因为我们只是要执行命令,而不是交互式shell  
docker exec -it $CONTAINER_NAME_OR_ID  /bin/bash -c "/tmp/mysql_backup.sh"  

例:# docker exec -it  mysql  /bin/bash -c "/tmp/mysql_backup.sh"
     mysqldump: [Warning] Using a password on the command line interface can be insecure.
     数据库 oneapi 已成功备份到 /mnt/backup/mysql/backup_20240531095450.sql
# 如果LATEST_BACKUP_FILE为空,说明没有找到任何备份文件  
docker cp $CONTAINER_NAME_OR_ID:$BACKUP_DIR_IN_CONTAINER/$LATEST_BACKUP_FILE  $LOCAL_BACKUP_DIR/  
例:docker cp  mysql:/mnt/backup/mysql/backup_20240531095450.sql ./

注:脚本默认备份数据在docker容器中也有一份,为了避免备份文件占用mysql容器空间,建议登录容器中删除。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker部署MySQL 8主主(Master-Master)复制通常涉及创建两个或更多的容器,每个容器都是一个独立的MySQL实例,并且它们之间通过网络进行通信,共享数据。这里是一个简化的步骤概述: 1. **安装 Docker**:首先确保你的系统上已经安装了Docker。 2. **下载 MySQL Docker 镜像**:从Docker Hub拉取官方的MySQL镜像,例如`mysql:8.0` 或者包含主主复制功能的扩展版本,如`mysql:8.0-cluster`. 3. **配置镜像**: - 在启动命令中添加环境变量,比如设置`MYSQL_ROOT_PASSWORD`、`MYSQL_USER`和`MYSQL_PASSWORD`。 - 对于主主复制,你需要配置`bind-address`和`gtid_mode`为`on`,以及`cluster_address`参数以指定集群的其他节点。 ```bash docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_USER=myuser -e MYSQL_PASSWORD=mypassword -p 3306:3306 --gtid-mode on --bind-address=0.0.0.0 -e CLUSTER_ADDRESS=mysql2:3306 mysql:8.0-cluster ``` 4. **启动多个实例**: - 对于第二个主节点(如mysql2),使用相同的配置但集群地址指向第一个实例(mysql1)。 ```bash docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_USER=myuser -e MYSQL_PASSWORD=mypassword -p 3307:3306 --gtid-mode on --bind-address=0.0.0.0 -e CLUSTER_ADDRESS=mysql1:3306 mysql:8.0-cluster ``` 5. **监控和管理**: - 使用Docker Compose或者Kubernetes等工具自动化容器的启动、停止和管理。 - 安装如`percona-xtrabackup`这样的工具来进行定期备份和恢复。 6. **配置主主复制**: - 在集群启动后,需要手动或者使用一些自动化脚本配置主主复制,包括设置二进制日志、GTID和复制规则。 7. **故障转移**: - 在其中一个节点出现问题时,可以通过切换GTID设置自动将读写流量转移到另一个节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值