Что лучший способ состоит в том, чтобы синхронизировать данные между Доступом MS и MySQL?

Как насчет:

cat <<EOF
version: "3"
  services:
    web1:
      image: python:2.7-alpine
      command: ["python", "-m", "SimpleHTTPServer", "8080"]
    web2:
      image: python:2.7-alpine
      command: ["python", "-m", "SimpleHTTPServer", "8080"]
EOF

Затем получите виртуальные адреса, например:

docker ps | grep compose_ | cut -f1 -d' ' | while read s; do docker inspect $s | egrep "IPAddr.*[0-9]"; done
                "IPAddress": "172.28.0.3",
                "IPAddress": "172.28.0.2",

Затем подтвердите, что оба адреса отвечают на один и тот же порт:

$ curl -sv 172.28.0.2:8080
...
* Connected to 172.28.0.3 (172.28.0.3) port 8080 (#0)
...
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
...

$ curl -s 172.28.0.3:8080
...
[ 117] Вы можете использовать пользовательские сети, чтобы изолировать контейнеры особым образом, но даже с поведением по умолчанию вы можете создать несколько экземпляров этого стека компоновки, и вы всегда будете получать уникальные виртуальные адреса, которые вы можете выборочно получать с вашего клиента. Вы можете поставить обратный прокси-сервер впереди, если хотите направить трафик внешнего клиента на определенный бэкэнд.

Вы можете иметь несколько экземпляров, переопределив имя проекта для каждого экземпляра с помощью $ COMPOSE_PROJECT_NAME или -p. Например:

docker-compose -p mytest1 up -d
docker-compose -p mytest2 up -d

Надеюсь, что помогает.

5
задан Fionnuala 14 January 2009 в 14:15
поделиться

5 ответов

Почему бы не связать таблицы через ODBC, как предложено Keltia, и затем используют серию запросов для добавления записей, которые отсутствуют и обновить измененные записи. Запросы могут пробежаться VBA. ADO будет также работать хорошо с MySQL и Доступом.

Некоторые примечания по коду использовали в Доступе:

   Set db = CurrentDb
   strSQL = "Insert INTO [ODBC;DSN=DSNName;].NameOfMySQLTable " _
   & "Select AnyField As NameOfMySQLField FROM AnyAccessTable;"

   db.Execute strSQL, dbFailOnError
   End Sub

-- http://forum.lessthandot.com/viewtopic.php?f=95&t=3862

3
ответ дан 15 December 2019 в 06:36
поделиться

Если Вы действительно хотите инкрементные обновления, способ сделать это пишет сценарий, который действительно соединяется с обеими базами данных (через ODBC, по крайней мере, на стороне Доступа) и сравнивает все таблицы. Преимущество копирования всего этого состоит в том, что Вы, несомненно, не забудете что-либо, оборотная сторона может быть размером и тем, что mysql не будет доступен во время перезагрузки.

1
ответ дан 15 December 2019 в 06:36
поделиться

Чтобы помочь передать только изменения, я предлагаю, чтобы Вы добавили, что новая таблица к Вашей базе данных Access назвала что-то как RecordChanges.

Структура таблицы была бы следующие:

RecordChangeID (int) - Primary Key (Autonumber)
TableName (varchar(250)) - Name of table that changed
RecordID (int) - ID of the record in that table that was added / modified
RecordAction (char(1)) - 'A' if add, 'M' if modified or 'D' if deleted

Отметьте - путем добавления идентификатора пользователя и других деталей к этому, у Вас мог быть хороший журнал аудита.

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

После того как это сделано, я составил бы другую таблицу только с одним рекордным, названным ExportStatus со следующей структурой:

LastRecordChangeID (int) - ID of the last Record Change 
                           you exported in the Record Changes table

Затем создайте подпрограмму для прохождения через всех Рекордных Изменений начиная с последнего экспорта (Вы получаете это от своей таблицы ExportStatus), и генерируйте SQL-операторы для обновления базы данных MySQL, будучи убеждающимися обновить таблицу ExportStatus при выполнении. Вы могли удалить все записи RecordChange, которые успешно экспортировались или оставляют их внутри как журнал аудита.

Прежде, чем реализовать это, необходимо было бы сделать, начальная буква синхронизирует способ, которым Вы в настоящее время делаете ее.

0
ответ дан 15 December 2019 в 06:36
поделиться

Я сделал бы следующее:

Выведите все свои данные Доступа во временную таблицу в MySQL, который будет Вашим "основным" источником данных на мгновение. Необходимо смочь сделать, это путем установки источника данных ODBC указало на MySQL, щелчка правой кнопкой по таблице Access и удара "Экспорта".

  1. Запустите скрипт ОБНОВЛЕНИЯ в MySql для обновления соответствия записям
  2. Запустите скрипт ВСТАВКИ в MySql для вставки новых записей
  3. (Дополнительный, в зависимости от того, является ли это тем, что Вы хотите): Запустите УДАЛИТЬ скрипт в MySql для удаления записей, которые не найдены в недавно импортированной таблице Access.
  4. Отбросьте временную таблицу в MySql.

Возможно сделать все это из Доступа MS через связанные таблицы. Но производительность не будет так же хороша, и она потребует изменения Операторов доступа, когда/если Ваши таблицы MySql изменятся.

Этот ответ может быть полезен Вам, также.

-1
ответ дан 15 December 2019 в 06:36
поделиться
0
ответ дан 15 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: