×ðÁú¿­Ê±¹ÙÍøµÇ¼

ThinkPHP6ÖÐÔõÑù¾ÙÐÐÊý¾Ý±¸·Ý²Ù×÷ £¿

Ëæ×Å»¥ÁªÍøÓ¦ÓÃÒ»Ö±Éú³¤£¬Êý¾Ý±¸·ÝÔ½À´Ô½Êܵ½ÖØÊÓ¡£ÎªÁË°ü¹ÜÊý¾ÝµÄÇå¾²£¬¿ª·¢Ö°Ô±ÐèÒªÕÆÎÕÊý¾Ý±¸·Ý²Ù×÷ÊÖÒÕ¡£±¾ÎÄÖصãÏÈÈÝÔõÑùÔÚthinkphp6ÖоÙÐÐÊý¾Ý±¸·Ý²Ù×÷¡£

Ò»¡¢±¸·ÝÔ­Àí

ÔÚ±¸·Ý֮ǰ£¬ÎÒÃÇÐèÒªÏàʶ±¸·ÝµÄÔ­Àí¡£Êý¾Ý¿â±¸·ÝÊÇÖ¸½«Êý¾Ý¿âÖеÄÊý¾Ý¸´ÖƵ½ÁíÍâһ̨ЧÀÍÆ÷»òÍâµØÓ²ÅÌÉÏÉúÑÄ£¬ÒÔ±ÜÃâÊý¾Ýɥʧ£¬¶ñÒâ¸Ä¶¯»òϵͳÍß½âµÈÇéÐΡ£

ÔÚThinkPHP6ÖУ¬¿ÉÒÔÖ±½ÓʹÓÿò¼ÜÌṩµÄÊý¾Ý±¸·ÝÀàÍê³É±¸·Ý²Ù×÷¡£±¸·Ý»á½«Êý¾Ý¿âµÄËùÓбí½á¹¹ºÍÊý¾Ý¸´ÖƵ½Ò»¸ö.sqlÎļþÖУ¬Àû±ãÔÚÐèҪʱ¾ÙÐÐÊý¾Ý»¹Ô­»òǨáã¡£

¶þ¡¢±¸·ÝÉèÖÃ

Á¬Ã¦Ñ§Ï°¡°PHPÃâ·ÑѧϰÌõ¼Ç£¨ÉîÈ룩¡±£»

ÔÚ¾ÙÐÐÊý¾Ý±¸·ÝÇ°£¬ÎÒÃÇÐèÒª¶Ô±¸·Ý²Ù×÷¾ÙÐÐÉèÖã¬ÒÔÈ·±£±¸·Ý²Ù×÷µÄ׼ȷÐÔ¡£

ÔÚÊý¾Ý¿âÉèÖÃÎļþÖмÓÈëÒÔÏÂÉèÖãº

return [
    // Êý¾Ý¿âÀàÐÍ
    'type'            => 'mysql',
    // ЧÀÍÆ÷µØµã
    'hostname'        => '127.0.0.1',
    // Êý¾Ý¿âÃû
    'database'        => 'database_name',
    // ̞
    'username'        => 'root',
    // ÃÜÂë
    'password'        => 'password',
    // ¶Ë¿Ú
    'hostport'        => '',
    // Êý¾Ý¿âÅþÁ¬²ÎÊý
    'params'          => [],
    // Êý¾Ý¿â±àÂëĬÈϽÓÄÉutf8
    'charset'         => 'utf8',
    // Êý¾Ý¿â±íǰ׺
    'prefix'          => '',
    // ÊÇ·ñÐèÒª¾ÙÐÐSQLÐÔÄÜÆÊÎö
    'sql_explain'     => false,
    // ÊÇ·ñÐèÒª¾ÙÐÐÊý¾Ý±¸·Ý
    'backup'          => true,
    // Êý¾Ý±¸·ÝĿ¼
    'backup_path'     => '/backup/',
    // Êý¾Ý±¸·ÝÎļþµÄ×î´ó¾í¾Þϸ(×Ö½Ú)
    'backup_max_size' => 100 * 1024 * 1024,
    // Êý¾Ý¿â±¸·ÝÎļþÃüÃûÃûÌÃ
    'backup_name'     => '',
];

µÇ¼ºó¸´ÖÆ

ÆäÖУ¬’backup’ÉèÖÃΪtrueÌåÏÖÐèÒª¾ÙÐÐÊý¾Ý±¸·Ý²Ù×÷£»’backup_path’ÌåÏÖ±¸·ÝÎļþµÄ´æ·ÅĿ¼£»’backup_max_size’ÌåÏÖ±¸·ÝÎļþµÄ×î´ó¾í´óС£»’backup_name’ÌåÏÖ±¸·ÝÎļþµÄÃüÃûÃûÌá£

Èý¡¢¾ÙÐб¸·Ý²Ù×÷

ÔÚÍê³É±¸·ÝÉèÖúó£¬ÎÒÃǾͿÉÒÔ¾ÙÐб¸·Ý²Ù×÷ÁË¡£ThinkPHP6¿ò¼ÜÌṩÁËÊý¾Ý±¸·ÝÀ࣬¿ÉÒÔͨ¹ýŲÓÃÏà¹ØÒªÁìÍê³É±¸·Ý²Ù×÷¡£Ïêϸ´úÂëÈçÏ£º

use thinkDb;
use thinkacadeConfig;
use thinkacadeCache;

class Backup
{
    protected $options = [
        'path' => '',
        'part' => '',
        'compress' => 0,
        'level' => 9,
        'lock' => true,
    ];
    
    protected $config;
    
    public function __construct()
    {
        // »ñÈ¡Êý¾Ý¿âÉèÖÃ
        $this->config = Config::get('database');
    }
    
    // ±¸·ÝÊý¾Ý¿â
    public function backup()
    {
        $database = $this->config['database'];
        $path = $this->config['backup_path'];
        $part = isset($this->config['backup_part_size']) ? $this->config['backup_part_size'] : $this->options['part'];
        $compress = isset($this->config['backup_compress']) ? $this->config['backup_compress'] : $this->options['compress'];
        $level = isset($this->config['backup_compress_level']) ? $this->config['backup_compress_level'] : $this->options['level'];
        
        // ¼ì²é±¸·ÝĿ¼ÊÇ·ñ±£´æ
        if (!is_dir($path)) {
            mkdir($path, 0755, true);
        }
        
        // ³õʼ»¯
        $file = [
            'name' => $database . '_' . date('YmdHis'),
            'part' => 1,
        ];
        
        // »ñÈ¡±í½á¹¹
        $sql = "SHOW TABLES";
        $result = Db::query($sql, true);
        
        // ±éÀúËùÓÐ±í±¸·ÝÊý¾Ý
        foreach ($result as $val) {
            $sql = "SHOW CREATE TABLE `" . $val['Tables_in_' . $database] . "`";
            $res = Db::query($sql, true);
            $sql = "--
";
            foreach ($res as $row) {
                $sql .= $row['Create Table'] . ";

";
            }
            
            $start = 0;
            $size = 1000;
            $table = $val['Tables_in_' . $database];
            
            // ±¸·ÝÊý¾Ý
            while (true) {
                $sqls = "SELECT * FROM `" . $table . "` LIMIT {$start}, {$size}";
                $result = Db::query($sqls, true);
                $numRows = count($result);
                if ($numRows < 1) {
                    break;
                }
                
                $sql .= "--
";
                $sql .= "-- dump data for {$table} 
";
                $sql .= "--
";
                
                foreach ($result as $row) {
                    $row = array_map('addslashes', $row);
                    $sql .= "INSERT INTO `{$table}` VALUES ('" . implode("','", $row) . "');
";
                }
                
                $start += $numRows;
            }
            
            // дÈëSQLÓï¾ä
            $this->write($sql, $file);
        }
        
        // ¿¢Ê±¸·ÝÁ÷³Ì
        $this->config = [];
        
        return true;
    }
    
    // дÈëSQLÓï¾ä
    protected function write($sql, &$file)
    {
        $size = strlen($sql);
        
        if ($size + $file['part'] <= $this->config['backup_max_size']) {
            $file['sql'] .= $sql;
        } else {
            $this->save($file);
            $file['sql'] = $sql;
            $file['part']++;
        }
    }
    
    // ÉúÑı¸·ÝÎļþ
    protected function save(&$file)
    {
        $name = $file['name'] . "_" . $file['part'] . ".sql";
        $path = $this->config['backup_path'] . $name;
        $sql = $file['sql'];
        
        if ($file['compress'] && function_exists('gzcompress')) {
            $sql = gzcompress($sql, $file['level']);
        }
        
        if ($this->config['backup_lock']) {
            $lock = "{$this->config['backup_path']}backup.lock";
            file_put_contents($lock, time());
        }
        
        file_put_contents($path, $sql);
    }
}

µÇ¼ºó¸´ÖÆ

ÏêϸÀ´¿´£¬BackupÀàÖÐÌṩÁËbackupÒªÁ죬ʹÓÃDbÀà»ñÈ¡Êý¾Ý¿â±í½á¹¹¡¢Êý¾Ý£¬È»ºóÆ´½ÓΪһÌõSQLÓï¾ä£¬×îÖÕдÈ뱸·ÝÎļþ¡£

ËÄ¡¢Ð¡½á

±¾ÎÄÏÈÈÝÁËÔÚThinkPHP6ÖоÙÐÐÊý¾Ý¿â±¸·Ý²Ù×÷µÄÉèÖúÍʵÏÖÒªÁì¡£±¸·Ý²ÙÞÏÞεóÄÑÓÚÊý¾ÝµÄÇå¾²ºÍǨá㶼ºÜÊÇÖ÷Òª£¬¿ª·¢Ö°Ô±ÐèҪʱ¿Ì¹Ø×¢Êý¾Ý±¸·ÝµÄÇéÐΣ¬ÔÚÐëҪʱ¾ÙÐб¸·Ý²Ù×÷¡£

ÒÔÉϾÍÊÇThinkPHP6ÖÐÔõÑù¾ÙÐÐÊý¾Ý±¸·Ý²Ù×÷ £¿µÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡

ÃâÔð˵Ã÷£ºÒÔÉÏչʾÄÚÈÝȪԴÓÚÏàÖúýÌå¡¢ÆóÒµ»ú¹¹¡¢ÍøÓÑÌṩ»òÍøÂçÍøÂçÕûÀí£¬°æȨÕùÒéÓë±¾Õ¾Î޹أ¬ÎÄÕÂÉæ¼°¿´·¨Óë¿´·¨²»´ú±í×ðÁú¿­Ê±¹ÙÍøµÇ¼ÂËÓÍ»úÍø¹Ù·½Ì¬¶È£¬Çë¶ÁÕß½ö×ö²Î¿¼¡£±¾ÎĽӴýתÔØ£¬×ªÔØÇë˵Ã÷À´ÓÉ¡£ÈôÄúÒÔΪ±¾ÎÄÇÖÕ¼ÁËÄúµÄ°æȨÐÅÏ¢£¬»òÄú·¢Ã÷¸ÃÄÚÈÝÓÐÈκÎÉæ¼°ÓÐÎ¥¹«µÂ¡¢Ã°·¸Ö´·¨µÈÎ¥·¨ÐÅÏ¢£¬ÇëÄúÁ¬Ã¦ÁªÏµ×ðÁú¿­Ê±¹ÙÍøµÇ¼ʵʱÐÞÕý»òɾ³ý¡£

Ïà¹ØÐÂÎÅ

ÁªÏµ×ðÁú¿­Ê±¹ÙÍøµÇ¼

18523999891

¿É΢ÐÅÔÚÏß×Éѯ

ÊÂÇéʱ¼ä£ºÖÜÒ»ÖÁÖÜÎ壬9:30-18:30£¬½ÚãåÈÕÐÝÏ¢

QR code
ÍøÕ¾µØͼ