簡體   English   中英

從Codeigniter備份還原數據庫

[英]Restore Database from Codeigniter Backup

我試圖使用內置的CodeIgniter $this->dbutil->backup()進行自動數據庫備份。

腳本是:

    $this->load->dbutil();

    $backup = $this->dbutil->backup(array(
        'tables'        => array(),   // Array of tables to backup.
        'ignore'        => array('regencies', 'villages', 'provinces'),                     // List of tables to omit from the backup
        'add_drop'      => TRUE,                        // Whether to add DROP TABLE statements to backup file
        'add_insert'    => TRUE,                        // Whether to add INSERT data to backup file
        'newline'       => "\n"                         // Newline character used in backup file
    ));

    $this->load->helper('file');

    $latest = md5(uniqid());

    write_file(APPPATH . 'backup/'. $latest .'.gz', $backup);

腳本運行正常。 但是問題出在我不想恢復時。 它是這樣的:

sql的codeigniter備份結果

因此,我無法從CLI( mysql -u root -p dbname < db.sql )和Navicat / Sequel Pro恢復它。

從CLI恢復數據庫

問題是,如何再次將其還原到數據庫? (請注意,VALUES后沒有引號)

這是一個簡單的SQL語法問題。 字符串文字需要用單引號引起來。

INSERT INTO `foo` (`bar`,`bell`) VALUES ( Hey diddle diddle , cat and fiddle )

將無法正常工作。 我們需要

INSERT INTO `foo` (`bar`,`bell`) VALUES ('Hey diddle diddle','cat and fiddle')
                                         ^-----------------^ ^--------------^

仔細查看您要執行的實際SQL語句。

您的“卸載程序”將需要變得更加聰明,當將字符串和日期值放入SQL語句時,將它們括在單引號中。 (為方便起見,數字文字也可以用單引號引起來,因此您無需進行區分,只需將VALUES列表中的所有值都用單引號引起來。

還請注意,當值包含單引號時會發生什么。 例如:

 ... VALUES ( 'O'Leary' , ... 
              ^_^     

這也將是一個錯誤。 值中的單引號將需要轉義。 在MySQL中執行此操作的一種方法是在單引號之前加上另一個單引號,如下所示:

 ... VALUES ( 'O''Leary' , ... 
              ^--------^

這將是有效的,並且將評估為包含單引號O'Leary的字符串

另外,MySQL會將字符串文字中的反斜杠字符解釋為轉義字符。 例如:

 ... VALUES ( 'this probably \not what we want' , 
                             ^^       

該序列\\n將被解釋為換行符,而不是字符n 因此,反斜杠字符也需要轉義。

等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM