Skip to content

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činAuto (struktura i zapisi) ili Samo DDL (struktura bez podataka).

3. Opcije

Opcije tablica

OpcijaUčinak
Kreiraj tabliceStvara odredišne tablice. Isključite kad već postoje
Uključi indeksePonovno stvara indekse
Uključi zadane vrijednostiPrenosi zadane vrijednosti stupaca
Uključi strane ključevePonovno stvara FK ograničenja
Uključi engine/tip tabliceMySQL engine, npr. InnoDB
Uključi kodnu stranicuPrenosi charset
Uključi auto incrementZadržava auto-increment stupce
Uključi okidačeKopira okidače vezane uz odabrane tablice — samo isti motor, vidi niže
Obriši odredišne objekte prije stvaranjaPrvo briše ono što je ondje
Prilagodi DEFINER ciljnom korisnikuPrepisuje DEFINER kopiranih pogleda, rutina i okidača na račun pod kojim se prijenos izvodi. Uključeno po zadanom

Opcije zapisa

OpcijaUčinak
Kreiraj zapiseKopira retke, ne samo strukturu
Koristi transakcijuOmata prijenos pa se kod greške sve poništava
Koristi proširene INSERT naredbeVišeredni INSERT — znatno brže
Nastavi pri grešciPrelazi preko neispravnih redaka umjesto da stane
Veličina serijeBroj 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 poklapajuint(11), datetime, longtext, ugrađeni ENUM(...).
  • Cijele konstrukcije nemaju parnjakaAUTO_INCREMENT, ENGINE=InnoDB, DEFAULT CHARSET, KEY definicije unutar CREATE 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 srediniSigurnosna kopija i obnova
Druga bazaPrijenos 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