Використання зв'язки Ant та mysql
Написав    Понеділок, 22 березня 2010, 13:41    PDF Друк e-mail
Розробник

Дуже часто виникає задача перенесення баз даних з однієї машини на іншу чи синхронізація з іншими машинами. Для цього я спробую написати два таргета для імпорта та ексорта даних. Зауважу, що при написанні такого таргета я зустрівся з запитаннями: як можна змінити властивість (property) в самому анті? коли потрібно виконати один і тойже таск, але з різними значеннями. А ніяк... Просто не використовувати property для речей, які можуть змінюватися краще готувати таргети, які приймають параметри і у них передавати уже потрібні змінні значення.

Ітак, експорт даних або дамп бази можна зробити наступним чином: по-перше, результат виконання ми отримаємо у файлі назва якого міститься у змінній output не використовуючи перенаправлення потоків вводу виводу; а по-друге, усі параметри розділені по різних тегах. Так не тільки зрозуміліше, але й набагато зручніше модифікувати.

Зазвичай це ми робимо з командної лінії так:

mysqldump -h127.0.0.1 -udevuser -pdevuser devuser_base > dev.sql

В ант таргеті це виглядає так:

<!-- Експорт структури бази та данних -->
<target
name = "_export">
     <exec command = "mysqldump" output="${output}" dir=".">
          <arg line = "-h${db.host}"/>
          <arg line = "-u${db.user}"/>
          <arg line = "-p${db.pass}"/>
          <arg line = "--skip-lock-tables"/>
          <arg line = "${db.database}"/>
     </exec>
</target>

Імпорт проходить за схожою схемою, окрім того, що дані вводять уже не з потока, а з файла, шлях до якого знаходиться в змінній input.

Зазвичай це ми робимо з командної лінії так:

mysql -h127.0.0.1 -udevuser -pdevuser devuser_base < dev.sql

В ант таргеті це виглядає так: 

<!-- Імпорт структури бази та данних -->
<target name= "_import">
     <exec command = "mysql" input =  "${input}" dir = "."/>
          <arg line = "-h${db.host}"/>
          <arg line = "-u${db.user}"/>
          <arg line = "-p${db.pass}"/>
          <arg line = "--database ${db.database}"/>
     </exec>
</target>

А тепер існуючий таргет можна використати таким чином (не одиноразово ще й з різними параметрами):

<antcall target = "_create_dump_database">
    <param name = "output" value = "${output.path}"/>
    <param name = "db.host" value = "${dbDev.host}"/>
    <param name = "db.user" value = "${dbDev.user}"/>
    <param name = "db.pass" value = "${dbDev.pass}"/>
    <param name = "db.database" value = "${dbDev.pref}_${dbDevBase}"/>
</antcall>

і причому викликати декілька раз, а з різними параметрами, що було б неможливо, якби ми користувалися глобальними об'явленими параметрами, використовуючи тег property, як роблять зазвичай. А от dbDev.host уже може бути об'явлена як property.

Останнє оновлення ( Вівторок, 30 березня 2010, 21:15 )
 

Відвідування

mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterСьогодні127
mod_vvisit_counterВчора374
mod_vvisit_counterЗа цей тиждень659
mod_vvisit_counterЗа минулий тиждень1102
mod_vvisit_counterЦього місяця3932
mod_vvisit_counterПопереднього місяця5716
mod_vvisit_counterВсього694646

Кількість користувачів: 3
Ваш IP: 35.175.191.168
,
Сьогодні: жовт. 22, 2019