Что нового

Импорт базы данных MySQL с FTP на сервер

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Имеется сервер, на нём есть FTP, где лежит файл базы данных (DataBase.csv), требуется каким то образом импортировать эту базу в общую базу данных сервера.

Какие есть варианты по теме?
Возможно некий php-скрипт, или даже как то через AutoIt добавить в базу данных...
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Приходит только одна мысль - скачать обе, слить в одну и закачать обратно.. Ведь это же сервер...
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
DarWiM [?]
скачать обе, слить в одну и закачать обратно
Мне нужно автоматизировать импорт базы данных.

Или может кто то знает как импортировать базу с компьютера прямо на сервер?
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Я пользуюсь бесплатной программой HeidiSQL, она умеет импортировать данные из cvs. Вот как выглядит этот импорт в виде SQL запроса:
SQL:
LOAD DATA LOW_PRIORITY LOCAL INFILE 'C:\\2.csv' INTO TABLE `base`.`table` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (`field1`, `field2`, `field3`);
; - разделитель полей
OPTIONALLY ENCLOSED BY '"' - значения полей могут быть окружены двойными кавычками, без OPTIONALLY - должны быть окружены (хотя у меня все равно вставляет и без кавычек)
\r\n - разделитель строк
IGNORE 1 LINES - пропустить первую строку (в моём cvs первой строкой идут названия полей таблицы)

Там есть три вида импорта для определения поведения при конфликтах:
INSERT(may trow errors) - INTO TABLE
INSERT IGNORE(dublicates) - IGNORE INTO TABLE
REPLACE(dublicates) - REPLACE INTO TABLE

Думаю такой запрос можно без проблем отправить и из php, лишь бы прав у пользователя хватило.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Redline [?]
Я пользуюсь бесплатной программой HeidiSQL, она умеет импортировать данные из cvs
Спасибо, думаю это поможет.

такой запрос можно без проблем отправить и из php, лишь бы прав у пользователя хватило
Интересно можно ли из AutoIt сделать такой запрос? :scratch:
С правами проблем нет.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Попытался использовать программку, но не удаётся подключиться, видимо нужно порт правильный указать, но как его узнать?
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR
По умолчанию MySQL использует порт: 3306.

Если MySQL сервер не собственный и береться у кого нибудь хостинг провайдера, то подключиться удаленно к нему не получиться (в большенистве случаев).

Если же MySQL сервер собственный и есть возможность удаленного подключения, то можно попробовать так (для скрипта необходимо установить MySQL ODBC)
Код:
$sDBHost = "" ; Адрес сервера
$sDBName = "" ; Название Базы Данных
$sDBUser = "" ; Пользователь
$sDBPass = "" ; Пароль

$sDBCSVPath = "C:\2.csv" ; Путь к CSV файлу
$sDBCSVPath = StringReplace($sDBCSVPath, "\", "\\")

Global $sDBConnStr, $oDBConn = ObjCreate("ADODB.Connection")
$sDBConnStr &= "DRIVER={MySQL ODBC 5.1 Driver};SERVER=" & $sDBHost & ";DATABASE=" & $sDBName & ";"
$sDBConnStr &= "UID=" & $sDBUser & ";PWD=" & $sDBPass

$oDBConn.Open($sDBConnStr)
If Not $oDBConn.State Then Exit 99 + 0 * MsgBox(0 + 48, $sAppLN, "Can't Connect To Database!")

$aQ = "LOAD DATA LOW_PRIORITY LOCAL INFILE '" & $sDBCSVPath & "' INTO TABLE `" & $sDBName & "`.`table` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '""' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (`field1`, `field2`, `field3`);"
ConsoleWrite($aQ & @CR)
$oDBConn.Execute($aQ)

$oDBConn.Close
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
CreatoR [?]
видимо нужно порт правильный указать, но как его узнать?
Собственно, XpycT уже все написал, настройки MySQL можно посмотреть в my.ini
INI:
.....
[mysqld]
bind-address=127.0.0.1
port=3306
.....
port - номер порта для подключения к базе
bind-address - указывает какой адрес может подключиться к базе, адрес может быть только один. Если строка отсутствует/закомментирована, то можно подключиться кому угодно.

Некоторые провайдеры дают доступ к серверу по ssh-туннелю - он открывает соединение с сервером по нужному порту и сервер воспринимает такое соединение как локальное. Heidi умеет работать с такими туннелями, но как создать такой туннель я так и не разобрался.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
При попытке использовать объект пишет ошибку:

Код:
The requested action with this object has failed.:
$oDBConn.Open($sDBConnStr)
$oDBConn.Open($sDBConnStr)^ ERROR

хотя объект создаётся...
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR [?]
При попытке использовать объект пишет ошибку:
А вы MySQL ODBC установили??

Проверте наличия записи в реестре, должно быть
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers
Name: MySQL ODBC 5.1 Driver
Type: REG_SZ
Data: Installed

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\MySQL ODBC 5.1 Driver
Name: Driver
Type: REG_SZ
Data: "Путь_куда_установлен_MySQL_ODBC\myodbc5.dll"

Name: UsageCount
Type: REG_QWORD
Data: 1

[?]
А как указать импорт в определённую таблицу базы?
В строке запроса можно указать название таблицы, вот тут $sDBName & "`.`table`
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR
Попробуйте поменять на «Data: 1»
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR [?]
Возможно запрос неправильны?
Только что проверил, у меня подключаеться нормально

Попробуй те этот скрипт, в нем функуция для собития ошибки
Код:
Global $oObjError = ObjEvent("AutoIt.Error", "_ObjError")

$sDBHost = "" ; Адрес сервера
$sDBName = "" ; Название Базы Данных
$sDBUser = "" ; Пользователь
$sDBPass = "" ; Пароль

$sDBCSVPath = "C:\2.csv" ; Путь к CSV файлу
$sDBCSVPath = StringReplace($sDBCSVPath, "\", "\\")

Global $sDBConnStr, $oDBConn = ObjCreate("ADODB.Connection")
$sDBConnStr &= "DRIVER={MySQL ODBC 5.1 Driver};SERVER=" & $sDBHost & ";DATABASE=" & $sDBName & ";"
$sDBConnStr &= "UID=" & $sDBUser & ";PWD=" & $sDBPass

$oDBConn.Open($sDBConnStr)
If Not $oDBConn.State Then Exit 99 + 0 * MsgBox(0 + 48, $sAppLN, "Can't Connect To Database!")

$aQ = "LOAD DATA LOW_PRIORITY LOCAL INFILE '" & $sDBCSVPath & "' INTO TABLE `" & $sDBName & "`.`table` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '""' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (`field1`, `field2`, `field3`);"
ConsoleWrite($aQ & @CR)
$oDBConn.Execute($aQ)

$oDBConn.Close

Func _ObjError()
	ConsoleWrite("$oObjError.Description     = " & $oObjError.Description & @CRLF)
	ConsoleWrite("$oObjError.WinDescription  = " & $oObjError.WinDescription & @CRLF)
	ConsoleWrite("$oObjError.Number          = " & Hex($oObjError.Number, 8) & @CRLF)
	ConsoleWrite("$oObjError.LastDllError is = " & $oObjError.LastDllError & @CRLF)
	ConsoleWrite("$oObjError.ScriptLine is   = " & $oObjError.ScriptLine & @CRLF)
	ConsoleWrite("$oObjError.Source is       = " & $oObjError.Source & @CRLF)
	ConsoleWrite("$oObjError.HelpFile is     = " & $oObjError.HelpFile & @CRLF)
	ConsoleWrite("$oObjError.HelpContext is  = " & $oObjError.HelpContext & @CRLF)

	Exit
EndFunc   ;==>_ObjError
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
XpycT [?]
Попробуй те этот скрипт, в нем функуция для собития ошибки
Попробовал, вот что выдаёт:

Код:
$oObjError.Description     = [MySQL][ODBC 5.1 Driver]Can't connect to MySQL server on 'host.ru' (10061)
$oObjError.WinDescription  = Неопознанная ошибка

$oObjError.Number          = 80020009
$oObjError.LastDllError is = 0
$oObjError.ScriptLine is   = 15
$oObjError.Source is       = Microsoft OLE DB Provider for ODBC Drivers
$oObjError.HelpFile is     = 
$oObjError.HelpContext is  = 0
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR
MySQL сервер находиться на локальном компбъьютаре или на сервере у хостера???
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
XpycT [?]
MySQL сервер находиться на локальном компбъьютаре или на сервере у хостера?
На сервере, удалённый доступ к базе имеется.
С самого сервера (через Adminer или phpMyAdmin) заходит без проблем.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
С доступом разобрался.
Теперь бы понять как работает запрос...

Как теперь импортировать в определённую таблицу в базе, и что означает «(`field1`, `field2`, `field3`)»?
 

XpycT

Скриптер
Сообщения
380
Репутация
133
CreatoR [?]
Как теперь импортировать в определённую таблицу

В запросе (`" & $sDBName & "`.`table`) указывается в какую таблицу надо импортировать данные, т.е. table надо заменить на название требуемой таблицы.

что означает «(`field1`, `field2`, `field3`)»
`field1`, `field2`, `field3` перечисление полей (колонок) которые буду импортированы в таблицу, они в файле (DataBase.csv) указанны в первой строке
 
Верх