将生产数据库转换为测试数据


15

测试离生产越近,可以更好地模拟生产行为。我想将数据库备份从生产环境复制到我们的测试环境中,但是我需要更改什么才能使测试有效,并避免干扰生产或意外向真实客户发送电子邮件(除了设置web/%secure/base_url测试URL)?

思考此问题的另一种方法是考虑如何从我自己的生产数据中生成诸如Magento样本数据之类的数据。

Answers:


8

1)DB转储

导出时,只能导出下表的结构:

core_cache
core_cache_option
core_cache_tag
log_customer
log_quote
log_summary
log_summary_type
log_url
log_url_info
log_visitor
log_visitor_info
log_visitor_online
enterprise_logging_event
enterprise_logging_event_changes
index_event
index_process_event
report_event
report_viewed_product_index
dataflow_batch_export
dataflow_batch_import

core_url_rewrite可以仅使用结构导入,并在导入后运行目录URL重写重新索引,除非您需要所有这些记录(用于各种测试)。

您还可以清理废弃的购物车(提示:)sales_flat_quote,也可以删除不需要的订单,而只保留数量有限的订单

2)配置设置

  • 网络/(不安全|安全)/ base_url
  • 联络电子邮件地址
  • 禁用电子邮件(system/smtp/disable),这样您就不会误发电子邮件

3)取消客户信息

  • 您可以为Magento 使用Anonygento模块
  • 编写自己的脚本来混淆客户信息/销售订单等

4)模块设置

  • 您可以为付款/运输模块启用沙盒模式并进行适当的设置
  • 检查用于各种集成的模块(禁用或将其设置为沙盒模式)

对于开发人员,可以忽略某些表的内容。对于质量检查/阶段,您将希望填充所有这些表以尽可能接近生产。
beeplogic

@FlorinelChris:我以为问题在于简化数据库迁移,而不是使其变得复杂:)以任何方式进行处理,好答案!
user487772

@Tim的难点是将以上所有内容放入脚本中...之后运行它是简单的解决方案。
FlorinelChis

2

我们编写了一个脚本来处理数据库转储以进行分支。阅读本文

基本原理是,它读取local.xml来获取DB凭据,然后在此基础上转储数据。它将转储分为两部分,仅是结构,然后是数据。但是关键是它通过跳过不必要的数据来加快传统的转储过程,并且最关键的是防止在转储期间任何表锁定会阻塞/挂起您的活动站点。

获得MySQL转储后,只需使用以下命令即可非常轻松地更改URL sed

sed -i 's/www.mydomain.com/staging.mydomain.com/g' ./var/db.sql

然后将mysql导入到新数据库中。

因此,没有脚本,一个非常基本的版本将如下所示。

mysqldump -hHostname -uUsername LiveDbname -p > db.sql
sed -i 's/www.mydomain.com/staging.mydomain.com/g' db.sql
mysql -hHostname -uUsername DevDbname -p < db.sql

如果您以这种方式在数据库中更改URL,则根本没有理由删除local.xml文件或重新运行安装程序。

我们的《Magento GIT指南》详细介绍了整个分支过程。这是创建开发分支的好过程,但确实会大大减少活动数据库。因此测试不会与实际站点完全相同。

因此,执行临时数据库转储,sed替换,数据库导入对于暂存站点就足够了。并将尽可能地镜像/匹配实时站点。

在防止与客户的沟通方面-我们从未发现它是必需的,因为我们总是故意创建用于测试的帐户,从不使用真实的客户订单进行测试。


1

电子邮件问题的一种选择是将您的开发站点配置为将所有电子邮件重定向到您。增添了一点精力。

您的操作方式取决于您的环境-对于我们,将其添加到vhost可以完成此工作:

php_admin_value sendmail_path "/usr/sbin/sendmail -i -- xyphoid@example.com,coworker@example.com"

0

没有。更改安全和不安全的URL就足够了。

您可能还想省略log_*表数据,只是为了减轻转储负担。


1
但是,假设我告诉我的测试系统我已经下订单了,它不会发送电子邮件给真正的客户吗?
kojiro

如果您正在运行每个域的密钥,而不仅仅是激活密钥,则唯一需要更改的其他项是第三方模块注册信息。我还提供了电子邮件地址,因此测试订单的事务性转到测试帐户而不是订单台。首次启动时,安全和不安全的baseUrl都是必需的。如果您打算经常这样做,请将其全部打包到sql文件中,然后在导入magento db之后将其导入。
Fiasco Labs

@kojiro-如果您设置了一些测试帐户,则不会。与您的公司电子邮件管理员联系,让他们设置几个电子邮件别名。
Fiasco Labs

@FiascoLabs我很困惑。在这种情况下,我刚刚导入了包含实际客户的生产Magento数据库。如果我与真实客户一起处理真实订单,那么电子邮件别名有什么用?
kojiro

@kojiro您是正确的,从生产中导入数据集后,您需要清理/更新客户/敏感信息。这不是一个好答案,因为它不能正确解决该情况。
beeplogic

0

尝试此操作,它将扰乱用户电子邮件,以帮助您解决在测试环境中意外向实时客户发送电子邮件的问题

UPDATE customer_entity SET email = REPLACE(email, '@', '-test@abcxyz123-')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.