czajna
27.04.2010, 18:58:16
Witajcie,
szukam sposobu aby wyeksportować wiele tabel z mojej bazy, tak aby każda tabela znalazła się w osobny pliku (potrzbuje to aby dokonać migracji mojej Joomli). Oczywiście mogę eksportować każdą tabelę po kolei za pomocą PhpMyAdmina ale będzie to czasochłonne, czy znacie jakieś sprytniejsze sposoby?
T
WebSee
27.04.2010, 19:02:59
A nie możesz po prostu wyeksportować wszystkich tabel do jednego pliku?
lobopol
27.04.2010, 19:06:27
Eksport wszystkich tablic to jednego pliku, a następnie podzielić zawartość tego pliku explodem i w pętli tworzyć pliki zawierające poszczególne elementy utworzonej tablicy.
czajna
27.04.2010, 19:22:41
Niestety nie może być to jeden plik.
Cytat
Eksport wszystkich tablic to jednego pliku, a następnie podzielić zawartość tego pliku explodem i w pętli tworzyć pliki zawierające poszczególne elementy utworzonej tablicy.
Sorry za ignorancję, ale że to dział dla początkujących pozwolę sobie...czy możesz trochę szerzej objaśnić?
lobopol
27.04.2010, 19:28:05
No cóż tu napisać więcej eksportujesz sobie wszystkie tabele do jednego pliku za pomocą phpmyadmina, następnie otwierasz sobie plik np funkcją fopen, masz długaśnego stringa którego dzielisz explodem i i tworzysz sobie nowe pliki w pętli do każdego pliku zapisujesz kolejny fragment tablicy uzyskanej z explode-a.
czajna
27.04.2010, 19:36:56
Dzięki za pomoc, chyba jestem jednak zbyt zielony na taką 'operacje'. Miałem nadzieję że nie zauważyłem jakiejś funkcji w phpmyadminie
gothye
27.04.2010, 19:39:49
A Ja to widzę tak

$tabele[] = $row[0];
foreach($tables as $key => $table)
{
$sql_table[] = $tmp ;
if($sql_table)
{
fputs($SQLfile,"------------------------------------------\n"); fputs($SQLfile,"--- Copy of tabele : $table \n"); fputs($SQLfile,"------------------------------------------\n\n");
fputs($SQLfile,"DELETE FROM $table;\n");
foreach($sql_table as $keys => $row)
{
fputs($SQLfile,"INSERT INTO $table ("); foreach($row as $field => $value)
{
$fields[] = $field;
else
$values[] = 'NULL';
}
fputs($SQLfile,') VALUES ('); }
}
}
czajna
27.04.2010, 20:03:44
Hm...i puszczam ten kod w okienku zapytania SQL?
nospor
27.04.2010, 20:04:17
Nie. To jest skrypt PHP
czajna
28.04.2010, 19:58:42
A co w tym skrypcie należałoby zmienić żeby eksportowało tabele w trybie zgodności MYSQL 40?
nospor
28.04.2010, 20:01:50
Cytat
trybie zgodności MYSQL 40
poczekac kilkadziesiąt lat

jesli zas miales na mysli mysql 4.0 to raczej nic nie trzeba zmieniac. Skrypt jest tak prosty ze nie korzysta ze specjalnych rzeczy niedostepnych dla mysql 4.0
czajna
28.04.2010, 20:55:13
Hm...w PhpMyAdminie jest opcja 'Tryb zgodności SQL' i żeby poprawnie wykonać migracje wiem że właśnie w tym 'trybie' mam eksportować, czyli mam rozumie że Twój skrypt będzie ok?
T
nospor
28.04.2010, 21:01:05
To nie mój skrypt - ja tylko odpowiadam na Twoje pytania.
Z tego co widzę, skrypt ten nie generuje zadnych dziwnych zapytan, wiec pójdzie i na mysql4. Włącznie z zapytaniami, które tworzy w pliku.
czajna
28.04.2010, 21:11:38
Ok, czyli skrypt zapisałem jako php, dodałem znaczniki php na początku i końcu, wrzuciłem na serwer odpaliłem za pomocą przeglądarki i...
Kod
Warning: mysql_list_tables() [function.mysql-list-tables]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /homez.106/narowerz/www/migrate.php on line 4
Warning: mysql_list_tables() [function.mysql-list-tables]: A link to the server could not be established in /homez.106/narowerz/www/migrate.php on line 4
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /homez.106/narowerz/www/migrate.php on line 5
Warning: Invalid argument supplied for foreach() in /homez.106/narowerz/www/migrate.php on line 9
Czy coś powinienem uzupełnić oprócz nazwy bazy danych w skrypcie?
nospor
28.04.2010, 21:15:21
a mysql_connect() dales?
czajna
28.04.2010, 21:29:50
Teraz dodałem na początku:
Kod
<?php
$host='';
$user='';
$pass='';
$db='';
$link = mysql_connect("$host", "$user", "$pass") or die('Connection error : ' . mysql_error());
mysql_select_db("$db") or die('Could not select database');
i wyskakuje błąd:
Kod
Warning: Invalid argument supplied for foreach() in /homez.106/narowerz/www/migracja/migrate.php on line 18
nospor
28.04.2010, 21:38:55
czy host i user i db u siebie tez masz puste? No przeciez tak nie mozna.
czajna
28.04.2010, 22:04:43
Oczywiscie, ze nie. Wszystko jest uzupelnione.
nospor
28.04.2010, 22:12:08
ok.
w skrypcie jest literowka:
nie:$tabele[] = $row[0];
a:$tables[] = $row[0];
czajna
28.04.2010, 22:31:01
nospor
29.04.2010, 06:57:54
uzywasz fputs() a nigdzie nie masz fopen()
czajna
9.05.2010, 17:23:19
Cytat(nospor @ 29.04.2010, 07:57:54 )

uzywasz fputs() a nigdzie nie masz fopen()
Tzn? Co mam zmienić w skrypcie?
I jednak po testach migracji, potrzebuje tych tabel w trybie zgodności MySQL40 (
tutaj link o co mi chodzi), ponieważ są istotne różnice w kodzie:
http://no-paste.pl/code/10127 i tylko przy MySQL40 migracja się udaje.
Danielcom
9.05.2010, 23:26:02
Cytat(czajna @ 27.04.2010, 19:58:16 )

Witajcie,
szukam sposobu aby wyeksportować wiele tabel z mojej bazy, tak aby każda tabela znalazła się w osobny pliku (potrzbuje to aby dokonać migracji mojej Joomli). Oczywiście mogę eksportować każdą tabelę po kolei za pomocą PhpMyAdmina ale będzie to czasochłonne, czy znacie jakieś sprytniejsze sposoby?
T
Jeśli chcesz zrobić migrację joomli to nie musisz wszystkich tabel zapisywać oddzielnie, przecież można zrobić normalny export. A po za tym tym nie ma aż tak dożo tabel, nawet gdyby ręcznie trzeba było to zrobić.
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.