Rumah rangka kerja php ThinkPHP Cara menggunakan ThinkPHP6 untuk melaksanakan sandaran dan pemulihan pangkalan data

Cara menggunakan ThinkPHP6 untuk melaksanakan sandaran dan pemulihan pangkalan data

Jun 20, 2023 pm 07:25 PM
thinkphp pulih Sandaran pangkalan data

Dalam proses membangunkan sistem perniagaan, pangkalan data adalah bahagian yang sangat penting. Oleh itu, membuat sandaran dan memulihkan pangkalan data adalah operasi yang sangat diperlukan. Artikel ini akan menggabungkan contoh rangka kerja ThinkPHP6 untuk memperkenalkan cara menggunakan ThinkPHP6 untuk melaksanakan sandaran dan pemulihan pangkalan data.

1. Sandaran pangkalan data

1.1 Penyediaan persekitaran

Sebelum melakukan sandaran pangkalan data, anda perlu mengesahkan perkara berikut:

1 untuk menyediakan alamat direktori bin, dan menambah laluannya ke pembolehubah Laluan sistem; pada mesin di mana pangkalan data berada. Pengguna mempunyai kuasa untuk melaksanakan perintah mysqldump pada pangkalan data.

1.2 Pelaksanaan sandaran pangkalan data

1.2.1 Konfigurasikan parameter sandaran

Buat fail pangkalan data.php dalam folder konfigurasi, tetapkan maklumat sambungan pangkalan data dan parameter yang diperlukan untuk sandaran.

<?php
return [
    // 数据库类型
    'type'        => 'mysql',
    // 数据库连接DSN配置
    'dsn'         => '',
    // 服务器地址
    'hostname'    => 'localhost',
    // 数据库名
    'database'    => 'test',
    // 数据库用户名
    'username'    => 'root',
    // 数据库密码
    'password'    => 'root',
    // 数据库连接端口
    'hostport'    => '3306',
    // 数据库连接参数
    'params'      => [],
    // 数据库编码默认采用utf8
    'charset'     => 'utf8',
    // 数据库表前缀
    'prefix'      => 'think_',
    // 数据库调试模式
    'debug'       => false,
    // 数据库备份路径,没有则自动创建
    'path'        => '',
    // 数据库备份卷大小,单位为字节,设为0表示不限制备份大小
    'part'        => 20971520,
    // 数据库备份文件压缩格式,这里是gzip
    'compress'    => 'gzip',
    // 数据库备份文件名
    'filename'    => '',
    // 数据库备份文件是否需要压缩
    'zip'         => true,
    // 数据库备份文件是否需要分卷备份
    'split'       => true,
    // 数据库备份时是否将存储过程和触发器一起备份
    'level'       => 9,
    // 数据库备份文件的存储路径,最好为绝对路径,这也是最关键的路径
    'path'        => '/data/mysql/',
];
Salin selepas log masuk

1.2.2 Menulis kod sandaran

Buat fail BackupController.php di bawah apl/pengawal dan tambah kod berikut.

<?php
declare(strict_types=1);

namespace appcontroller;

use thinkacadeDb;

class BackupController
{
    protected $backupConfig;

    public function __construct()
    {
        $this->backupConfig = config('database');
    }

    public function backup()
    {
        // 防止备份数据过程超时
        set_time_limit(0);

        $database = $this->backupConfig['database'];
        $filename = date('Ymd-His', time()) . ".sql";
        $path = $this->backupConfig['path'].$filename;

        // 检查目录是否存在或者是否有权限写入
        if(!is_dir($this->backupConfig['path'])){
            mkdir($this->backupConfig['path'], 0755, true);
        }else{
            if(!is_writeable($this->backupConfig['path'])){
                chmod($this->backupConfig['path'], 0755);
            }
        }

        // 备份所有数据表
        $result = Db::query("SHOW TABLES");

        $tables = array();
        foreach($result as $index => $row){
            $tables[] = $row['Tables_in_'.$database];
        }

        // 备份所有表结构和表数据
        $content = '';
        foreach($tables as $table){
            $content = $content . "/*" . PHP_EOL;
            $content = $content . "表名:" . $table . PHP_EOL;
            $content = $content . "表结构:" . PHP_EOL;
            $content = $content . "*/" . PHP_EOL;
            $content = $content . $this->backupTableSchema($table);
            $content = $content . "/*" . PHP_EOL;
            $content = $content . "表数据:" . PHP_EOL;
            $content = $content . "*/" . PHP_EOL;
            $content = $content . $this->buildInsertSql($table);
        }

        // 是否需要压缩
        if ($this->backupConfig['zip']) {
            $zip = new ZipArchive();
            $zipfilename = $this->backupConfig['path'] . date('Ymd-His', time()) . ".zip";
            if ($zip->open($zipfilename, ZipArchive::OVERWRITE) === TRUE) {
                $zip->addFile($path,$filename);
                $zip->close();
                // 删除非压缩的文件
                unlink($path);
            } else {
                // 备份失败
            }
        }
    }

    // 备份表结构
    protected function backupTableSchema($table)
    {
        $database = $this->backupConfig['database'];
        $result = Db::query("SHOW CREATE TABLE `" . $table . "`");
        $create = $result[0]['Create Table'] . ";" . PHP_EOL.PHP_EOL;
        return $create;
    }

    // 备份表数据
    protected function buildInsertSql($table)
    {
        $database = $this->backupConfig['database'];
        $result = Db::query("SELECT * FROM `" . $table . "`");
        $insert = '';
        foreach ($result as $key => $value) {
            $keys = array_keys($value);
            $values = array_map(array(Db::class, 'quote'), array_values($value));
            $values = join(",", $values);
            $insert .= "INSERT INTO `" . $table . "` (`" . join("`,`", $keys) . "`) VALUES (" . $values . ");" . PHP_EOL;
        }
        $insert .= PHP_EOL;
        return $insert;
    }
}
Salin selepas log masuk

1.2.3 Lakukan sandaran

Masukkan alamat url berikut dalam penyemak imbas untuk melakukan sandaran:

http://localhost/backup/backup
Salin selepas log masuk

1.3 Pemulihan pangkalan data

1.3.1 Tulis kod pemulihan

Buat fail RecoveryController.php di bawah apl/pengawal dan tambah kod berikut.

<?php
declare(strict_types=1);

namespace appcontroller;

use thinkacadeDb;

class RecoveryController
{
    protected $backupConfig;

    public function __construct()
    {
        $this->backupConfig = config('database');
    }

    public function recovery()
    {
        // 防止还原数据过程超时
        set_time_limit(0);
        ini_set('memory_limit', '1024M');

        $filename = input('get.filename');

        // 读取备份文件
        if ($this->backupConfig['zip']) {
            $zip = new ZipArchive();
            if ($zip->open($this->backupConfig['path'].$filename) === true) {
                $filename = $zip->getNameIndex(0);
                $zip->extractTo($this->backupConfig['path']);
                $zip->close();
            }
        }

        $content = file_get_contents($this->backupConfig['path'] . $filename);

        // 使用";"分割内容
        $statements = explode(";", $content);

        // 开始事务
        Db::startTrans();

        foreach ($statements as $index => $stmt) {
            if (trim($stmt) === '') {
                continue;
            }
            $results = Db::query($stmt);
            if ($results === false) {
                Db::rollback();
                return false;
            }
        }

        // 提交事务
        Db::commit();

        // 删除非压缩的文件
        unlink($this->backupConfig['path'] . $filename);

        return true;
    }
}
Salin selepas log masuk

1.3.2 Lakukan pemulihan

Masukkan alamat url berikut dalam penyemak imbas untuk melakukan pemulihan:

http://localhost/recovery/recovery?filename=20200101-121212.sql.zip
Salin selepas log masuk

Di atas adalah kaedah pelaksanaan sandaran pangkalan data dan pemulihan dalam ThinkPHP6 . Pembaca boleh menggunakan kod tersebut pada projek mereka sendiri dan menggunakan teknik secara fleksibel untuk menjadikan perniagaan kami lebih teguh dan boleh dipercayai.

Atas ialah kandungan terperinci Cara menggunakan ThinkPHP6 untuk melaksanakan sandaran dan pemulihan pangkalan data. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk memulihkan fail WeChat yang telah tamat tempoh Bolehkah fail WeChat yang telah tamat tempoh dipulihkan? Bagaimana untuk memulihkan fail WeChat yang telah tamat tempoh Bolehkah fail WeChat yang telah tamat tempoh dipulihkan? Feb 22, 2024 pm 02:46 PM

Buka WeChat, pilih Tetapan dalam Saya, pilih Umum dan kemudian pilih Ruang Storan, pilih Pengurusan dalam Ruang Storan, pilih perbualan di mana anda ingin memulihkan fail dan pilih ikon tanda seru. Tutorial Model Berkenaan: iPhone13 Sistem: iOS15.3 Versi: WeChat 8.0.24 Analisis 1 Mula-mula buka WeChat dan klik pilihan Tetapan pada halaman Saya. 2 Kemudian cari dan klik Pilihan Umum pada halaman tetapan. 3Kemudian klik Ruang Storan pada halaman umum. 4 Seterusnya, klik Urus pada halaman ruang storan. 5Akhir sekali, pilih perbualan di mana anda ingin memulihkan fail dan klik ikon tanda seru di sebelah kanan. Tambahan: Fail WeChat biasanya tamat tempoh dalam beberapa hari Jika fail yang diterima oleh WeChat belum diklik, sistem WeChat akan mengosongkannya selepas 72 jam Jika fail WeChat telah dilihat.

Bagaimana untuk memulihkan sejarah penyemakan imbas dalam mod inkognito Bagaimana untuk memulihkan sejarah penyemakan imbas dalam mod inkognito Feb 19, 2024 pm 04:22 PM

Penyemakan imbas peribadi ialah cara yang sangat mudah untuk menyemak imbas dan melindungi privasi anda semasa melayari Internet pada komputer atau peranti mudah alih anda. Mod penyemakan imbas peribadi biasanya menghalang penyemak imbas daripada merekodkan sejarah lawatan anda, menyimpan kuki dan fail cache serta menghalang tapak web yang anda semak imbas daripada meninggalkan sebarang kesan dalam penyemak imbas. Walau bagaimanapun, untuk beberapa kes khas, kami mungkin perlu memulihkan sejarah penyemakan imbas Penyemakan Imbas Inkognito. Pertama sekali, kita perlu menjelaskannya: tujuan mod penyemakan imbas peribadi adalah untuk melindungi privasi dan menghalang orang lain daripada mendapatkan sejarah dalam talian pengguna daripada penyemak imbas. Oleh itu, penyemakan imbas inkognito

Bagaimana untuk memulihkan percikan sembang di TikTok Bagaimana untuk memulihkan percikan sembang di TikTok Mar 16, 2024 pm 01:25 PM

Di Douyin, platform video pendek yang penuh dengan kreativiti dan kecergasan, kami bukan sahaja dapat menikmati pelbagai kandungan yang menarik, tetapi juga mempunyai komunikasi yang mendalam dengan rakan-rakan yang berfikiran sama. Antaranya, percikan sembang adalah penunjuk penting keamatan interaksi antara kedua-dua pihak, dan mereka sering secara tidak sengaja mencetuskan ikatan emosi antara kita dan rakan-rakan kita. Walau bagaimanapun, kadangkala disebabkan beberapa sebab, percikan sembang mungkin terputus, jadi apakah yang perlu kami lakukan jika kami ingin memulihkan percikan sembang ini akan membawakan anda pengenalan terperinci tentang strategi kandungan, dengan harapan dapat membantu semua orang. Bagaimana untuk memulihkan cetusan sembang Douyin? 1. Buka halaman mesej Douyin dan pilih rakan untuk bersembang. 2. Hantar mesej dan sembang antara satu sama lain. 3. Jika anda menghantar mesej secara berterusan selama 3 hari, anda boleh mendapatkan logo percikan. Selama 3 hari, hantar gambar atau video antara satu sama lain

Bagaimana untuk memulihkan album foto Xiaomi Cloud kepada setempat Bagaimana untuk memulihkan album foto Xiaomi Cloud kepada setempat Feb 24, 2024 pm 03:28 PM

Bagaimana untuk memulihkan Album Foto Awan Xiaomi ke setempat? APP Album Foto Awan Xiaomi boleh dipulihkan ke setempat, tetapi kebanyakan rakan tidak tahu cara memulihkan Album Foto Awan Xiaomi ke setempat. Tutorial grafik kaedah tempatan, pengguna yang berminat datang dan lihat! Bagaimana untuk memulihkan album foto awan Xiaomi ke tempatan 1. Mula-mula buka fungsi tetapan dalam telefon Xiaomi dan pilih [Avatar Peribadi] pada antara muka utama 2. Kemudian masukkan antara muka akaun Xiaomi dan klik fungsi [Cloud Service]; lompat ke Xiaomi Untuk fungsi perkhidmatan awan, pilih [Cloud Backup];

Bagaimana untuk menjalankan projek thinkphp Bagaimana untuk menjalankan projek thinkphp Apr 09, 2024 pm 05:33 PM

Untuk menjalankan projek ThinkPHP, anda perlu: memasang Komposer untuk mencipta projek, masukkan direktori projek dan laksanakan php bin/console serve;

Bagaimana untuk memulihkan kertas dinding lalai dalam win10 Bagaimana untuk memulihkan kertas dinding lalai dalam win10 Feb 10, 2024 pm 10:51 PM

Kemas Kini Windows 10 Mei 2019 menampilkan latar belakang desktop lalai baharu yang lebih terang. Ia kelihatan hebat - dengan tema cahaya baharu. Jika anda menggunakan tema gelap Windows 10, anda mungkin mahukan latar belakang yang lebih gelap. Anehnya, latar belakang desktop Windows 10 asal telah dialih keluar daripada versi terkini Windows 10. Anda perlu memuat turunnya daripada web atau menyalin failnya daripada PC Windows 10 lama. Walaupun kami tidak dapat mencari imej kertas dinding ini di tapak web rasmi Microsoft, anda boleh memuat turunnya daripada sumber lain. Kami menemui salinan kertas dinding desktop Windows 10 asal dalam resolusi 4K pada Imgur. Selain itu, terdapat saiz lain dan lebih banyak dinding lalai

Terdapat beberapa versi thinkphp Terdapat beberapa versi thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP mempunyai berbilang versi yang direka untuk versi PHP yang berbeza. Versi utama termasuk 3.2, 5.0, 5.1 dan 6.0, manakala versi kecil digunakan untuk membetulkan pepijat dan menyediakan ciri baharu. Versi stabil terkini ialah ThinkPHP 6.0.16. Apabila memilih versi, pertimbangkan versi PHP, keperluan ciri dan sokongan komuniti. Adalah disyorkan untuk menggunakan versi stabil terkini untuk prestasi dan sokongan terbaik.

Bagaimana untuk menjalankan thinkphp Bagaimana untuk menjalankan thinkphp Apr 09, 2024 pm 05:39 PM

Langkah-langkah untuk menjalankan ThinkPHP Framework secara setempat: Muat turun dan nyahzip ThinkPHP Framework ke direktori tempatan. Buat hos maya (pilihan) yang menunjuk ke direktori akar ThinkPHP. Konfigurasikan parameter sambungan pangkalan data. Mulakan pelayan web. Mulakan aplikasi ThinkPHP. Akses URL aplikasi ThinkPHP dan jalankannya.

See all articles