[英]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);
腳本運行正常。 但是問題出在我不想恢復時。 它是這樣的:
因此,我無法從CLI( mysql -u root -p dbname < db.sql
)和Navicat / Sequel Pro恢復它。
問題是,如何再次將其還原到數據庫? (請注意,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.