[英]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.