За последние 24 часа нас посетили 17824 программиста и 1681 робот. Сейчас ищут 888 программистов ...

sql-dump via php without exec

Тема в разделе "PHP для новичков", создана пользователем Dimasick, 13 окт 2014.

  1. Dimasick

    Dimasick Активный пользователь

    С нами с:
    30 апр 2011
    Сообщения:
    57
    Симпатии:
    0
    Хотелось бы делать дамп (полный бэкап) базы (sql) с помощью php-скрипта (автоматически в cron-e). Поискал в интернете, но ничего из того, что попалось, не подходит по разным причинам:
    1. У хостера запрещены exec, system команды в php-скриптах (в целях безопасности).
    2. Sypex Dumper просто подвисает да и не знаю, есть ли там автоматизация (регулярное автоматическое выполненеие).
    3. Примеры http://sitear.ru/material/mysql-backups, http://www.sql.ru/forum/541966/php-kak-sozdat-damp-mysql-sredstvami-php судя по обсуждениям далеки от совершенства, т.е. не факт, что будут работать корректно (например, учитывать тип таблицы, вид сравнения, текущий AUTO_INCREMENT и т.д.).

    Кто что посоветует?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если в кроне то mysqldump
     
  3. Dimasick

    Dimasick Активный пользователь

    С нами с:
    30 апр 2011
    Сообщения:
    57
    Симпатии:
    0
    Нет у хостера в кроне такой фишки. У него в кроне можно только подключать свой php-файл.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    vps бери и будь счастлив. =)
     
  5. Dimasick

    Dimasick Активный пользователь

    С нами с:
    30 апр 2011
    Сообщения:
    57
    Симпатии:
    0
    Тоже не вариант. Нужен код корректно работающего php-скрипта, но без exec, system. Может, кто видел такой? Просьба полуфабрикты (см. ссылки в первом посте) не советовать.
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Это надо phpMyAdmin расковырять до винтика - как он экспорт делает... А лучше да, нормальный хостинг
     
  8. Dimasick

    Dimasick Активный пользователь

    С нами с:
    30 апр 2011
    Сообщения:
    57
    Симпатии:
    0
    Ясно.... но если вдруг кто найдет готовый php-скрипт и напишет здесь об этом, то будет здорово.
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    И что там? Не надо такие ссылки давать.
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    почему?
    вот нашел и написал.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну это некрасиво. там куча ссылок, которые не подходят. возможно есть которые подходят. но так некрасиво полюбас. если бы человек умел найти он бы нашел. он пришел за советом и помощью. 99% задач не нуждаются в том, чтобы обсуждать их на форуме. Закрывать чтоли? =)
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    igordata, очень трогательно видеть как ты заботишся о красоте. но если моя ссылка не подойдет, автор сам скажет об этом.

    я постоянно убеждаюсь в том, что люди не умеют гуглить. например пишут эти свои "…without exec", и находят что угодно, только не по теме.

    Добавлено спустя 6 минут 15 секунд:
    Dimasick, "судя по обсуждениям далеки от совершенства". дык, нет в мире совершенства!
    ты попробуй подойдет ли инструмент X именно тебе, а то балаболок хватает — читать не перечитать.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не скажет. молча зависнет на том форуме, где с ним будут разговаривать не на отъебись.

    да

    короче Админ завещал так не делать, и в этом несомненно есть смысл для форума.
     
  15. abler98

    abler98 Активный пользователь

    С нами с:
    31 авг 2014
    Сообщения:
    43
    Симпатии:
    0
    Нашел в интернете:
    Код (PHP):
    1. <?php
    2. // задаем побольше времени для выполнения скрипта
    3.  
    4. // ===>>>подключение к БД
    5. define("HOST", "");
    6. define("USER", "best_like");
    7. define("PASSWORD", "best_like");
    8. define("DB_NAME", "best_like");
    9. $db_connect = mysql_connect(HOST, USER, PASSWORD, TRUE); 
    10. mysql_selectdb(DB_NAME, $db_connect);
    11. // <<<===
    12.  
    13. // ===>>>Получаем список всех таблиц
    14. $tables = array(); 
    15. $result = mysql_query('SHOW TABLES');
    16. while($row = mysql_fetch_row($result)){
    17. $tables[] = $row[0];
    18. }
    19. // <<<===
    20.  
    21. // создаем и открываем файл для записи дампа
    22. $file = fopen('db_backup_'.date('Y_m_d').'.sql','w+');
    23. // Перебираем все таблицы
    24. foreach($tables as $table){
    25. // все данные из таблицы
    26. $result = mysql_query('SELECT * FROM '.$table); 
    27. // количество записей в таблице
    28. $countFields = mysql_num_fields($result);
    29. // получаем sql-код для создания таблицы
    30. $createTable = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
    31. // записываем в переменную sql-код
    32. $sql.= "n".$createTable[1].";nn";
    33. // перебираем все записи в таблице
    34. for ($i = 0; $i < $countFields; $i++){
    35. while($row = mysql_fetch_row($result)){
    36. // ===>>> записываем в переменную sql-код для записи данных
    37. $sql.= 'INSERT INTO '.$table.' VALUES(';
    38. // перебираем все поля таблицы
    39. for($f=0; $f<$countFields; $f++){
    40. // экранируем спецсимволы (добавляем слеши)
    41. $row[$f] = addslashes($row[$f]);
    42. // если есть значение, то записываем его
    43. if (isset($row[$f])) {
    44. $sql.= '"'.$row[$f].'"' ; 
    45. }else{
    46. $sql.= '""'; 
    47. }
    48. // если поле не последнее добавляем запятую
    49. if ($f<($countFields-1)) {
    50. $sql.= ','; 
    51. }
    52. }
    53. $sql.= ");n";
    54. // <<<===
    55. // записываем в файл, то что скопилось в переменной
    56. fwrite($file, $sql);
    57. // очищаем переменную
    58. $sql = "";
    59. }
    60. }
    61. // делаем красиво (отступ)
    62. $sql.="n";
    63. } 
    64. // закрываем и сохраняем файл
    65. fclose($file); 
    66. ?>
    Только почему-то слэшей нету :)
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    abler98 плохой код
     
  17. abler98

    abler98 Активный пользователь

    С нами с:
    31 авг 2014
    Сообщения:
    43
    Симпатии:
    0
    да, очень плохой, но похож на рабочий))
     
  18. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    я не хочу давать ему лимит памяти в пару десятков гигов чтоб он смог табличку экспортировать)))