Testovací databáze (klonování) MySQL pro vývojáře, jak na to?

Vývojářům jsem poskytl testovací stroj LAMP, identický s produkčním. Udělal jsem jim i MySQL databázi. Ale data na produkčním stroji velmi rychle pribejvaji a já hledám nějakou radu jak to udělat aby měli na testování i aktuální data v databázi. Jestli dělat replikaci master-slave? Kde si pak budou zkoušet nové tabulky/sloupce/změny? Jak to funguje jinde? Nechci navod, jen naznačit jaká je běžná praxe s kterou v tomto případě nemám zkušenost.


Re:Testovací databáze (klonování) MySQL pro vývojáře, jak na to?
« Odpověď #1 kdy: 01. 03. 2019, 22:29:46 »
Osvědčil se nám jednoduchý postup: produkce na páteři/"v cloudu" -> replikací na slave ve firmě, ze kterého se několikrát denně přes mysqldump -tab vytvářejí rozumně komprimovatelné zálohy.

Rsyncem se data slave db vždy v noci kopírují na všechny pracovní stanice vývojářů a spouští se na tím skript obfuskující emaily, sjednocující uživatelská hesla atd., aby při testování nedocházelo k emailování uživatelům a bylo možné se na kohokoliv na develu snadno přihlásit. Každý vývojář i testovací stroje mají vlastní kopii. Vývojář si v případě potřeby může klonovací skript na slave stroji kdykoliv pustit a za pár desítek minut tak mít čerstvou obfuskovanou DB. Využívá se docela často, když se potřebuje vrátit ke stable verzi. V tomto ohledu by asi šlo využít fs se snapshoty (zfs, btrfs), to zatím nemáme, synchronizace přes gigabit mezi SSD disky je docela svižná.

DB má cca 120GB, něco přes tisíc tabulek, kvůli rsyncu file per table. Během dne se řada tabulek nezmění, takže si rsync ušetří práci.

Re:Testovací databáze (klonování) MySQL pro vývojáře, jak na to?
« Odpověď #2 kdy: 01. 03. 2019, 22:45:00 »
Běžně potřebujete mít tři prostředí:
1. Produkční.
2. Vývojové - tady programátoři dělají změny v databázi a testují je.

3. Předprodukční - obvykle se jedná o pravidelnou (třeba noční) kopii produkčního prostředí. Na ní se testují patche z vývojového prostředí a dá se otestovat i výkon na reálných datech. Máto to ale i svá úskalí. Např. v předprodukčním prostředí máte kopii ostré uživatelské databáze. Takže existuje riziko, že třeba odejdou e-maily registrovaným uživatelům. Proto se předprodukční prostředí řeši ještě navíc tak, že běží v kontextu jiného systémového uživatele, který nemá právo odesílat e-maily (vč. pravidla na firewallu). Obdobně musí být vyblokované funkce volání vzdálených API (např. platební brány, SMS brány, ...).