Создать резервную копию базы данных на лету - PullRequest
1 голос
/ 06 апреля 2011

Мне бы хотелось, чтобы в моем приложении была ссылка, позволяющая мне загрузить дамп базы данных. ( à la phpmyadmin, на сервере ничего не сохраняется).

(я думал, что буду использовать php: // temp , чтобы избежать сохранения содержимого на сервере)

Но как создать файл дампа? То, как я это вижу, у меня есть два варианта:

1] использовать system () и mysqldump

$command = `mysqldump -u [username] -p [password] [databasename] | gzip > db.sql.gz`;

но как мне записать дамп на php: // temp?

2] Создайте файл самостоятельно и запишите его в php: // temp

$tables = mysql_query ("SHOW TABLES");

while ($i = mysql_fetch_array($tables))
{
  $i = $i['Tables_in_'.$dbname];

  $create = mysql_fetch_array(mysql_query ("SHOW CREATE TABLE ".$i));
  echo("\n# -------------------------------------------------------- \n");
  echo("\n# \n# Table structure for table `".$create['Table']."` \n# \n");

  echo("\n".$create['Create Table'].";\n\n");

  echo("# \n# Dumping data for table `".$create['Table']."` \n# \n\n");

  $sql = mysql_query ("SELECT * FROM ".$i);
  if (mysql_num_rows($sql)) {
      while ($row = mysql_fetch_row($sql)) {
          foreach ($row as $j => $k) {
              $row[$j] = "'".mysql_escape_string($k)."'";
          }

          echo("INSERT INTO $i VALUES(".implode(",", $row).");\n");
      }    
  }
}

Какой путь мне выбрать?

Ответы [ 3 ]

5 голосов
/ 06 апреля 2011

Первый вариант, который вы должны принять

mysqldump предназначен для резервного копирования или создания файла sql для БД.

Пример

    $command = "mysqldump -u ".USER." -p'".PASSWORD."'  ".DATABASE." ". $value."  -r \"".$backupPath."/".$backupFile."\" 2>&1";

    $res=system($command);
1 голос
/ 06 апреля 2011

Я бы использовал первый вариант, сохранил его на сервере /tmp (или что-то еще) и после вашей команды добавил бы что-то вроде:

header('Content-Type: application/gzip');
header('Content-Disposition: attachment; filename="db.sql.gz"');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
readfile('/tmp/db.sql.gz');

, чтобы начать его автоматическую загрузку.

1 голос
/ 06 апреля 2011

Я бы также использовал первый вариант. Поместите его в файл .sh, сделайте его исполняемым и запускайте его на задании cron так часто, как вам нравится. У меня есть что-то похожее на моем VPS, который работает каждое утро в 9 часов утра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...