Как скопировать MySQL DB с локального хоста на сервер с помощью PHP? - PullRequest
0 голосов
/ 06 июля 2018

У меня запущен проект php на моем локальном компьютере (angular, php, mysql). Та же копия проекта, запущенная в сети. Моя цель - синхронизировать (копировать локальные базы данных на серверные базы данных) каждый час, запустив любой скрипт PHP с использованием угловой функции set Interval. Какую ИДЕЮ стоит за этой функциональностью я должен использовать? или как мне этого добиться? Любые предложения будут большой помощью для меня, и заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 07 июля 2018

Вы можете запустить задание cron на локальном компьютере, который экспортирует данные MySQL с помощью mysqldump, а затем загружает их на сервер с помощью rsync и sshpass .

0 голосов
/ 06 июля 2018

Вам потребуется написать сервис и некоторый код для выгрузки базы данных (если вы хотите синхронизировать полную базу данных каждый раз), следуйте этому ответу

После сброса вашего sql вы должны загрузить файл на свой сервер через сервис. После получения вы можете загрузить данные снова mysql -u username -p database_name < file.sql

Однако я не буду рекомендовать это, попробуйте изучить подход базы данных Master-Slave Database, где база данных вашего локального сервера будет Master, а ваш удаленный сервер будет slave. Ваши данные будут автоматически синхронизированы. Пожалуйста, смотрите этот урок

0 голосов
/ 06 июля 2018

Вы можете реализовать интерфейс для выбора таблиц, которые вы хотите импортировать в прямом эфире. Используйте приведенный ниже код для создания CSV-файлов выбранных таблиц и подготовки массива.

<?php
$file_name_flat = 'TABLE-NAME.csv';  // Replace TABLE-NAME with your selected table name.

$fpointer = fopen(FOLDER-LOCATION.$file_name_flat, 'w+');  // Open CSV file. Replace 
FOLDER-LOCATION with your local folder path where you want to save this CSV files.

//Execute query to get all columns data
$query = "select * FROM TABLE-NAME WHERE 1";  // Replace TABLE-NAME with your selected 
table name. You can set other conditions based on your requirement.

//Execute query as per your CMS / Framework coding standards and write CSV file.
$result_flat = $DB_Connection->query($query)->fetchAll('assoc');
foreach ($result_flat as $fields) {          
  fputcsv($fpointer, $fields);
}

//Prepare Array of CSVs to create ZIP file
$files = array($file_name_flat);

fclose($fpointer); // close CSV file after successfully write.
?>

СОЗДАТЬ ЗИП CSV

//Create ZIP
$zipname = 'tables_'.date('Y-m-d-H-i-s').'.zip';
createZipFile($files,$zipname,FOLDER_LOCATION);  //Replace FOLDER-LOCATION with your 
local folder path where you saved CSV files. 

/* createZipFile Funcation to create zip file Both params are mandatory */
function createZipFile($files_names = array(),$zipfileName, $files_path=""){

    $zip = new \ZipArchive;
    $zip->open(TMP.$zipfileName, \ZipArchive::CREATE);
    foreach ($files_names as $file) {
        $zip->addFile($files_path.$file,$file);
    }
    $zip->close();

    foreach ($files_names as $file) {
        unlink($files_path.$file);
    }

    ///Then download the zipped file.
    header('Content-Type: application/zip');
    header('Content-disposition: attachment; filename='.$zipfileName);
    header('Content-Length: ' . filesize(FOLDER_LOCATION.$zipfileName));
    readfile(TMP.$zipfileName);
    unlink(TMP.$zipfileName);
    die;
}

Теперь реализуйте форму для загрузки этого zip-файла на работающий сервер. В поле Действия этой формы добавьте код для получения zip-файла.

$filename = $_FILES['filename']['name'];
$source = $_FILES["filename"]["tmp_name"];

//Upload zip file to server location. Replace SERVER_FOLDER_PATH to server's location 
where you want to save uploaded zip.
if(move_uploaded_file($source, SERVER_FOLDER_PATH)) {

   //Extract ZIP file

    $zip = new \ZipArchive();
    $x = $zip->open($target_path);
    if($x === true) {
       $zip->extractTo(PATH_TO_SAVE_EXTRACTED_ZIP); // change this to the correct site path                    
       $zip->close();

       $cdir = scandir(PATH_TO_SAVE_EXTRACTED_ZIP);  // Read DIR

       $fieldSeparator = ",";
       $lineSeparator = '\n';

       foreach ($cdir as $key => $value)
       {                
          if (!in_array($value,array(".","..")))
          {
             $fileName =  PATH_TO_SAVE_EXTRACTED_ZIP.$value; // replace 
PATH_TO_SAVE_EXTRACTED_ZIP with your server path
             $tableName = SET_TABLE_NAME;  // You have to set the logic to get the table name.

             if (is_file($fileName))  
             {
                 // User MYSQL "LOAD DATA LOCAL INFILE" to IMPORT CSVs into particular tables. There are option available for this LOAD DATA process. It will import your CSV to particular table. No need to execute loop to insert data one by one.

                 $q = 'LOAD DATA LOCAL INFILE "'.$fileName.'"  REPLACE INTO TABLE '.$tableName.' FIELDS TERMINATED BY "' .$fieldSeparator. '" Enclosed BY '.'\'"\''.' LINES TERMINATED BY "'.$lineSeparator.'"';
                 $DB_Connection->query($q);  
         }
      } 
   }
}  

Вы можете проверить НАГРУЗКУ ДАННЫХ MySQL из - MYSQL

0 голосов
/ 06 июля 2018

Если ваши таблицы базы данных не собираются менять то, что вы можете сделать, это создать функцию, выбрать все данные из вашей локальной базы данных и передать эти данные в онлайн-функцию для обновления вашей онлайн-базы данных новыми или обновленными записями.

Например:

Если у вас есть таблица с именем users. В AJAX вы выберете все локальные данные и создадите объект JSON, передав данные в функцию скрипта. Из этого объекта JSON вы передадите данные в онлайн-файл php и обновите из него свою онлайн-базу данных.

Примечание. Вы должны тщательно указать множество условий, чтобы проверить, не пропущены ли данные или нет.

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