Php 是否有可能在codeigniter中使用更新的内容转储mysql数据库
我将编写脚本,使用codeigniter备份mysql数据库。 然而,这里有一个棘手的问题。 我应该把所有的电子邮件转换成虚假的信件,而不是真实的电子邮件信息。 前任,Jon@gmail.com => aBdsEDd@test.com 因此,新开发人员可以使用所有数据,但不能使用真实的电子邮件,因为它们是用于真实的人的信息。 但我不确定这是否可能 在这里,我放弃了我的方法,但无法更改当前数据库Php 是否有可能在codeigniter中使用更新的内容转储mysql数据库,php,mysql,codeigniter,Php,Mysql,Codeigniter,我将编写脚本,使用codeigniter备份mysql数据库。 然而,这里有一个棘手的问题。 我应该把所有的电子邮件转换成虚假的信件,而不是真实的电子邮件信息。 前任,Jon@gmail.com => aBdsEDd@test.com 因此,新开发人员可以使用所有数据,但不能使用真实的电子邮件,因为它们是用于真实的人的信息。 但我不确定这是否可能 在这里,我放弃了我的方法,但无法更改当前数据库 $this->load->dbutil(); $this->load->hel
$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.';
}
}
如果可能的话,请告诉我好吗?
最重要的是,转储文件应该有更新的内容,但我们不应该更改原始数据库,更改应该只在转储中进行
可能吗?
非常感谢。严格地说,答案是否定的,您不能以这种方式更改数据的内容,因为备份方法会获取表列表,并按原样将其转储到文件中。这正是您对备份解决方案的期望 但是,您可以做的是创建包含所需替换逻辑的视图。然后可以使用备份方法备份视图,而不是表
否则,您需要在普通查询中编写逻辑,或者在php代码中实现逻辑,然后自己创建转储文件。严格来说,答案是否定的,您不能以这种方式更改数据的内容,因为备份方法获取表的列表,并按原样将其转储到文件中。这正是您对备份解决方案的期望 但是,您可以做的是创建包含所需替换逻辑的视图。然后可以使用备份方法备份视图,而不是表
否则,您需要在普通查询中编写逻辑,或者在php代码中实现逻辑,然后自己创建转储文件。像这样尝试在飞行中更改数据将是“不可取”和“不可能”的混合。我要做的是首先将数据库克隆到一个临时位置,然后为PII和其他敏感信息运行数据清理脚本。然后,您可以将其用于克隆到开发环境 然而,对于像电子邮件地址这样的值,当您将所有电子邮件更改为
example@example.com
正确测试与该信息相关的任何内容几乎是不可能的
对于类似的事情,我建议从真实邮件中提取一封虚拟邮件,例如:
更新用户
设置email=CONCAT(
子字符串(MD5(电子邮件),1,16),
'@',
子字符串(MD5(电子邮件),17,16),
“.com”
);
结果:
foo@bar.com -> f3ada405ce890b6f@8204094deb12d8a8.com
bar@foo.com -> dc8a42aba3651b0b@1f088ef928ff3b1d.com
然而,随着数据库的增长,像这样的克隆越来越成为一个问题,特别是对于本地开发,因为数据库大小可能只会随着时间的推移而增长。目前,我们的prod DB接近300GB,除了满足所有其他要求外,我们的一些开发人员的机器无法安装副本。再加上克隆和清理需要几个小时,现在每个人都处于远程状态,通过已经受限的链接将这些克隆发送给开发人员会带来额外的后勤问题
最好的解决方案,特别是对于本地开发人员,是只转储数据库的模式,并用一组具有代表性的模拟数据填充它进行测试。对于全面测试,我们在CI/CD管道环境中维护数据库的完整副本、清理版本。像这样尝试在飞行中更改数据将是“不可取”和“不可能”的混合。我要做的是首先将数据库克隆到一个临时位置,然后为PII和其他敏感信息运行数据清理脚本。然后,您可以将其用于克隆到开发环境 然而,对于像电子邮件地址这样的值,当您将所有电子邮件更改为
example@example.com
正确测试与该信息相关的任何内容几乎是不可能的
对于类似的事情,我建议从真实邮件中提取一封虚拟邮件,例如:
更新用户
设置email=CONCAT(
子字符串(MD5(电子邮件),1,16),
'@',
子字符串(MD5(电子邮件),17,16),
“.com”
);
结果:
foo@bar.com -> f3ada405ce890b6f@8204094deb12d8a8.com
bar@foo.com -> dc8a42aba3651b0b@1f088ef928ff3b1d.com
然而,随着数据库的增长,像这样的克隆越来越成为一个问题,特别是对于本地开发,因为数据库大小可能只会随着时间的推移而增长。目前,我们的prod DB接近300GB,除了满足所有其他要求外,我们的一些开发人员的机器无法安装副本。再加上克隆和清理需要几个小时,现在每个人都处于远程状态,通过已经受限的链接将这些克隆发送给开发人员会带来额外的后勤问题
最好的解决方案,特别是对于本地开发人员,是只转储数据库的模式,并用一组具有代表性的模拟数据填充它进行测试。对于完整的测试,我们在CI/CD管道环境中维护DB的完整拷贝、清理版本。或者,我可以在转储文件中添加一些查询吗@Shadown不确定要将哪些查询添加到转储文件。导入转储sql文件时,请动态更新这些查询。可能吗?当然有可能,但到那时开发人员可以访问电子邮件。你是对的。那个么你们能详细说明一下创建视图吗?或者,我能在转储文件中添加一些查询吗@Shadown不确定要将哪些查询添加到转储文件。导入转储sql文件时,请动态更新这些查询。可能吗?当然有可能,但到那时开发人员可以访问电子邮件。你是对的。那你能详细阐述一下创建视图吗?我认为不可能。我认为不可能。