แปลงฐานข้อมูลการผลิตเป็นข้อมูลการทดสอบ


15

ยิ่งการทดสอบใกล้เคียงกับการผลิตมากเท่าไหร่ก็ยิ่งดีเท่านั้นที่จะเลียนแบบพฤติกรรมการผลิตได้ ฉันต้องการคัดลอกการสำรองฐานข้อมูลจากการผลิตลงในสภาพแวดล้อมการทดสอบของเรา แต่สิ่งที่ฉันต้องเปลี่ยนเพื่อให้การทดสอบทำงานและเพื่อป้องกันการรบกวนการผลิตหรือส่งอีเมลถึงลูกค้าจริงโดยไม่ตั้งใจ (นอกเหนือจากการตั้งค่าweb/%secure/base_urlURL ทดสอบ)

อีกวิธีในการคิดเกี่ยวกับคำถามนี้คือการพิจารณาวิธีสร้างข้อมูลตัวอย่างวีโอไอพีจากข้อมูลการผลิตของฉันเอง

คำตอบ:


8

1) DB Dump

เมื่อคุณทำการส่งออกคุณสามารถส่งออกเฉพาะโครงสร้างสำหรับตารางต่อไปนี้:

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สามารถนำเข้าเฉพาะกับโครงสร้างและเรียกใช้ reindex แคตตาล็อก URL reindex หลังจากนำเข้าเว้นแต่คุณจะต้องบันทึกเหล่านั้นทั้งหมด (สำหรับการทดสอบต่างๆ)

นอกจากนี้คุณยังสามารถล้างตะกร้าสินค้าที่ถูกทิ้งร้าง (คำใบ้:) sales_flat_quoteคุณยังสามารถลบคำสั่งซื้อได้หากคุณไม่ต้องการและเพียงเก็บหมายเลขที่ จำกัด ไว้

2) การตั้งค่าการกำหนดค่า

  • เว็บ / (unsecure | เชื่อถือได้) / BASE_URL
  • ที่อยู่อีเมลสำหรับติดต่อ
  • ปิดใช้งานอีเมล ( system/smtp/disable) ดังนั้นคุณจะไม่ส่งอีเมลโดยไม่ได้ตั้งใจ

3) เพิ่มข้อมูลลูกค้า

  • คุณสามารถใช้โมดูลAnonygentoสำหรับ Magento
  • เขียนสคริปต์ของคุณเองเพื่อทำให้งงงวยข้อมูลลูกค้า / คำสั่งขาย / อื่น ๆ

4) การตั้งค่าโมดูล

  • คุณสามารถเปิดใช้งานโหมด sandbox สำหรับโมดูลการชำระเงิน / การจัดส่งและทำการตั้งค่าที่เหมาะสม
  • ตรวจสอบโมดูลที่ใช้สำหรับการรวมที่หลากหลาย (ปิดใช้งานหรือตั้งค่าเป็นโหมดแซนด์บ็อกซ์)

สำหรับ dev การเพิกเฉยเนื้อหาสำหรับบางตารางก็โอเค สำหรับ QA / Staging คุณจะต้องการตารางเหล่านั้นทั้งหมดเพื่อสะท้อนการผลิตใกล้เคียงที่สุด
beeplogic

@ FlorinelChris: ฉันคิดว่าคำถามเกี่ยวกับการลดความซับซ้อนของการย้ายฐานข้อมูลและไม่ได้ทำให้มันซับซ้อน :) Bu ในวิธีใด ๆ คำตอบที่ดี!
user487772

@Tim ส่วนที่ยากคือการทำให้ทั้งหมดข้างต้นในสคริปต์ ... การเรียกใช้หลังจากนั้นเป็นทางออกที่ง่าย
FlorinelChis

2

เราเขียนสคริปต์เพื่อจัดการ DB ทิ้งสำหรับการแตกแขนง อ่านบทความนี้

หลักการพื้นฐานคือมันจะอ่านlocal.xmlเพื่อดึงข้อมูลประจำตัวของฐานข้อมูลจากนั้นทิ้งข้อมูลบนพื้นฐานนั้น มันแยกการถ่ายโอนข้อมูลออกเป็นสองส่วนโครงสร้างเท่านั้นและจากนั้นข้อมูล แต่ที่สำคัญคือมันเพิ่มความเร็วของกระบวนการดัมพ์แบบเดิมโดยการข้ามข้อมูลที่ไม่จำเป็นออกไปและส่วนใหญ่จะป้องกันการล็อคตารางในระหว่างการดัมพ์ที่จะบล็อก / วางเว็บไซต์สดของคุณ

เมื่อคุณมี MySQL dump คุณสามารถเปลี่ยน 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

ไม่มีเหตุผลเลยที่จะต้องลบไฟล์ local.xml หรือรันโปรแกรมติดตั้งอีกครั้งหากคุณเปลี่ยน URL ในฐานข้อมูลแบบนี้

กระบวนการทั้งหมดของการแตกแขนงได้รับการคุ้มครองอย่างดีของเราวีโอไอพี GIT คู่มือ นี่เป็นกระบวนการที่ดีสำหรับการสร้างสาขาการพัฒนา แต่จะย่อขนาดฐานข้อมูลสดด้วยส่วนต่างที่สำคัญ ดังนั้นการทดสอบจะไม่เหมือนกับในเว็บไซต์จริง

ดังนั้นเมื่อทำการดัมพ์ vanilla DB, sed แทนที่, การอิมพอร์ต DB นั้นเพียงพอสำหรับไซต์ staging และจะสะท้อน / จับคู่ไซต์สดให้ใกล้เคียงที่สุด

ในแง่ของการป้องกันการสื่อสารกับลูกค้า - เราไม่เคยพบว่ามีความจำเป็นเนื่องจากเราสร้างบัญชีโดยเจตนาสำหรับการทดสอบเสมอไม่ใช้คำสั่งซื้อของลูกค้าจริงสำหรับการทดสอบ


1

ทางเลือกหนึ่งสำหรับปัญหาอีเมลคือการกำหนดค่าไซต์พัฒนาของคุณเพื่อเปลี่ยนเส้นทางอีเมลทั้งหมดให้คุณ เพิ่มความคิดเล็กน้อย

คุณจะทำอย่างไรนั้นขึ้นอยู่กับสภาพแวดล้อมของคุณ - สำหรับเราที่เพิ่มสิ่งนี้ลงใน vhost ก็ทำหน้าที่ได้:

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

0

ไม่มีอะไร การเปลี่ยน URL ที่ปลอดภัยและไม่ปลอดภัยนั้นเพียงพอแล้ว

คุณอาจต้องการละเว้นlog_*ข้อมูลตารางเพียงเพื่อทำให้การถ่ายโอนข้อมูลของคุณเบาลง


1
แต่สมมติว่าฉันบอกระบบทดสอบของฉันฉันส่งคำสั่งซื้อ - มันจะไม่ส่งอีเมลไปยังลูกค้าจริงเกี่ยวกับมัน
kojiro

เฉพาะรายการอื่น ๆ ที่ต้องเปลี่ยนคือข้อมูลการลงทะเบียนโมดูลบุคคลที่สามหากคุณใช้งานคีย์ที่ต่อโดเมนแทนที่จะเป็นเพียงคีย์การเปิดใช้งาน ฉันยังรวมที่อยู่อีเมลด้วยดังนั้นการทดสอบคำสั่งซื้อขายจะไปที่บัญชีทดสอบแทนแผนกคำสั่งซื้อ เมื่อคุณเริ่มต้น baseUrl ที่ปลอดภัยและไม่ปลอดภัยนั้นเป็นสิ่งที่จำเป็นทั้งหมด หากคุณวางแผนที่จะทำสิ่งนี้บ่อยครั้งให้บรรจุไฟล์ทั้งหมดลงในไฟล์ sql และนำเข้าไฟล์หลังจากที่คุณนำเข้าวีโอไอพี db
Fiasco Labs

@kojiro - ไม่ใช่ถ้าคุณตั้งค่าบัญชีทดสอบบางบัญชี พูดคุยกับผู้ดูแลระบบอีเมล บริษัท ของคุณตั้งค่าชื่อแทนอีเมลสองสามรายการ
Fiasco Labs

@FiascoLabs ฉันสับสน ในสถานการณ์สมมตินี้ฉันเพิ่งนำเข้าฐานข้อมูลวีโอไอพีผลิตกับลูกค้าจริงในนั้น หากฉันดำเนินการตามคำสั่งซื้อจริงกับลูกค้าจริง ๆ แล้วอีเมลแทนอะไรดี
kojiro

@kojiro คุณถูกต้องหลังจากนำเข้าชุดข้อมูลจากการผลิตแล้วคุณต้องขัด / อัปเดตข้อมูลลูกค้า / ข้อมูลที่ละเอียดอ่อน นี่ไม่ใช่คำตอบที่ดีเนื่องจากไม่สามารถแก้ไขสถานการณ์ได้อย่างถูกต้อง
beeplogic

0

ลองสิ่งนี้มันจะแย่งอีเมลผู้ใช้เพื่อช่วยแก้ไขปัญหาของคุณในการส่งอีเมลลูกค้าสดจากสภาพแวดล้อมการทดสอบโดยไม่ตั้งใจ

UPDATE customer_entity SET email = REPLACE(email, '@', '-test@abcxyz123-')
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.