Docker部署数据库和定时自动备份

阿涛 发布于 2024-09-16 34 次阅读


1:部署mysql数据库

Docker部署数据库很简单,下面我提供几个不同网络场景的命令

监听容器IP

docker run -d --name mysql -p 172.17.0.1:3306:3306 -v ./data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

共享宿主机网络

docker run -d --name mysql --network=host -v ./data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

连接到指定容器网络

docker run -d --name mysql --network my_network -v ./data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

2:数据库管理工具

phpmyadmin是一个轻量级的mysql管理面板,由mysql官方开发,支持mysqlmariadb数据库,功能强大,满足日常运维需求。下面是通过docker-compose.yaml部署的示例:

services:
  phpmyadmin:
    image: phpmyadmin:latest
    container_name: phpmyadmin
    ports:
      - "7890:80"              # 映射面板公网端口
    environment:
      - UPLOAD_LIMIT=128M                 # 设置上传文件大小限制
      # 数据库连接设置
      - PMA_HOST=mysql                    # MySQL 地址
      - PMA_PORT=3306                     # MySQL 端口号
      - PMA_DATABASE=mysql                # 默认连接的数据库名称
    
    networks:
      - home_default     # 连接到指定网络的网名

networks:
  home_default:
    external: true     # 加入已存在的网络

变量里我设置了文件上传限制,是为了方便迁移数据库和导入数据库,因为默认的限制太小了,备份文件大一点就会无法导入。还有就是由于Docker的网络特性,容器的各个网络不互通,想要连接到一个容器需要加入该容器所在的网络,所以这里我指定了网络,如果你不知道另一个容器的网络名称可以使用命令查看:

docker inspect -f '{{.HostConfig.NetworkMode}}' 容器名称或ID

替换实际的容器名称或者ID,如果你的mysql部署在宿主机的话也可以删掉网络配置,指定为host网络模式,修改上述配置的网络为:

network_mode: host

3:定时自动备份数据库

编程的世界里数据是无价的,一个好的程序员养成备份的习惯是基本素养,防止意外发生,最常见的就是服务器宕机了,导致数据丢失,下面我介绍一个我经常使用的一个数据库自动定时备份的工具,简单好用,适合小白。就是mysql-cron-backup这个项目,支持mysqlmariadb数据库,支持自动备份到对象存储,再也不怕一键删库跑路了。

通过docker-compose.yaml部署的示例:

services:
  backup-db:
    image: fradelg/mysql-cron-backup
    container_name: backup-db
    environment:
      - MYSQL_HOST=mysql                  # 数据库地址
      - MYSQL_PORT=3306                   # 数据库端口
      - MYSQL_USER=user                   # 数据库用户名
      - MYSQL_PASS=password               # 数据库密码
      - MYSQL_DATABASE=db_name            # 数据库名称
      - MAX_BACKUPS=10                    # 保留的备份数量,旧的备份将被清理
      - CRON_TIME=0 3 * * *               # 每天凌晨3点执行备份
    volumes:
      - ./backup:/backup          # 挂载本地目录用于保存备份
    restart: always

    networks:
      - home_default      # 连接到指定网络的名称

networks:
  home_default:
    external: true       # 加入已存在的网络

该配置会每天凌晨3点自动备份数据库到本地./backup目录,并且我配置了只保留最新的10个备份,防止占满存储。

想要恢复备份也是非常的简单,一条命令即可:

docker container exec backup-db /restore.sh ./backup/<your_sql_backup_gz_file>

该命令的意思是恢复当前目录内的./backup/<your_sql_backup_gz_file>文件,需替换具体备份的数据库文件名称。如果恢复成功,会输出Restore succeeded 否则会输出Restore failed,配置里我也是指定了Docker网络,如果你想要备份宿主机的数据库,同样的替换网络配置即可。

PS:定时备份PostgresSQL数据库

  • wechat_img
你剥开了一颗很酸的橘子而感到烦恼,可对于橘子来说,那是他的一切。
最后更新于 2024-09-17