Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Import zrzutu bazy danych
vokiel
post
Post #1





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
rzymek01
post
Post #2





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


lekturka: CURL" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
legorek
post
Post #3





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


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.

Ten post edytował legorek 13.08.2008, 23:18:51
Go to the top of the page
+Quote Post
vokiel
post
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
VPN to właśnie za dużo roboty.

No albo te cURL...
Go to the top of the page
+Quote Post
barthpl
post
Post #5





Grupa: Zarejestrowani
Postów: 142
Pomógł: 35
Dołączył: 5.12.2006
Skąd: Wrocław

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


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ł(IMG:http://forum.php.pl/style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 11:55