繁体   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