Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przeniesienie dużej tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
sazian
Witam,
mam spory problem z przeniesieniem jeszcze większej tabeli.
Tabela ma ponad 30GB, próbowałem ją przenieść tak

  1. INSERT INTO baza_2.tabela SELECT * FROM baza_1.tabela

na tabeli baza_2.tabel mam zdjęte wszystkie indeksy. zapis i odczyt z obu tabel został wyłączony(to znaczy żaden skrypt z nich obecnie nie korzysta)

To zapytanie wywalało mi błąd ERROR 1206 (HY000): The total number of locks exceeds the lock table size

więc administrator serwera ustawił mi innodb_buffer_pool_size = 16M

a zapytanie zmieniłem tak

  1. SET @@AUTOCOMMIT=0;
  2. INSERT INTO baza_2.tabela SELECT * FROM baza_1.tabela;
  3. COMMIT;

i dalej to samo...
zmieniłem zapytanie na

  1. SET @@AUTOCOMMIT=0;
  2. LOCK TABLES baza_2.tabela WRITE, baza_1.tabela READ;
  3. INSERT INTO baza_2.tabela SELECT * FROM baza_1.tabela;
  4. UNLOCK TABLES;
  5. COMMIT;

i na razie jeszcze się wykonuje i mam nadzieję że się uda.

Tylko teraz nasuwa mi się pytanie jak tego typu operacje powinno się wykonywać ?
Na pewno jakiś mądry człowiek miał już tego typu problemy wcześniej, tylko za żadne skarby nie mogę znaleźć jak to zrobić sad.gif

owszem znalazłem jakieś sposoby ale one wymagają wyłączenia bazy i kopiowania plików z danymi, ale na to nie mogę sobie pozwolić - niemoŋe wyłączyć bazy, a tym bardziej ryzykować uszkodzenia danych.
Na pozostałych tabelach w bazie 2 odbywa się normalna praca, baza 1 nie jest używana - ale musi cały czas wisieć jako archiwum.

Pyton_000
a może po prostu

mysqldump baza_1.tabela | mysql -u user -p baza_2

?
sazian
ale to będzie waliło praktycznie takimi samymi insertami i powoli mordowało bazę sad.gif
Pyton_000
jak dodasz '--no-create-info --extended-insert' to będziesz miał multi inserty więc będzie się wykonywało dużo szybciej.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.