Prijenos podataka
Prijenos podataka kopira tablice, poglede, procedure i funkcije iz jedne baze u drugu — uključujući između različitih vrsta baza. Iz MySQL-a u PostgreSQL, iz SQLite-a u SQL Server, iz produkcije u lokalnu kopiju.
Otvorite ga preko Alati → Data Transfer ili desnim klikom na bazu pa Data Transfer.
Čarobnjak
1. Izvor i odredište
Odaberite konekciju i bazu s obje strane. NabuSQL za obje prikazuje vrstu konekcije, naziv, host, port i verziju servera, pa možete potvrditi da ciljate ondje gdje mislite.
2. Odabir objekata
Stablo objekata grupira sve u Tablice, Poglede i Funkcije / Procedure. Označite što želite prenijeti.
Označite pojedinu tablicu da je posebno podesite: njezin odredišni naziv i način — Auto (struktura i zapisi) ili Samo DDL (struktura bez podataka).
3. Opcije
Opcije tablica
| Opcija | Učinak |
|---|---|
| Kreiraj tablice | Stvara odredišne tablice. Isključite kad već postoje |
| Uključi indekse | Ponovno stvara indekse |
| Uključi zadane vrijednosti | Prenosi zadane vrijednosti stupaca |
| Uključi strane ključeve | Ponovno stvara FK ograničenja |
| Uključi engine/tip tablice | MySQL engine, npr. InnoDB |
| Uključi kodnu stranicu | Prenosi charset |
| Uključi auto increment | Zadržava auto-increment stupce |
| Uključi okidače | Kopira okidače vezane uz odabrane tablice — samo isti motor, vidi niže |
| Obriši odredišne objekte prije stvaranja | Prvo briše ono što je ondje |
| Prilagodi DEFINER ciljnom korisniku | Prepisuje DEFINER kopiranih pogleda, rutina i okidača na račun pod kojim se prijenos izvodi. Uključeno po zadanom |
Opcije zapisa
| Opcija | Učinak |
|---|---|
| Kreiraj zapise | Kopira retke, ne samo strukturu |
| Koristi transakciju | Omata prijenos pa se kod greške sve poništava |
| Koristi proširene INSERT naredbe | Višeredni INSERT — znatno brže |
| Nastavi pri grešci | Prelazi preko neispravnih redaka umjesto da stane |
| Veličina serije | Broj redaka po seriji |
Ostalo
- Kreiraj odredišnu bazu ako ne postoji — stvara bazu kad je nema.
4. Pokretanje
Napredak se prikazuje po fazama — stvaranje sheme pa kopiranje — i po objektu. Rezultat je Prijenos završen, Završeno s greškama uz popis, ili greška.
Okidači
Uključi okidače prenosi okidače koji vise o tablicama koje ste odabrali — zasebne grupe okidača u koraku 2 nema. Dvije stvari vrijedi znati:
- Stvaraju se nakon kopiranja redaka, kao zadnja faza tablice. Da su stvoreni prije insert petlje, opalili bi jednom po svakom kopiranom retku, što bi tiho pokvarilo podatke umjesto da pukne.
- Samo isti motor. Tijelo okidača ne da se prevesti između dijalekata, pa se kod prijenosa između različitih motora okidači preskaču — bez greške i bez prekida prijenosa.
DEFINER
MySQL i MariaDB svaki pogled, proceduru, funkciju i okidač žigošu s DEFINER=`korisnik`@`host`, a taj račun mora postojati na serveru na koji objekt slijeće. Kopirajte pogled čiji je definer root@localhost na server na koji se spajate kao web@% i on se ili neće stvoriti ili će puknuti prvi put kad ga netko upotrijebi.
Prilagodi DEFINER ciljnom korisniku — uključeno po zadanom — prepisuje DEFINER svakog kopiranog pogleda, rutine i okidača na račun pod kojim je prijenos spojen na odredište. Kad se taj račun ne može utvrditi, klauzula se umjesto toga izbacuje pa je server sam popuni.
Isključite je da se definer prenese doslovno, što želite kad umnožavate server na kojem su računi na obje strane jednaki.
Profili
Spremi profil pohranjuje cijelu konfiguraciju — izvor, odredište, odabir objekata i opcije. Učitaj profil je vraća. Isplati se za svaki prijenos koji pokrećete više puta, poput osvježavanja razvojne baze iz produkcije.
Promjena baze: koristite ovo, ne dump
Dump — iz Sigurnosne kopije i obnove ili iz mysqldump-a — pisan je u SQL-u izvorne baze i namijenjen je obnovi na istoj vrsti servera. Puštanje takvog dumpa na drugu bazu puca već na prvoj naredbi, a razlozi nisu površinski:
- Identifikatori su citirani na način te baze. MySQL-ovi backtickovi su svugdje drugdje sintaktička greška, a stoje uz svaku tablicu i stupac u datoteci.
- Tipovi se ne poklapaju —
int(11),datetime,longtext, ugrađeniENUM(...). - Cijele konstrukcije nemaju parnjaka —
AUTO_INCREMENT,ENGINE=InnoDB,DEFAULT CHARSET,KEYdefinicije unutarCREATE TABLE,LOCK TABLES. - Escapeanje nizova se razlikuje. MySQL navodnik escapa kao
\'; PostgreSQL obrnutu kosu crtu čita doslovno, pa niz završi prerano. To jedino kvari podatke umjesto da glasno padne, što ga čini najgorim od četiri.
Prijenos podataka sve to zaobilazi jer nikad ne prenosi SQL tekst. Čita shemu izvora, iznova generira DDL za ciljni dijalekt i kopira retke kroz driver s vrijednostima predanim kao parametri, a ne zalijepljenim u naredbe.
Pravilo:
| Koristite | |
|---|---|
| Ista baza, ili datoteka u sredini | Sigurnosna kopija i obnova |
| Druga baza | Prijenos podataka |
Napomene o različitim bazama
Prijenos između različitih vrsta baza znači da se tipovi preslikavaju, a ne kopiraju. Provjerite rezultat kad izvor koristi tipove specifične za jednu bazu — MySQL ENUM, PostgreSQL nizove, SQL Server UNIQUEIDENTIFIER.
Procedure i funkcije kopiraju se kao izvorni tekst. SQL dijalekti se razlikuju, pa rutina koja radi na MySQL-u često treba doradu nakon slijetanja na PostgreSQL. Tablice i pogledi su dio koji putuje čisto.
Krenite probno
Za prvi prijenos između nepoznatih servera odaberite jednu tablicu, postavite Samo DDL i pokrenite. Vidjet ćete kako se tipovi preslikavaju prije nego se obvežete na potpuno kopiranje.
Povezano
- Sigurnosna kopija i obnova — isti server, datoteka u sredini.
- Usporedba strukture i podataka — provjera da se dvije strane poklapaju.
