Apakah mungkin untuk mengekstraksi nilai bulan lalu dari server MySQL dan membangun database baru dari nilai-nilai itu?

8

Saya memiliki tugas untuk membangun template mesin virtual pengembangan.

Saya perlu menambahkan ke server database MySQL dari masing-masing produk perusahaan saya sehingga pengembang baru akan memiliki kemampuan untuk mengembangkan masing-masing produk.

Kebanyakan basis data lebih kecil dari 1GB.

Tapi saya punya beberapa database yang sangat besar (sekitar 160G) - tapi saya terbatas pada ukuran template yang saya coba buat, dan tidak masuk akal untuk menambahkan di sana DB 160GB.

Oleh karena itu, saya mencoba menemukan metode yang tepat untuk mengekstraksi, katakanlah, nilai bulan lalu dari database besar ini dan menambahkannya ke server sehingga pengembang akan dapat "merasakan" bagaimana rasanya bekerja pada database ini.

Apakah mungkin untuk melakukan hal seperti itu dan bagaimana melakukannya? Terima kasih!

Edit:

Sayangnya, tidak ada pilihan untuk server DB utama yang terpisah yang akan menampung semua pengembangan database, juga tidak ada persyaratan untuk memperbarui data secara teratur, saya hanya perlu menyajikan data yang sama seperti di server produksi (pada periode waktu acak) sebagai lingkungan kotak pasir untuk pengembang baru.

Itai Ganot
sumber

Jawaban:

8

Jika saya mengerti dengan benar Anda berencana untuk membuat salinan DB terpisah untuk setiap lingkungan pengembangan.

Meskipun ini mungkin layak dengan database kecil, itu tidak akan bekerja dengan baik dengan DB besar. Jadi, kecuali Anda memiliki alasan yang sangat bagus untuk menyiapkan DB terpisah untuk setiap lingkungan, mungkin lebih baik untuk mempertimbangkan memiliki satu salinan basis data pengembangan dan mengatur semua lingkungan pengembangan untuk menggunakannya.

Pendekatan ini akan memungkinkan Anda untuk menyegarkan DB pengembangan dengan data terbaru secara berkala dan jika seseorang mengacaukannya, Anda bisa menyegarkannya lagi.

Juga bayangkan situasi di mana pengembang Anda mulai bekerja pada beberapa proyek baru yang membutuhkan tabel baru untuk dibuat. Jika Anda memiliki satu salinan DB pengembangan, Anda (atau devs) perlu membuat tabel itu dan mengisinya dengan data uji sekali saja. Sekarang bayangkan devs menyadari bahwa struktur tabel awal tidak optimal dan perlu diubah. Sekali lagi ini perlu dilakukan pada DB tunggal yang bertentangan dengan kemungkinan puluhan lingkungan.

Ini adalah pendekatan yang saya lihat digunakan untuk proyek-proyek besar berulang kali dan sebagian besar waktu itu bekerja dengan cukup baik.

grekasius
sumber
2
Di toko tempat saya bekerja, setiap pengembang memiliki salinan basis datanya sendiri sehingga tidak ada yang menginjak orang lain. Ini bekerja dengan sangat baik bagi kami. Kami memiliki skrip untuk membangun kembali basis data dari awal dan mengisinya dengan data uji yang diperlukan untuk pengembangan. Basis data tunggal seringkali bermasalah dengan orang-orang yang bekerja pada beberapa area basis data untuk orang lain. Dan kemudian semua orang berhenti sementara db besar sedang dipulihkan. Jadi memiliki satu basis data BUKAN solusi yang unggul. (TBH juga tidak. Itu situasional.)
Andrew Savinykh
Sepakat. Hanya ingin tahu, seberapa besar DB Anda? Saya tidak bisa melihat bagaimana ini bisa bekerja dengan ukuran DB 160GB.
grekasius
Tentu saja basis data dev akan sengaja kecil dengan hanya sebagian data yang diperlukan untuk menguji apa pun yang sedang dikerjakan pengembang. Untuk tujuan seperti pengujian kinerja, instance (lebih besar) yang terpisah akan digunakan.
Andrew Savinykh
Saya tidak diharuskan memperbarui data secara teratur, cukup menempatkannya sekali dalam templat ini.
Itai Ganot
Lihat apakah Anda dapat membuat kumpulan data sampel kecil dari DB Anda saat ini. Sayangnya, tidak ada jawaban langsung di sini. Apa yang perlu Anda lakukan tergantung pada data apa yang Anda miliki dan apa yang Anda pilih untuk dimasukkan ke dalam dev DB itu.
grekasius
4

Ini sangat tergantung pada jenis data dalam database. Dalam beberapa kasus, itu mungkin semudah

select * from table where date > ....

sementara dalam kasus lain, tidak mungkin untuk memisahkan ini karena struktur data. Pada akhirnya, itu akan menjadi campuran dan sangat sulit untuk diperbaiki.

Sven
sumber
2
Secara khusus, beberapa basis data mungkin memiliki entri yang lebih baru (katakanlah, <1 bulan) yang mereferensikan catatan dari entri yang lebih lama (katakanlah,> 1 bulan). Cara Anda mengatasinya bergantung sepenuhnya pada bagaimana referensi ini dibuat, dan tidak mungkin untuk semua kecuali yang paling dasar.
Bob
0

Kami baru-baru ini memiliki situasi yang diinginkan pelanggan untuk mengekstrak 30 hari terakhir dari basis data. Jika SEMUA tabel memiliki atribut yang sama di mana Anda dapat menentukan datetime, Anda dapat melakukan a

mysqldump --where = 'datetimefield> "2014-06-28"'

tapi dia ingin mencampur tabel yang berbeda dengan data lama dan baru. Jadi ini bukan solusi untuknya tapi mungkin itu satu untukmu?

shinguz
sumber