У меня есть две разные базы данных, скажем, db_one и db_two. У каждого есть таблица. db1_emp_company
и db2_emp_info
соответственно.
Структура приведена ниже:
db_one | db_two __________________________________ db1_emp_company | db2_emp_info __________________________________ phone_no | contact_no emp_email | email_add home_address | address
Эти две базы данных размещаются двумя разными php-сайтами на одном сервере.
Я хочу синхронизировать эти обе таблицы из разных баз данных. Например, если пользователь обновляет phone_no
из db1_emp_company
(в db_one), он должен обновить contact_no
db2_emp_info
(в db_two). И если пользователь обновляет emp_email
из db1_emp_company
(в db_one), он должен обновить email_add
из db2_emp_info
(в db_two). и так далее.
Является ли это возможным?
Для этого вы можете использовать транзакции.
$mysql_host = DB_HOST; $mysql_username = DB_USER; $mysql_password = DB_PASSWORD; $mysql_database1 = DATABASE1; $mysql_database2 = DATABASE2; $mysqli = new mysqli($mysql_host, $mysql_username, $mysql_password) or die( mysql_error()); /* Begin Transaction */ $mysqli->autocommit(FALSE); /* Insert data from db1 to db2 */ $query = " INSERT INTO $mysql_database1.table1"; $a = $mysqli->query($query); $query = " INSERT INTO $mysql_database1.table2 SELECT * FROM $mysql_database2.table2 WHERE NOT EXISTS(SELECT * from $mysql_database1.table2) "; $d = $mysqli->query($query); if ($a and $b) { $mysqli->commit(); echo "Data synched successfully."; } else { $mysqli->rollback(); echo "Data failed to synch."; }
Если один запрос завершается с ошибкой, он не позволит другому запустить и откат. Это всего лишь пример кода. Вы можете использовать обновление вместо вставки.
Вы можете сделать так:
При обновлении таблицы db_one
в site1:
update `db_one`.`db1_emp_company` set phone_no = '1234567890' where conditions_here; update `db_two`.`db2_emp_info` set contact_no = '1234567890' where conditions_here;
То же самое в db_two
:
update `db_two`.`db2_emp_info` set contact_no = '1234567890' where conditions_here; #Its a same thing as above update `db_one`.`db1_emp_company` set phone_no = '1234567890' where conditions_here;
Если вы разместите свой код, который используется для обновления. Будет полезно дать точный ответ.
Вы можете использовать mysqldiff для этой проблемы. Проверьте эту страницу: http://www.mysqldiff.org/index.php