Синхронизация баз данных между локальной и удаленной средой разработки

Недавно я работал над локальным проектом и синхронизировал его с онлайн-сервером.

Проблема заключается в том, что теперь она включает в себя функциональность базы данных. Это означает, что всякий раз, когда я меняю локальную базу данных, мне приходится обращаться к cPanel веб-сайта, вводить PHPMyAdmin, удалять всю базу данных и копировать в SQL-запросе, который я экспортировал из своей локальной версии.

Нет ли более простого способа работы с базами данных MySQL, используя логику локального удаленного проектирования?

Ответ 1

Это один из наиболее сложных аспектов развития, поскольку среды часто меняются, когда у вас более одного разработчика и, возможно, нескольких веток и/или серверов. Однако трудно сказать, как это может повлиять на вас, поскольку мы ничего не знаем о конкретных обстоятельствах.

Одним из элементов текущей операции может быть удаление необходимости входа в различные интерфейсы и использование сценариев для достижения того, что вам нужно - меньше руководства; больше автоматизации... В самом основном, вы можете создать PHP script, который:

  • Создал резервную копию вашей производственной базы данных и сохранил ее как уникальную резервную копию.
  • Применяет ваши изменения (или, если необходимо, полную перестройку)
  • Позволяет вернуться к резервному копированию, если что-то не так.

Общие параметры:

Обновления не восстанавливаются

Нет необходимости удалять всю БД и повторно строить в любой среде, если только все данных не изменится (и это необходимо). При его самых элементарных изменениях структуры/схемы необходимы более полные повторные сборки.

Репликация

Возможно синхронизировать базы данных MySQL с использованием master-master или master-slave-репликации, но иногда это слишком сложно в некоторых средах и может нарушать функциональность, если только управление не выполняется очень тщательно. Если вы внесли изменения локально (в своей среде разработки), они могут нарушить работу вашего удаленного сайта...

Использовать инструменты фреймворка

Если вы используете современные фреймворки, многие из них поставляются с инструментами, которые облегчают обновление БД и возможностью обновления (и потенциального отката), но часто они не идеальны, поскольку вам может потребоваться обновить определенные данные или таблицы, которые не может быть легко откат.

Моя текущая настройка

¬ multiple local developers
  ¬ multiple dev branches 
    ¬ development
      ¬ staging server 
          live

В нашем случае мы используем специально созданный script (и связанные файлы SQL), который позволяет каждому разработчику применять изменения и продвигать изменения в ветвях, запустив в командной строке следующее:

php migrate.php server/branch update 

Или:

php migrate.php server/branch rollback

Это может быть упрощено для базовой настройки, но я не вижу, как не зная больше. По умолчанию было бы интересно задать этот вопрос на dba.stackexchange.com, так как вы получите взыскательные ответы, ориентированные на БД.

Ответ 2

Я бы сделал страницу PHP на удаленном компьютере с текстовым полем, в котором принимает оператор ALTER, который вы можете просто вставить и щелкнуть. Вы бы хотели защитить эту страницу с принудительным перенаправлением https, если к ней подключен порт 80, пароль и проверка IP-адресов, поэтому вы можете запускать его всего - всего несколько строк кода.

Ответ 3

Да. Но!

Сначала вам нужно создать пользователя MySQL на удаленном сервере, которому разрешено подключаться с вашего локального ПК, или если вы смело от любого IP-адреса. например think123 @yourIp или think123 @% С ОЧЕНЬ СИЛЬНЫМ ПАРОЛЬОМ

Если вы не можете или не можете это сделать, тогда ответ будет отрицательным. Некоторые хосты позволяют этим другим не делать этого. Посмотрите в свою cPanel.

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

В\wamp\alias\phpmyadmin.conf должен быть раздел что-то вроде этого: -

$i = 0;

/*
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;

Что вам нужно сделать, это добавить еще $cfg ['Servers'], чтобы сказать, что phpMyAdmin имеет другое возможное соединение. Вот так: -

$i = 0;

/*
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;

/*
 * Second Server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'REMOTE_SERVERS_IP';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;

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