2014-10-01 3 views
1

Я пытаюсь восстановить базу данных mysql с помощью php. Я гугл и нашел этот кусок кода: -Как восстановить базу данных mysql в php

<?php 

$restore_file = "backup.bkp"; 
$server_name = "localhost"; 
$username  = "root"; 
$password  = "pass"; 
$database_name = "db"; 

$cmd = "mysql -h {$server_name} -u {$username} -p{$password} {$database_name} 
< $restore_file"; 
exec($cmd); 

?> 

Я использую общий сервер (Linux) и файл был восстановлен с помощью PHPMyAdmin успешно. Но я хочу использовать php для восстановления. Код не работает. Где я ошибаюсь?

+0

Сделайте 'echo $ cmd;' и запустите напечатанную строку в консоли. Скорее всего, проблема заключается в новом символе строки перед '<' (если, конечно, его нет, и вы сделали это для форматирования рассматриваемого кода). Или путь к '$ restore_file' недопустим. – Cheery

+0

@ Опишите, да, я сделал это для форматирования кода – khandelwaldeval

+1

Если это общий сервер, вполне вероятно, что ваши скрипты не будут иметь права использовать 'exec'. Убедитесь, что ваш 'error_reporting' установлен в' E_ALL' и сообщите нам, какие сообщения вы получаете. – Scopey

ответ

1

Благодаря @Scoopy, я обнаружил, что exec() был отключен моим хостинг-провайдером. Тем не менее, я решил мою проблему, используя следующий код, который я нашел here: -

$db = mysql_connect ('localhost', 'username', 'pass') or die('not connected'); 
mysql_select_db('test', $db) or die('Not found'); 
$fp = fopen ('backup-file', 'r'); 
$fetchData = fread ($fp, filesize ('backup-file')); 
$sqlInfo = explode (";\n", $fetchData); // explode dump sql as a array data  

foreach ($sqlInfo AS $sqlData) 
{ 
mysql_query ($sqlData) or die('Query not executed'); 
} 

НО, код DEPRECATED. Итак, я составил этот код: -

$host = 'localhost'; 
$user = 'root'; 
$password = 'root'; 
$database = 'test'; 

$conn = new mysqli($host, $user, $password, $database); 
$conn->autocommit(FALSE); 

$fp = fopen('bkp-file', 'r'); 
$fetchData = fread($fp, filesize('bkp-file')); 
$sqlInfo = explode(";\n", $fetchData); // explode dump sql as a array data 

foreach ($sqlInfo AS $sqlData) { 
    $conn->query($sqlData); 
} 
$conn->commit(); 
$conn->close(); 

Этот код идеально подходит для использования. Он использует транзакции для предотвращения множественной записи.

0

Я не понимаю, зачем вам нужен PHP, вы можете сделать это прямо в терминале.

резервного

mysqldump -u root -p db> backup.bkp 

Восстановления

mysql -u root -p db < backup.bkp 
+0

У меня нет доступа к терминалу – khandelwaldeval

+0

, к чему у вас есть доступ, как вы получаете доступ к серверу PHP? вы все еще можете запрограммировать эту команду в своем php, если у вас нет выбора. вы можете опустить пароль – meda

+0

выполните эти команды в shell_exec в php – mahen3d

1

Вообще хостинг сервер будет запрещать доступ к функциям системы, как это представляет угрозу безопасности для них. Вы можете подтвердить это, если поставщик вашего сервера позволяет вам использовать команду phpinfo (docs).

Создайте страницу, которая сбрасывает информацию о PHP, а затем просматривает эту страницу для настройки под названием disable_functions - она ​​находится в разделе «Core». Если появится exec, вы узнаете, что exec является отключенной функцией, и вы не сможете ее использовать. К сожалению, один из недостатков использования некоторых общих услуг хостинга, поскольку невозможно/очень сложно реализовать то, о чем вы говорите.

+0

Да. Вы правы. exec() отключен – khandelwaldeval

+0

Извините. .. Чтобы удалить tick.coz, нужно было показать, как я решил проблему. Это тикает мой собственный ответ (в ближайшие 2 дня), но +1 за ваш ответ – khandelwaldeval

Смежные вопросы