Van két MySql táblám (A,B), amiknek teljesen azonos a szerkezete, de az adataik nem.
Szeretném felcserélni ezt a két táblát úgy, hogy közben egyetlen lekérés se futhasson hibára. (Vagy még a régi, vagy már az új adatokkal kerüljön kiszolgálásra.)Megbízhatóan elég erre a következő parancs?
RENAME TABLE `A` TO `tmp`, `B` TO `A`, `tmp` TO `B`;
Vagy csak tranzakciókezeléssel megfelelő?
START TRANSACTION;
RENAME TABLE `A` TO `tmp`, `B` TO `A`, `tmp` TO `B`;
COMMIT;
Vagy ez sem 100%-os, és van rá valamilyen más, jobb megoldás?
- 771 megtekintés
Hozzászólások
Biztos ami biztos, tolj bele egy LOCK/UNLOCK TABLES -t ;)
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
Tranzakcio nem erre valo, az csak insertet es update-et tud kezelni, alter table-t nem tudsz rollbackelni (sem).
Meg kell engedned egy par tizedmasodperces exceptiontengert vagy ha nagyon szamit a 100% megbizhatosag, akkor egy par masodperces "nginx-szel kiforceolt karbantartas kepernyot" (ejszaka kozepen). Nincs ra jobb megoldas.
Fix: Hulye vagyok - lock/unlock table read eleg, es akkor addig varnak a lekerdezesek, minden konzisztens marad.
- A hozzászóláshoz be kell jelentkezni
Konkrétan leírhatnád, hogyan gondolod a lock-ot, mert nekem hibát adott a mysql lockolt tábla átnevezésére.
- A hozzászóláshoz be kell jelentkezni
Lentebb Batman megoldasa egyszerubb: ott kiderult hogy ezt a LOCK-ot maga a MySQL is megoldja RENAME-kor, es addig minden olvasas var, ahogy kell neki.
- A hozzászóláshoz be kell jelentkezni
Hello,
Igen a "rename" jo lesz meghozza azert mert: "The rename operation is done atomically, which means that no other session can access any of the tables while the rename is running."
A lenyeg h tabla atnevezes atomic process, igy nyugodtan atnevezheted "menet" kozben is.
Tobb info:
https://dev.mysql.com/doc/refman/5.7/en/rename-table.html
- A hozzászóláshoz be kell jelentkezni
Akkor ez igy meg okosabb, mint hittem, koszi. Az altalam javasolt lock/unlock table read-et magatol is megcsinalja, az nginx threadek meg addig a par tizedmasodpercig varnak maguktol.
- A hozzászóláshoz be kell jelentkezni
. nemszoltam
- A hozzászóláshoz be kell jelentkezni
Maga a RENAME atomic, és több átnevezést is megadhatsz.
- A hozzászóláshoz be kell jelentkezni