2015-12-09 4 views
0

У меня есть база данных Mysql на моем удаленном сервере с несколькими таблицами. Мне нужно получить некоторые из этих таблиц с некоторыми его строками, используя PHP для локальной программы WPF, которая использует SQLite.Могу ли я использовать запросы внутри mysqldump?

Строки, которые мне нужно получить из каждой таблицы, зависят от разных значений для каждой таблицы (я имею в виду, что я должен применять другое предложение WHERE к каждой таблице), и мне нужно иметь возможность использовать стандартные операции MySQL (например, LEFT JOIN, UNION и т. Д.).

До сих пор, я могу сбросить только 1 таблицу с 1 ИНЕКЕ:

exec('./mysql2sqlite.sh --databases test -u test -pTest --tables users --where "a="' . $a . '" AND b="' . $b . ' | sqlite3 db/file.sqlite'); 

Я думаю, что мне нужно, чтобы быть в состоянии выполнить несколько запросов, а затем сбросить все результаты внутри туздЫшпр, Является ли это возможным?

Кроме того, это правильный подход для решения этой проблемы? Или я должен сначала выгрузить формат таблиц желания, а затем сбросить строки желания?

PD: Я использую этот преобразователь MySQL2SQLite.

+0

Я бы не использовал mysqldump, вместо standrd запросов и написал вывод в любом формате, который вам нужен –

+0

, и как бы вы получили формат таблиц mysql? возможно ли это с запросами? –

+0

вам нужно будет создать их через php –

ответ

0

Я бы решил проблему, создав отдельную временную базу данных под названием tmp_backup, создав таблицы, которые отображали бы ваши таблицы, но включали только нужные строки, а затем выполняли дамп этой базы данных. Пример таблицы временной базы данных:

CREATE tmp_backup.customers LIKE real_db.customers; 
SELECT c.* FROM real_db.customers c 
LEFT JOIN real_db.bad_customers o USING(customer_id) WHERE o.customer_id IS NULL 

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

if (strcmp(table_type, "VIEW") == 0) 
    DBUG_VOID_RETURN; 

в client/mysqldump.c в источнике данных MySQL, комментировать его и перекомпилировать. Вы найдете новый двоичный файл для mysqldump в каталоге client/, и вы можете просто скопировать его в другой каталог под другим именем без полной установки. Этот хак должен работать, хотя я еще не проверял его - опубликует обновление, когда я это сделаю.

UPDATE - вышеупомянутый взлом для mysqldump действительно работает с представлениями - я тестировал его на 5.5.35, но он должен работать так же, как и с более новыми версиями 5.5 и, вероятно, 5.6/5.7. После патча вам нужно дать аргумент -t, чтобы просто получить данные таблицы с определениями. Поэтому сначала вы получите mysqldump --no-data real_db, чтобы получить определения, а затем mysqldump -t tmp_backup, чтобы получить данные обзора. Затем вы можете просто загрузить в порядке (определения сначала, а затем данные) с помощью утилиты mysql.

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