โซลูชันสำหรับการควบคุมและปรับใช้เวอร์ชันฐานข้อมูลหรือไม่


11

ขณะนี้ฉันใช้สคริปต์การถ่ายโอนข้อมูลและส่งมอบฐานข้อมูลกับ git repo --skip-extended-insert --skip-comments --skip-dump-dateหมายความว่า diff สามารถให้ฉันความคิดที่ยุติธรรมของสิ่งที่มีการเปลี่ยนแปลง แต่มันทั้งหมดล้มลงถ้าฉันพยายามผสาน

WP_SITEURL, WP_HOME และสถานที่อื่น ๆ wordpress เก็บ URL แบบเต็มต้องอัปเดตเมื่อนำเข้าไปยังโฮสต์อื่น (การทดสอบการแสดงละครการผลิต)

มีใครใช้วิธีที่ดีกว่านี้ไหม

ประเด็นหลัก:

  • Wordpress เก็บ URL เต็มทั้งหมดผ่านฐานข้อมูล (ไม่ใช่พกพา)
  • บันทึกอื่น ๆ มากมายที่ไม่เกี่ยวข้องมีการเปลี่ยนแปลง
    • auto_increment ค่า (ฉันเพิ่งเอาออก แต่มีปัญหา ID)
    • การประทับเวลา (ยังสามารถตัดออก, อาจเกิดขึ้น)
    • บันทึกชั่วคราว * ... ไม่รู้จะทำอย่างไรกับพวกเขา

กระบวนการที่สร้างการย้ายข้อมูลที่บันทึกเวลาโดยมีเพียงสิ่งที่เพิ่มหรือลบเท่านั้นจะเหมาะที่สุด ... แต่ฉันไม่แน่ใจว่าเป็นไปได้หรือไม่


คุณต้องการเวอร์ชั่นการเปลี่ยนแปลงข้อมูลทั้งหมดหรือการเปลี่ยนแปลงโครงสร้างเท่านั้น ? และนั่นคือธุรกิจจริงของคุณหรือไม่
Lazy Badger

เมื่อทำการเปลี่ยนแปลงของ CMS เช่น wordpress มักจะมีการเปลี่ยนแปลงเนื้อหาและการกำหนดค่า (ข้อมูล DB) พร้อมกับการเปลี่ยนแปลงลอจิก (รหัส) ฉันต้องการเวอร์ชั่นทั้งคู่ การเปลี่ยนแปลงโครงสร้างจะเป็นการเริ่มต้นที่ดี ... งานธุรกิจ: ลูกค้าขอวิดเจ็ตใหม่ ติดตั้งปลั๊กอินบนเซิร์ฟเวอร์จัดเตรียมกระทำเพื่อ repo -> กำหนดค่าปลั๊กอินและเพิ่มเนื้อหาตัวอย่าง -> เมื่อได้รับอนุมัติดึงรหัสการเปลี่ยนแปลงการผลิตแล้วด้วยตนเองทำการเปลี่ยนแปลงข้อมูลเดียวกันในผู้ดูแลระบบการผลิต
Jacob Dorman

1
@JacobDorman ฉันพยายามที่จะแก้ปัญหาเดียวกันนี้ คุณทำงานอะไรออกมาบ้างเหรอ? หลังจากการวิจัยบางอย่างฉันเริ่มคิดว่ามีปลั๊กอินที่กำหนดเองที่สร้างสคริปต์อัปเดตเฉพาะอยู่ในลำดับ (อาจจะส่งออกเฉพาะการเปลี่ยนแปลงการกำหนดค่าเช่นปลั๊กอินที่ติดตั้งและตัวเลือกการกำหนดค่า - และไม่จำเป็นต้องโพสต์หมวดหมู่และเนื้อหาทั่วไป) . ชอบที่จะได้ยินถ้าคุณมีความคิดอื่น ๆ
VíctorLópezGarcía

คำตอบ:


4

ต่อไปนี้เป็นวิธีแก้ปัญหาที่เป็นไปได้ทั้งสองวิธีนี้เป็นเครื่องมือควบคุมเวอร์ชัน MySQL ทั่วไป แต่สามารถปรับให้เข้ากับเวิร์กโฟลว์ของคุณ

dbv.php

เครื่องมือนี้สร้าง "การโยกย้าย" ซึ่งโดยทั่วไปจะเป็นสคริปต์ SQL จากการเปลี่ยนแปลงที่ตรวจพบในฐานข้อมูล สคริปต์เหล่านี้ถูกเก็บไว้ในไดเรกทอรีภายในเครื่องและสามารถกำหนดให้กับ VCS ปัจจุบันของคุณ (ตัวอย่างเช่น git)

มันถูกใช้ผ่านเว็บอินเตอร์เฟส PHP

DBVC

พื้นฐานคล้ายกับเครื่องมือก่อนหน้านี้จะขึ้นอยู่กับอินเตอร์เฟสบรรทัดคำสั่ง มันกำหนดค่าผ่านไฟล์ json ความแตกต่างหลักคือมันไม่ได้สร้างไฟล์การโยกย้ายโดยอัตโนมัติ

มีปัญหาที่รอดำเนินการเพื่อรวมสิ่งนี้เข้ากับสิ่งที่คล้ายกันก่อนหน้านี้

ปลั๊กอิน Wordpress

ปลั๊กอินบางตัวที่สามารถช่วยในการสร้างเวิร์กโฟลว์ที่ทำซ้ำได้:


dbvc ดูเหมือนเครื่องมือชนิดที่ฉันกำลังมองหา ขอบคุณ!
Jacob Dorman

1
ฉันดีใจที่มันช่วย ฉันเพิ่งพบเครื่องมือที่น่าสนใจอีกอย่างหนึ่งมันยังไม่ได้รับการอัปเดตในระยะเวลาหนึ่ง แต่มันอาจคุ้มค่าที่จะปล้นสะดมที่: github.com/idler/MMP
VíctorLópezGarcía

@JacobDorman ด้วย DBVC คุณสามารถผสานการเปลี่ยนแปลงฐานข้อมูลจากสภาพแวดล้อมที่แตกต่างกันได้หรือไม่? ฉันสร้างกลยุทธ์ของตัวเองแล้ว แต่ DBVC สร้างไฟล์อัปเดตหรือคุณต้องใช้mysqldiffระหว่างการทิ้ง SQL หรือไม่? ฉันไม่สามารถนึกภาพเครื่องมือนี้ว่ามีประโยชน์เว้นแต่จะช่วยสร้างความแตกต่างของ SQL ที่เทียบเคียงได้จริงโดยเฉพาะอย่างยิ่งพารามิเตอร์คำสั่ง INSERT ในบรรทัดแยกต่างหาก ... แม้ว่าฉันคิดว่าไฟล์สามารถแก้ไขได้เพื่อจัดการกับเรื่องนั้น ...
Spencer Williams

@SpencerWilliams ฉันไม่ได้ใช้ DBVC (และไม่ได้ใช้ mysqldiff) แต่ยังเพิ่ม db dumps ไปยังการควบคุมเวอร์ชัน ... ฉันไม่เห็นพวกเขาว่าผสานได้ในกรณีส่วนใหญ่ แต่การใช้ที่แตกต่างจากการเปรียบเทียบสามารถช่วยเน้นได้ การเปลี่ยนแปลงและปัญหา
Jacob Dorman

@victor ฉันเช็คเอาท์ MMP มันจะเปลี่ยนแปลงสคี แต่ไม่มีข้อมูลที่แตกต่าง / แทรก
David Silva Smith

2

ฉันทำสิ่งนี้กับ MySQL

มันทำให้สคีตารางและข้อมูลทั้งหมดเป็นไฟล์ของตัวเองดังนั้นฉันสามารถเห็นสิ่งที่เปลี่ยนแปลงได้อย่างง่ายดาย

แตกต่างจากโซลูชันอื่น ๆ ส่วนใหญ่ในหัวข้อนี้วิธีนี้รับข้อมูลซึ่งมีความสำคัญสำหรับ CMS

วิธีนี้ไม่ใช้เครื่องมือใด ๆ เพียงแค่สคริปต์บรรทัดคำสั่ง

แก้ไข:ฉันพบว่ารหัสเก่าของฉันมีข้อผิดพลาดที่คำสั่งซื้อนำเข้ามีความสำคัญ การถอด--compactธงแก้ไขข้อผิดพลาด

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     echo exporting $x
     mysqldump -u root -ppassword --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset --extended-insert=FALSE --replace --skip-dump-date dbname $x > "./db/$x.sql"
done

รหัสเก่า

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     mysqldump -u root -ppassword --compact --extended-insert=FALSE --replace dbname $x > "./db/$x.sql"
done

และนี่คือวิธีการนำเข้า

for x in `ls ./db/*.sql`; do
     echo importing $x
     mysql -pdbpassword dbname --force < $x
done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.