Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Import zrzutu bazy danych
Forum PHP.pl > Forum > PHP
vokiel
Trochę szperałem na forum, jednak nie znalazłem dobrego rozwiązania dla siebie.
Mam bazę danych na serwerze zewnętrznym (MySQL), oraz bazę danych w LANie (MSSQL), z której część rzeczy pobieram i aktualizuję tą na www.
Napisałem sobie skrypt, który wykonuję lokalnie, pobierający wybrane rzeczy, tworzący taki dump dla MySQL'a. Tak, że teraz wystarczy zrobić import tego dump'a do bazy.
Na serwerze zewnętrznym www mam phpmyadmin'a. Aktualnie robię tak, że się do niego loguję, i robię import pliku z zrzutem bazy.
Chcę to zrobić automatycznie. Tylko nie wiem za bardzo jak.
Czy może ktoś pomoże?

z góry dzięki smile.gif
rzymek01
lekturka: CURL" title="Zobacz w manualu PHP" target="_manual
legorek
Jeśli masz taką możliwość: najprostszym sposobem (ale nie najlepszym), będzie zezwolenie na zewnętrzne połączenia do serwera na którym chcesz umieścić dane. Wtedy na localu zrobisz sobie mysql_connect('twoj-serw.pl', 'user', 'pass'). Minusem takiego rozwiązania jest niski poziom bezpieczeństwa. Twój serwer MySQL będzie widoczny na zewnątrz.

Jeśli masz dostęp do shella, możesz sobie stworzyć tunel do serwera na którym stoi MySQL. Konfiguracja jest banalna i możesz pracować jak na lokalnym serwerze. Minusów zasadniczo brak. Sam korzystam z tunelów żeby móc wygodnie pracować na MySQLu.

Trzecia opcja to VPN. Minus: więcej roboty przy konfiguracji.
vokiel
Mogę się połączyć z serwerem do którego wysyłam dane z zewnątrz. Ale nie wiem jak wysłać całego dumpa, żeby nie robić pojedynczych zapytań.
Czyli chciałbym coś w stylu mysql < zrzut.sql. Tylko, że nie wiem jak. Próbowałem z takimi konstrukcjami, ale nie działało:
  1. <?php
  2. system('mysql -h host -u usr -phaslo baza < dump.sql');
  3. exec('mysql -h host -u usr -phaslo baza < dump.sql');
  4. ?>

Ewentualnie wymyśliłem, żeby dumpa wczytać do tablicy dzieląc ; i potem wykonać te wszystkie zapytania zwykłym mysql_query. Tylko czy to będzie optymalne?
Trzeba by wtedy jeszcze zrobić jedną wielką transakcję. Bo mam tam usuwanie wszystkich istniejących rekordów i wrzucanie nowych.

Shell'a nie ma sad.gif
VPN to właśnie za dużo roboty.

No albo te cURL...
barthpl
Cytat(vokiel @ 14.08.2008, 09:08:13 ) *
Ewentualnie wymyśliłem, żeby dumpa wczytać do tablicy dzieląc ; i potem wykonać te wszystkie zapytania zwykłym mysql_query. Tylko czy to będzie optymalne?

Ja tak to wykonuje i nie narzekam... ...przecież jak często taką operację będziesz wykonywałquestionmark.gif
Nie wiem czy potrzebujesz czy nie - mój kod wygląda mniej więcej tak:
  1. <?php
  2. function importDumpFile( $filePath )
  3. {
  4. if (!is_file($filePath))
  5. throw new Exception("Podany plik ($filePath) nie istniej!!");
  6.  
  7. $lines = file( $filePath );
  8. $query = '';
  9. foreach ( $lines as $line )
  10. {
  11. // pozbycie się nie potrzebnych linijek;
  12. if( strncmp($line,'--',2) == 0 )
  13. continue;
  14. if( strncmp($line,'/*',2) == 0 )
  15. continue;
  16.  
  17. $line = ' '.trim($line);
  18. $query .= $line;
  19.  
  20. if( $line[strlen($line) - 1] == ';' ){
  21. // DB()->query( $query ) jest to funkcja która wykonuje zapytanie SQL zapisane w $query;
  22. DB()->query( $query );
  23. $query = '';
  24. }
  25. }
  26. }
  27. ?>
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.