Копировать таблицы SQL из одной БД в БД на другом сервере с помощью PHP - PullRequest
0 голосов
/ 25 октября 2018

Мне нужно скопировать несколько таблиц из одной БД в другую БД на другом сервере.

Я не могу использовать репликацию master / slave, потому что в некоторых таблицах мне нужно произвести некоторые вычисления (изменить цену продукта на основевалюта), отключить некоторые продукты и т. д.

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

Ниже приведена часть скрипта (здесь я синхронизирую таблицы1 к 1):

/* Source */
$hostname_source = 'localhost';
$username_source = '******************';
$password_source = '******************';
$database_source = '******************';
$db_source = new mysqli($hostname_source,$username_source,$password_source,$database_source);

/* Target */
$hostname_target = 'IP_OF_THE_TARGET_SERVER';
$username_target = '******************';
$password_target = '******************';
$database_target = '******************';
$db_target = new mysqli($hostname_target,$username_target,$password_target,$database_target);

$source_db_prefix = "ps_";
$target_db_prefix = "ps_";

/* Tables to sync 1 to 1 */
$full_sync_tables = array('product', 'product_attribute', 'product_attribute_combination', 'product_attribute_image', 'product_attribute_shop', 'product_download', 'product_shop', 'product_supplier', 'category', 'category_group', 'category_product', 'category_shop', 'attribute', 'attribute_group', 'attribute_group_shop', 'attribute_impact', 'attribute_shop', 'layered_indexable_attribute_group', 'layered_product_attribute', 'feature', 'feature_product', 'feature_shop', 'feature_value', 'layered_indexable_feature', 'manufacturer', 'manufacturer_shop', 'product_supplier', 'supplier', 'supplier_shop', 'image', 'image_shop', 'product_attribute_image', 'stock_available', 'stock_mvt', 'stock_mvt_reason');

foreach ($full_sync_tables as $sync_table) {
    $db_target->query("TRUNCATE TABLE ".$target_db_prefix.$sync_table);
    $db_target->query("INSERT INTO ".$target_db_prefix.$sync_table." SELECT * FROM ".$database_source.".".$source_db_prefix.$sync_table);
    echo "End: ".$target_db_prefix.$sync_table." : ". $db_target->affected_rows."<br/>";
}

Скрипт удаляет таблицы:

$db_target->query("TRUNCATE TABLE ".$target_db_prefix.$sync_table);

Но он не может вставить:

$db_target->query("INSERT INTO ".$target_db_prefix.$sync_table." SELECT * FROM ".$database_source.".".$source_db_prefix.$sync_table);

Я подозреваю, что должны быть некоторыессылка на сервер до $ database_source, но я не уверен.

...