为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在 codeigniter 中使用更新的内容转储 mysql 数据库

是否可以在 codeigniter 中使用更新的内容转储 mysql 数据库

PHP
ITMISS 2024-01-19 10:31:37
我将编写脚本来使用 codeigniter 备份 mysql 数据库。然而,这里有一个棘手的问题。我应该将所有电子邮件转换为虚拟字母而不是真实的电子邮件信息。例如,Jon@gmail.com => aBdsEDd@test.com因此,新开发人员可以使用所有数据,但不能使用真实的电子邮件,因为它们是真实的个人信息。但我不确定这是否可能。在这里,我放弃了我的方法,但无法更改当前数据库。$this->load->dbutil();$this->load->helper('file');$this->load->helper('download');$dumpOption = array(    'tables'        => array(),   // Array of tables to backup.    'ignore'        => array(),                     // List of tables to omit from the backup    'format'        => 'txt',                       // gzip, zip, txt    'filename'      => 'mybackup.sql',              // File name - NEEDED ONLY WITH ZIP FILES    '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);if(ENVIRONMENT !== 'production') {    if ($this->dbutil->database_exists('db'))    {        $backup = $this->dbutil->backup($dumpOption);        try {            echo 'loading database .....';            write_file('./mybackup.sql', $backup, 'w+');            echo 'finish preparing dev data.';        } catch(Exception $e) {            printf('Message: ' .$e->getMessage());        }    } else {        echo 'database does not exist.';    }}如果可能的话你能让我知道吗?最重要的是转储文件应该具有更新的内容,但我们不应该更改原始数据库,更改应该仅在转储上。是否可以?非常感谢。
查看完整描述

2 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

严格来说,答案是否定的,您不能以这种方式更改数据的内容,因为备份方法会获取表列表并将它们按原样转储到文件中。嗯,这正是您对备份解决方案的期望。

然而,您可以做的是创建包含您所需的替换逻辑的视图。然后您可以使用备份方法来备份视图,而不是表。

否则,您需要在普通查询中编写逻辑或在 php 代码中实现它并自己创建转储文件。


查看完整回答
反对 回复 2024-01-19
?
梦里花落0921

TA贡献1772条经验 获得超5个赞

尝试像这样改变运行中的数据将是“不可取”和“不可能”的混合体。我所做的就是首先将数据库克隆到暂存位置,然后运行 PII 和其他敏感信息的数据清理脚本。然后您可以将其克隆到开发环境。


但是,对于像电子邮件地址这样可能在关系中使用或需要唯一的值,您需要格外小心,正如我们通过艰难的方式发现的那样,当您更改所有电子邮件以正确example@example.com测试与之相关的任何内容时信息几乎变得不可能。


对于这样的事情,我建议从真实的电子邮件中派生出一封虚拟电子邮件,例如:


UPDATE users

SET email = CONCAT(

  SUBSTRING(MD5(email),1,16),

  '@',

  SUBSTRING(MD5(email),17,16),

  '.com'

);

结果:


foo@bar.com -> f3ada405ce890b6f@8204094deb12d8a8.com

bar@foo.com -> dc8a42aba3651b0b@1f088ef928ff3b1d.com

然而,随着数据库的增长,像这样的克隆变得越来越成为一个问题,特别是对于本地开发,因为数据库的大小可能只会随着时间的推移而增长。目前,我们的产品数据库已接近 300GB,而我们的一些开发人员的机器除了满足所有其他要求外,还无法容纳副本。另外,克隆和清理需要几个小时,而且现在每个人都处于远程状态,通过已经受限的链接将这些克隆提供给开发人员会带来额外的后勤问题。


最好的解决方案,特别是对于本地开发人员来说,是仅转储数据库的架构,并用一组有代表性的模拟数据填充它以进行测试。对于全面的测试,我们在 CI/CD 管道环境中维护数据库的完整副本、清理版本。


查看完整回答
反对 回复 2024-01-19
  • 2 回答
  • 0 关注
  • 35 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信