powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Синхронизация таблиц на разных серверах MySql
5 сообщений из 30, страница 2 из 2
Синхронизация таблиц на разных серверах MySql
    #39855978
tinkandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь за задержку с отчетом! Хотелось, прежде чем выкладывать сюда, хоть приблизительно сделать так, как изначально задумал. Итак, по порядку:
Мои мысли совпали с Близнец1980, оптимальный вариант синхронизации таблиц между двумя разными БД – при помощи конструкций “SELECT * INTO OUTFILE” и “LOAD DATA LOCAL INFILE”. Если с первой конструкцией проблем нет, то со второй пришлось помучиться. Насколько понял, запуск этой команды запрещен дефолтными настройками коннектора (в моем случае это {MySQL ODBC 8.0 ANSI Driver}). Нашел пост , из которого узнал, что в моём коннекторе имеет место параметр ENABLE_LOCAL_INFILE , который по умолчанию =0. После того, как добавил в строку подключения “ENABLE_LOCAL_INFILE=1”, все заработало.
Вот как выглядит мой финальный код процедуры синхронизации баз, пока без обработчика ошибок:


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Public Sub СинхронизацияТаблицSql(ИмяТаблицы$, Optional Параметры$)
'ПРОЦЕДУРА СИНХРОНИЗИРУЕТ таблицы локальной MySql базы локального сервера с удаленной базой на хостинге
 'ИмяТаблицы = Может содержать имя одной таблицы или любого кол-ва таблиц, разделенных "|"
 'Путь для сохранения/загрузки txt-файла должен быть в "двуслешевом" формате "E:\\LocalServer\\tmp\\"
  Dim МассивТаблиц, Путь$
  
 'Проверки и инициализация переменных
  If ИмяТаблицы = "" Then MsgBox "Укажите имена таблиц Sql к синхронизации!", vbCritical, "Ошибка 'СинхронизацияТаблицSql'": Exit Sub
  МассивТаблиц = Split(ИмяТаблицы, "|")   'Загружаем имена таблиц в массив
  
 'СОХРАНЯЕМ ТАБЛИЦЫ ЛОКАЛЬНОЙ БАЗЫ
  Call MySqlConnect(1)                                    'Подключение к локальному серверу MySQL
  For I = 0 To UBound(МассивТаблиц)                       'Перебираем все таблицы локальной базы
      Путь = [ПутьСинхроMySql] & МассивТаблиц(I) & ".txt" 'Определяем полный путь к файлу с данными
      If Dir(Путь) <> "" Then Kill Путь
      Conn.Execute "SELECT * INTO OUTFILE '" & Путь & "' FROM " & МассивТаблиц(I)
  Next I: Set Conn = Nothing
  
 'ЗАГРУЖАЕМ ТАБЛИЦЫ В УДАЛЕННУЮ БАЗУ
  Call MySqlConnect(2)                                    'Подключение к удаленному серверу MySQL
  For I = 0 To UBound(МассивТаблиц)                       'Перебираем все таблицы удаленной базы
      Путь = [ПутьСинхроMySql] & МассивТаблиц(I) & ".txt" 'Определяем полный путь к файлу с данными
      If Dir(Путь) <> "" Then
         Conn.Execute "DELETE FROM " & МассивТаблиц(I)    'Очищаем таблицу от старых записей
         Conn.Execute "LOAD DATA LOCAL INFILE '" & Путь & "' INTO TABLE " & МассивТаблиц(I)
      End If
  Next I: Set Conn = Nothing
End Sub



Я еще раз благодарю всех, кто откликнулся и поддержал меня в решении моей проблемы )
Таким образом, у меня нарисовалась такая картинка, в центре которой стоит мой неизменный и лошарский Excel:
...
Рейтинг: 0 / 0
Синхронизация таблиц на разных серверах MySql
    #39855979
tinkandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопросы по дальнейшей оптимизации процедуры:

1. Логично было бы не “тупо” синхронизировать предложенный набор таблиц, а сначала проверять их на предмет наличия расхождений (по размеру, разумеется). Есть ли в Sql команды, возвращающие размер или какую-то контрольную сумму отдельной таблицы? Если есть, можно было бы построить такую проверку:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
For Each Таблица in УдаленнаяБаза
Размеры = Размеры & Таблица.Имя & “ - ” & Таблица.Размер & “|”
Next Таблица

For Each Таблица in ЛокальнаяБаза
IF Размеры LIKE “*” & Таблица.Имя & “ - “ & Таблица.Размер & “*” Then Синхро = Синхро & Таблица.Имя & “|”
Next Таблица


Т. о. в переменной “Синхро” соберутся все таблицы, которые нужно синхронизировать.

2. Вопрос к формату файла передачи данных..
Близнец1980и да, пришлось немного поиграться с форматом файла
Попробовал выгружать таблицы в файл ".dat", размер тот же, что и "txt". Чем лучше ".dat"?
...
Рейтинг: 0 / 0
Синхронизация таблиц на разных серверах MySql
    #39855985
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tinkandrТаким образом, у меня нарисовалась такая картинка, в центре которой стоит мой неизменный и лошарский Excel:Я бы убрал связь "Заказы и т.п.", чтобы образовалась центральная учетная система, которая у вас называется "Локальная БД".
И кстати, куда делась 1С, которая упоминалась в начальном топике, и которая чаще всего и играет роль центральной учетной системы, с которой синхронизируются все остальные ?
...
Рейтинг: 0 / 0
Синхронизация таблиц на разных серверах MySql
    #39855986
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tinkandrЛогично было бы не “тупо” синхронизировать предложенный набор таблиц, а сначала проверять их на предмет наличия расхожденийЗачем что-то проверять? У вас такие большие объемы?
Если количество товаров не превышает миллиона, то проще и надежнее переписывать таблицы целиком.
...
Рейтинг: 0 / 0
Синхронизация таблиц на разных серверах MySql
    #39855990
tinkandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftЯ бы убрал связь "Заказы и т.п.", чтобы образовалась центральная учетная система Вы будете смеяться, но, "центральная учетная система" и вообще, центр вселенной у меня это "лошарский Эксель" ))

miksoftЗачем что-то проверять? У вас такие большие объемы? Нет, не очень большие. Я только начинаю. Но, как подумаю, что из 10 таблиц к обновлению данных по товарам, будут обновляться и те, в которых изменений нет, сердце кровью обливается... )

miksoftИ кстати, куда делась 1С Да, блин... я думал забыли все уже... ) Ну, ладно, как-то так у меня:
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Синхронизация таблиц на разных серверах MySql
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]