Oto informacje, które mam:
Pracuję z systemem opartym na Linuksie przy użyciu MySQL i PHP5. Muszę mieć możliwość wygenerowania pliku mysqldump
z pliku .php, a następnie zapisania tego zrzutu w pliku na serwerze w określonej przeze mnie lokalizacji.
Ponieważ jestem noobletem PHP, chciałbym, aby ktoś udzielił mi pomocy, wskazówek lub kodu, który zrobiłby to, czego potrzebuję. Musiałoby to być uruchamiane zdalnie z Internetu.
mysqldump
przezsystem()
.Odpowiedzi:
Możesz użyć tej
exec()
funkcji do wykonania zewnętrznego polecenia.Uwaga: między
shell_exec()
aexec()
wybrałbym drugi, który nie zwraca danych wyjściowych do skryptu PHP - nie ma potrzeby, aby skrypt PHP pobierał cały zrzut SQL jako ciąg znaków: wystarczy, że zostanie on zapisany do pliku, i można to zrobić za pomocą samego polecenia.To zewnętrzne polecenie:
mysqldump
, z odpowiednimi parametrami,Na przykład :
Co oznacza, że Twój kod PHP wyglądałby tak:
Oczywiście do Ciebie należy użycie odpowiednich informacji o połączeniu, zastępując
...
te.źródło
exec()
nie zwróci, dopóki polecenie nie zostanie zakończone; więc po prostu włóż trochęecho "dump complete"
po zadzwonieniuexec()
/usr/local/mysql/bin/mysqldump
exec("C:/pathto/mysql/bin/mysqldump.exe <options as above>");
Jeśli chcesz utworzyć kopię zapasową, aby pobrać ją przez przeglądarkę, możesz to również zrobić bez użycia pliku.
Funkcja php passthru () bezpośrednio przekieruje wyjście mysqldump do przeglądarki. W tym przykładzie również zostanie spakowany.
Pro: Nie musisz zajmować się plikami tymczasowymi.
Wada: nie będzie działać w systemie Windows. Może mieć ograniczenia w przypadku ogromnych zbiorów danych.
źródło
Spójrz tutaj: https://github.com/ifsnop/mysqldump-php ! Jest to natywne rozwiązanie napisane w php.
Możesz go zainstalować za pomocą narzędzia Composer i jest to tak proste, jak:
Obsługuje zaawansowanych użytkowników, z wieloma opcjami skopiowanymi z oryginalnego mysqldump.
Wszystkie opcje są wyjaśnione na stronie github, ale mniej więcej są auto-wyjaśniające:
źródło
exec
i / lub sąshell_exec
wyłączone przez zabezpieczenia, mysqldump-php działa świetnie! Właśnie wypróbowałem to teraz na serwerach Umblera i pomyślnie wykonałem zrzut. Bardzo dziękuję za wskazówkę!Skieruj się na poniższy link, który zawiera skryptlet, który pomoże Ci: http://davidwalsh.name/backup-mysql-database-php
Uwaga: ten skrypt może zawierać błędy z typami danych NULL
źródło
Ze względów bezpieczeństwa zaleca się podanie hasła w pliku konfiguracyjnym, a nie w poleceniu (użytkownik może wykonać a
ps aux | grep mysqldump
i zobaczyć hasło).źródło
Tutaj znajdziesz kompleksowe rozwiązanie do zrzucania struktury i danych mysql, takich jak w PMA (bez użycia exec, passthru itp.):
https://github.com/antarasi/MySQL-Dump-with-Foreign-keys
To rozwidlenie projektu dszymczuk z moimi ulepszeniami.
Użycie jest proste
działa jak marzenie :-)
źródło
Dopóki możesz używać funkcji exec () , możesz wykonywać polecenia powłoki za pośrednictwem kodu PHP.
Zakładając, że wiesz, jak napisać mysqldump w linii poleceń, tj
możesz użyć tego jako parametru funkcji exec ().
źródło
Odpowiedź MajorLeo wskazuje mi właściwy kierunek, ale nie zadziałała. Znalazłem tę witrynę, która stosuje to samo podejście i działa.
Mam nadzieję, że pomoże to komuś innemu!
źródło
Cóż, zawsze możesz użyć wywołania funkcji systemowej PHP.
http://php.net/manual/en/function.system.php
http://www.php.net/manual/en/function.exec.php
To uruchamia dowolny program wiersza poleceń z PHP.
źródło
<?php exec('mysqldump --all-databases > /your/path/to/test.sql'); ?>
Możesz rozszerzyć polecenie o dowolne opcje, które mysqldump bierze oczywiście. Użyj,
man mysqldump
aby uzyskać więcej opcji (ale myślę, że wiesz o tym;))źródło
Oto kolejna natywna opcja oparta na PHP: https://github.com/2createStudio/shuttle-export
źródło
źródło
Żaden z powyższych kodów nie działał dla mnie. Używam Windows. Poniższy kod zadziałał dla mnie ...
Spowoduje to zapisanie pliku w folderze projektu zgodnie z zapytaniem, dowolne dane.
źródło
Aby zrzucić bazę danych za pomocą shell_exec (), poniżej znajduje się metoda:
źródło
źródło