### [通过Docker Compose、Nginx和MariaDB实现PHP应用程序的数据备份与还原](https://www.prosaas.cn/article/12331) **Published:** 2023-10-12T03:14:02 **Author:** 5201314 **Excerpt:** 通过Docker Compose、Nginx和MariaDB实现PHP应用程序的数据备份与还原随着云计算和容器… ![20231212153939491](https://zhiqipro.oss-cn-beijing.aliyuncs.com/2023/10/20231212153939491.jpg "20231212153939491") 通过Docker Compose、Nginx和MariaDB实现PHP应用程序的数据备份与还原 随着云计算和容器化技术的快速发展,越来越多的应用程序选择使用Docker来部署和运行。在Docker生态系统中,Docker Compose是一个非常受欢迎的工具,它可以通过一个单一的配置文件来定义和管理多个容器。 本文将介绍如何使用Docker Compose、Nginx和MariaDB实现PHP应用程序的数据备份与还原。我们将使用一个示例项目来演示这个过程。 示例项目结构如下: . ├── docker-compose.yml ├── nginx │ └── default.conf ├── mariadb │ ├── Dockerfile │ └── init.sql └── php ├── Dockerfile └── index.php 首先,我们需要创建一个`docker-compose.yml`文件来定义整个项目的容器配置。示例配置如下: version: '3' services: nginx: image: nginx:latest ports: - 80:80 volumes: - ./nginx:/etc/nginx/conf.d - ./php:/var/www/html depends\_on: - php mariadb: build: context: ./mariadb environment: - MYSQL\_ROOT\_PASSWORD=123456 - MYSQL\_DATABASE=mydb volumes: - ./mariadb/data:/var/lib/mysql ports: - 3306:3306 php: build: context: ./php volumes: - ./php:/var/www/html 在上面的配置中,我们定义了三个服务:Nginx、MariaDB和PHP。Nginx服务负责处理HTTP请求,将请求转发到PHP容器上的应用程序;MariaDB服务提供数据库服务;PHP容器运行PHP应用程序。 接下来,我们需要创建一个Nginx配置文件`default.conf`,用于将HTTP请求转发到PHP容器上的应用程序。示例配置如下: server { listen 80; server\_name localhost; root /var/www/html; location / { try\_files $uri $uri/ /index.php?$query\_string; } location ~ .php$ { try\_files $uri =404; fastcgi\_pass php:9000; fastcgi\_index index.php; fastcgi\_param SCRIPT\_FILENAME $document\_root$fastcgi\_script\_name; include fastcgi\_params; } } 在上面的配置中,我们定义了两个location块。第一个location块用于处理静态文件请求,例如图片、CSS和JavaScript文件;第二个location块用于将PHP脚本请求转发到PHP容器上的FastCGI进程。 然后,我们需要创建一个MariaDB容器的Dockerfile和初始化脚本`init.sql`。示例Dockerfile如下: FROM mariadb:latest COPY init.sql /docker-entrypoint-initdb.d 示例`init.sql`脚本用于创建一个`mydb`数据库和一个`users`表: CREATE DATABASE IF NOT EXISTS mydb; USE mydb; CREATE TABLE IF NOT EXISTS users ( id INT PRIMARY KEY AUTO\_INCREMENT, name VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL ); 最后,我们需要创建一个PHP容器的Dockerfile和一个示例的PHP应用程序`index.php`。示例Dockerfile如下: FROM php:7.4-fpm RUN apt-get update && apt-get install -y zlib1g-dev libzip-dev RUN docker-php-ext-install zip pdo\_mysql COPY index.php /var/www/html 示例`index.php`应用程序用于演示数据备份和还原的过程: PDO::ERRMODE\_EXCEPTION, PDO::ATTR\_DEFAULT\_FETCH\_MODE => PDO::FETCH\_ASSOC \]); // 插入数据 $pdo->exec("INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')"); // 查询数据 $stmt = $pdo->query("SELECT \* FROM users"); $users = $stmt->fetchAll(); // 打印数据 foreach ($users as $user) { echo $user\['name'\] . ' (' . $user\['email'\] . ')' . PHP\_EOL; } } catch (PDOException $e) { echo "Error: " . $e->getMessage(); } 现在,我们可以运行`docker-compose up`命令来启动整个项目。在浏览器中访问`http://localhost`,应该能够看到插入的数据和打印的结果。 为了实现数据备份,我们可以添加一个Shell脚本来定期执行数据库备份操作。示例脚本如下: #!/bin/bash BACKUP\_DIR="/path/to/backup" DATE=$(date +%Y%m%d%H%M%S) BACKUP\_FILE="$BACKUP\_DIR/mydb\_$DATE.sql" docker exec -i CONTAINER\_NAME mysqldump -uroot -p123456 mydb > $BACKUP\_FILE if \[ $? -eq 0 \]; then echo "Backup completed: $BACKUP\_FILE" else echo "Backup failed" fi 上面的脚本首先定义了备份目录和备份文件名。然后,它使用`docker exec`命令执行`mysqldump`命令来导出数据库,并将导出的数据保存到备份文件中。 为了实现数据还原,我们可以创建一个Shell脚本来执行数据库还原操作。示例脚本如下: #!/bin/bash BACKUP\_FILE="/path/to/backup/mydb\_20210101120000.sql" docker exec -i CONTAINER\_NAME mysql -uroot -p123456 mydb < $BACKUP\_FILE if \[ $? -eq 0 \]; then echo "Restore completed" else echo "Restore failed" fi 上述脚本会使用`docker exec`命令将备份文件中的数据导入到数据库中。 通过上述步骤,我们成功地使用Docker Compose、Nginx和MariaDB实现了PHP应用程序的数据备份与还原。通过定期执行备份脚本,我们可以创建数据库的快照,以便在需要时进行还原。这为我们的应用程序提供了更高的可用性和容错性。 以上就是通过Docker Compose、Nginx和MariaDB实现PHP应用程序的数据备份与还原的详细内容,更多请关注知企PROSAAS其它相关文章! **Tags:** css, default, docker, http, JavaScript, location, mariadb, nginx, php, sql **Categories:** 后端开发 ---