Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przeniesienie dużej tabeli
sazian
post
Post #1





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


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.

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 13:00