亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 後端開發(fā) php教程 透過Docker Compose、Nginx和MariaDB實(shí)現(xiàn)PHP應(yīng)用程式的資料備份與還原

透過Docker Compose、Nginx和MariaDB實(shí)現(xiàn)PHP應(yīng)用程式的資料備份與還原

Oct 12, 2023 am 11:14 AM
docker 資料備份 資料還原

通過Docker Compose、Nginx和MariaDB實(shí)現(xiàn)PHP應(yīng)用程序的數(shù)據(jù)備份與還原

透過Docker Compose、Nginx和MariaDB實(shí)現(xiàn)PHP應(yīng)用程式的資料備份與還原

#隨著雲(yún)端運(yùn)算與容器化技術(shù)的快速發(fā)展,越來越多的應(yīng)用程式選擇使用Docker來部署和運(yùn)行。在Docker生態(tài)系統(tǒng)中,Docker Compose是一個(gè)非常受歡迎的工具,它可以透過一個(gè)單一的設(shè)定檔來定義和管理多個(gè)容器。

本文將介紹如何使用Docker Compose、Nginx和MariaDB實(shí)作PHP應(yīng)用程式的資料備份與還原。我們將使用一個(gè)範(fàn)例專案來演示這個(gè)過程。

範(fàn)例專案結(jié)構(gòu)如下:

.
├── docker-compose.yml
├── nginx
│   └── default.conf
├── mariadb
│   ├── Dockerfile
│   └── init.sql
└── php
    ├── Dockerfile
    └── index.php

首先,我們需要建立一個(gè)docker-compose.yml檔案來定義整個(gè)專案的容器配置。範(fàn)例配置如下:

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

在上面的設(shè)定中,我們定義了三個(gè)服務(wù):Nginx、MariaDB和PHP。 Nginx服務(wù)負(fù)責(zé)處理HTTP請(qǐng)求,將請(qǐng)求轉(zhuǎn)送到PHP容器上的應(yīng)用程式;MariaDB服務(wù)提供資料庫服務(wù);PHP容器運(yùn)行PHP應(yīng)用程式。

接下來,我們需要建立一個(gè)Nginx設(shè)定檔default.conf,用於將HTTP請(qǐng)求轉(zhuǎn)送到PHP容器上的應(yīng)用程式。範(fàn)例配置如下:

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;
    }
}

在上面的設(shè)定中,我們定義了兩個(gè)location區(qū)塊。第一個(gè)location區(qū)塊用於處理靜態(tài)檔案請(qǐng)求,例如圖片、CSS和JavaScript檔案;第二個(gè)location區(qū)塊用於將PHP腳本請(qǐng)求轉(zhuǎn)送到PHP容器上的FastCGI進(jìn)程。

然後,我們需要建立一個(gè)MariaDB容器的Dockerfile和初始化腳本init.sql。範(fàn)例Dockerfile如下:

FROM mariadb:latest

COPY init.sql /docker-entrypoint-initdb.d

範(fàn)例init.sql腳本用於建立一個(gè)mydb資料庫和一個(gè)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
);

最後,我們需要建立一個(gè)PHP容器的Dockerfile和一個(gè)範(fàn)例的PHP應(yīng)用程式index.php。範(fàn)例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

範(fàn)例index.php應(yīng)用程式用於示範(fàn)資料備份和還原的過程:

<?php

$dbHost = 'mariadb';
$dbUser = 'root';
$dbPass = '123456';
$dbName = 'mydb';

try {
    $pdo = new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPass, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]);

    // 插入數(shù)據(jù)
    $pdo->exec("INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')");

    // 查詢數(shù)據(jù)
    $stmt = $pdo->query("SELECT * FROM users");
    $users = $stmt->fetchAll();

    // 打印數(shù)據(jù)
    foreach ($users as $user) {
        echo $user['name'] . ' (' . $user['email'] . ')' . PHP_EOL;
    }

} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

現(xiàn)在,我們可以執(zhí)行docker- compose up指令來啟動(dòng)整個(gè)專案。在瀏覽器中存取http://localhost,應(yīng)該可以看到插入的資料和列印的結(jié)果。

為了實(shí)現(xiàn)資料備份,我們可以新增一個(gè)Shell腳本來定期執(zhí)行資料庫備份作業(yè)。範(fàn)例腳本如下:

#!/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命令執(zhí)行mysqldump指令來匯出資料庫,並將匯出的資料儲(chǔ)存到備份檔案。

為了實(shí)現(xiàn)資料還原,我們可以建立一個(gè)Shell腳本來執(zhí)行資料庫還原作業(yè)。範(fàn)例腳本如下:

#!/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

上述腳本會(huì)使用docker exec指令將備份檔案中的資料匯入到資料庫中。

透過上述步驟,我們成功地使用Docker Compose、Nginx和MariaDB實(shí)現(xiàn)了PHP應(yīng)用程式的資料備份與還原。透過定期執(zhí)行備份腳本,我們可以建立資料庫的快照,以便在需要時(shí)進(jìn)行還原。這為我們的應(yīng)用程式提供了更高的可用性和容錯(cuò)性。

以上是透過Docker Compose、Nginx和MariaDB實(shí)現(xiàn)PHP應(yīng)用程式的資料備份與還原的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
.NET Core快速入門教程 1、開篇:說說.NET Core的那些事兒 .NET Core快速入門教程 1、開篇:說說.NET Core的那些事兒 May 07, 2025 pm 04:54 PM

一、.NETCore的起源談到.NETCore,就不能不提它的前身.NET。當(dāng)年Java風(fēng)頭正盛,微軟也對(duì)Java青睞有加,Windows平臺(tái)上的Java虛擬機(jī)就是微軟依據(jù)JVM標(biāo)準(zhǔn)開發(fā)的,據(jù)稱是當(dāng)時(shí)性能最佳的Java虛擬機(jī)。然而,微軟有自己的小算盤,試圖將Java與Windows平臺(tái)捆綁,增加一些Windows特有的功能。 Sun公司對(duì)此不滿,導(dǎo)致雙方關(guān)係破裂,微軟隨後推出了.NET。 .NET從誕生之初就借鑒了Java的許多特性,並在語言特性和窗體開發(fā)等方面逐漸超越了Java。 Java在1.6版

怎樣開發(fā)一個(gè)完整的PythonWeb應(yīng)用程序? 怎樣開發(fā)一個(gè)完整的PythonWeb應(yīng)用程序? May 23, 2025 pm 10:39 PM

要開發(fā)一個(gè)完整的PythonWeb應(yīng)用程序,應(yīng)遵循以下步驟:1.選擇合適的框架,如Django或Flask。 2.集成數(shù)據(jù)庫,使用ORM如SQLAlchemy。 3.設(shè)計(jì)前端,使用Vue或React。 4.進(jìn)行測(cè)試,使用pytest或unittest。 5.部署應(yīng)用,使用Docker和平臺(tái)如Heroku或AWS。通過這些步驟,可以構(gòu)建出功能強(qiáng)大且高效的Web應(yīng)用。

Docker vs. Kubernetes:主要差異和協(xié)同作用 Docker vs. Kubernetes:主要差異和協(xié)同作用 May 01, 2025 am 12:09 AM

Docker和Kubernetes是容器化和編排的領(lǐng)軍者。 Docker專注於容器生命週期管理,適合小型項(xiàng)目;Kubernetes則擅長(zhǎng)容器編排,適用於大規(guī)模生產(chǎn)環(huán)境。兩者結(jié)合可提升開發(fā)和部署效率。

查看Docker容器內(nèi)部進(jìn)程信息的方法 查看Docker容器內(nèi)部進(jìn)程信息的方法 May 19, 2025 pm 09:06 PM

查看Docker容器內(nèi)部進(jìn)程信息有三種方法:1.使用dockertop命令,可以列出容器內(nèi)所有進(jìn)程,顯示PID、用戶、命令等信息;2.使用dockerexec進(jìn)入容器內(nèi)部,再用ps或top命令查看詳細(xì)進(jìn)程信息;3.使用dockerstats命令,實(shí)時(shí)顯示容器資源使用情況,結(jié)合dockertop可全面了解容器性能。

如何在Ubuntu上部署PyTorch應(yīng)用 如何在Ubuntu上部署PyTorch應(yīng)用 May 29, 2025 pm 11:18 PM

在Ubuntu上部署PyTorch應(yīng)用可以通過以下步驟完成:1.安裝Python和pip首先,確保你的系統(tǒng)上已經(jīng)安裝了Python和pip。你可以使用以下命令來安裝它們:sudoaptupdatesudoaptinstallpython3python3-pip2.創(chuàng)建虛擬環(huán)境(可選)為了隔離你的項(xiàng)目環(huán)境,建議創(chuàng)建一個(gè)虛擬環(huán)境:python3-mvenvmyenvsourcemyenv/bin/activat

Debian上Jenkins部署性能調(diào)優(yōu) Debian上Jenkins部署性能調(diào)優(yōu) May 28, 2025 pm 04:51 PM

在Debian上部署和調(diào)優(yōu)Jenkins是一個(gè)涉及多個(gè)步驟的過程,包括安裝、配置、插件管理和性能優(yōu)化。以下是一個(gè)詳細(xì)的指南,幫助你實(shí)現(xiàn)高效的Jenkins部署。安裝Jenkins首先,確保你的系統(tǒng)已經(jīng)安裝了Java環(huán)境。 Jenkins需要Java運(yùn)行時(shí)環(huán)境(JRE)才能正常運(yùn)行。 sudoaptupdatesudoaptinstallopenjdk-11-jdk驗(yàn)證Java安裝成功:java-version接下來,添加J

批量停止Docker容器的高效操作方法 批量停止Docker容器的高效操作方法 May 19, 2025 pm 09:03 PM

批量停止Docker容器的高效方法包括使用基本命令和工具。 1.使用dockerstop$(dockerps-q)命令,並可調(diào)整超時(shí)時(shí)間,如dockerstop-t30$(dockerps-q)。 2.利用dockerps的過濾選項(xiàng),如dockerstop$(dockerps-q--filter"label=app=web")。 3.使用DockerCompose命令docker-composedown。 4.編寫腳本按順序停止容器,如停止db、app和web容器。

比較不同Docker鏡像版本差異的方法 比較不同Docker鏡像版本差異的方法 May 19, 2025 pm 09:00 PM

比較不同Docker鏡像版本差異的方法有兩種:1.使用dockerdiff命令查看容器文件系統(tǒng)變化;2.使用dockerhistory命令查看鏡像構(gòu)建層級(jí)差異。這些方法有助於理解和優(yōu)化鏡像版本管理。

See all articles