У меня есть локальный веб-сайт, на котором пользователь ежедневно добавляет элементы в Mysql DB. Теперь я хочу сделать живую версию сайта.
Но вместо добавления элементов в обе базы данных я хочу добавить только в локальную базу данных. И синхронизировать удаленную базу данных.
Локальный сайт использует XAMPP. Также я не думаю, что репликация - это способ, которым я хочу это делать.
Я смотрю больше на PHP способ решения этой задачи.
В настоящее время я не знаю, как этого добиться.
Есть идеи, как это сделать?
Если вы не хотите настраивать схему репликации, почему бы просто не использовать (2 или 3) задания cron, дамп local/dump remote/update remote с local dump. И нет, это не лучший способ сделать это, но это работает...
С помощью just (2), выведите дамп local/update remote с помощью локального дампа, запускайте ежедневно @1:00 AM dump и!: 15AM update
0 1 * * * mysqldump --host="localhost" --user="user" --password="password" database_name > backup_name.sql
15 1 * * * mysql --host="remote_host" --user="user" --password="password" --port="3306" database_name < backup_name.sql
Самый быстрый способ сделать это - использовать MySQL, но если вы хотите использовать строго PHP, есть два способа сделать это, если вы хотите, чтобы живые данные отражали только локальные данные (то есть вы можете удалить все данные и данные перетягивания). Поскольку это решение на PHP, вам придется проходить по каждой отдельной таблице. Вы можете запустить скрипт PHP, который использует PDO или MySQLi, но вам потребуется одна из двух стратегий удаления, перечисленных ниже:
1) TRUNCATE
и SELECT FROM
(быстро, но имеет потенциальные риски для безопасности). Это больший риск, потому что разрешения MySQL для TRUNCATE
- DROP
и ALTER
. Не команды, к которым у обычного пользователя базы данных есть доступ. Вот SQL для этого:
TRUNCATE live_database_name.table_name
INSERT INTO live_database_name.table_name SELECT * FROM local_database_name.table_name
2) DELETE FROM
и SELECT FROM
(Чем медленнее данные, тем безопаснее). Это решение медленнее, потому что вам нужно проходить каждую запись в таблице, а не отбрасывать и заново создавать таблицу. Однако DELETE
рассматривается как более безопасное разрешение для пользователей базы данных, поскольку они не могут DROP
целые таблицы. Вот что вам нужно для этого:
DELETE FROM live_database_name.table_name
INSERT INTO live_database_name.table_name SELECT * FROM local_database_name.table_name
SELECT * FROM local_database_name.table_name
и то, что делает SELET * FROM live_database_name.table_name
. Затем вы можете перебирать строки, связывая их по уникальному идентификатору. Любое, которого не было в действующей базе данных или которое было обновлением, вы можете запустить SQL для обновления из двух массивов в PHP.