2014-02-19 6 views
0

Я хочу реплицировать определенную таблицу из одной базы данных в другую базу данных на том же сервере. Эти таблицы содержат точно такие же поля.MySQL - Триггер или репликация лучше?

Я решил использовать репликацию MySQL для репликации этой таблицы, но некоторые люди сказали, что она увеличит IO, поэтому я найду другой способ создания 3 триггера (вставка, обновление и удаление), который будет выполнять точно такую ​​же вещь, как то, что я ожидать.

Мой вопрос, какой путь лучше? Используется ли репликация MySQL лучше, даже если она находится на том же сервере или лучше использовать Trigger для репликации данных.

Спасибо.

+0

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

ответ

0

Если у вас есть две базы данных на одном сервере т.е. DB1 и DB2 и таблица называется tbl1 и он сидит в DB1 вы можете запросить таблицу, как это:

USE DB1; 
SELECT * FROM tbl1; 

USE DB2; 
SELECT * FROM DB1.tbl1; 

Таким образом, вы не будете должны копировать данные и беспокоиться о дополнительном пространстве и дополнительном коде. Вы можете запросить таблицу в другой базе данных на том же сервере. Репликация и триггеры не являются вашим ответом. Вы также можете создать представление для инкапсуляции инструкции SQL.

+0

Извините за длинный ответ .. Ваше предложение очень полезно для решения моего дела, в настоящее время я создаю представление в DB2, которое будет принимать данные из DB1.table. Моя забота о том, что если в будущем клиент захочет переместить 1 из базы данных на другой сервер, то это не сработает. Но спасибо, я могу использовать этот метод на данный момент. – wm90

+0

@ wm90 Если на другом сервере используется репликация, не используйте триггер. – Namphibian

-1

Определенно триггеры - это путь. Наличие другого сервера (подчиненного) необходимо будет зарезервировать несколько МБ для установки, журналов, процессора и использования памяти.

Я бы использовал триггеры, чтобы обе таблицы были равны. Если вы хотите создать таблицу с определением же столбцы и данные используют:

USE db2; 
CREATE TABLE t1 AS SELECT * FROM db1.t1; 

После этого, идти вперед и создавать триггеры для обновления, вставки и удаления statemetns.

Также вы можете добавить новую таблицу к другому движку, например MEMORY, или добавить индексы, чтобы увидеть, можете ли вы что-то улучшить.

1

Я не знаю, какова ваша цель, но я получил доступ к функциям VIEW.

У меня было два разных приложения с отдельными базами данных, но на одном сервере Mysql. Application2 необходимо получить несколько данных из Application1. В общем, это тривиальная ситуация, с которой вы можете обращаться с USE DB1; или USE DB2; по мере необходимости, но моя структура программирования не очень хорошо работает с несколькими БД.

Итак, давайте посмотрим, мое решение ...

Вот мой запрос на выборку, чтобы получить эти данные:

SELECT id, name FROM DB1.customers; 

Таким образом, используя DB2 в качестве схемы по умолчанию, я создал ВИД:

USE DB2; 
CREATE VIEW app1_customers AS SELECT id, name FROM DB1.customers; 

Теперь я могу получить эти данные в DB2 как обычную таблицу с помощью регулярной инструкции SELECT.

SELECT * FROM DB2.app1_customers; 

Надежды ts полезны. BR

Смежные вопросы