Современные системы часто взаимодействуют с другими системами, БД, одна из которых MySql. Попробую описать подключение через Linked Server к MySql, хотя это довольно просто.
Для настройки подключения из MS SQL Server к СУБД MySQL необходимо настроить «Linked Server» к серверу Mysql.
Для этого необходимо на сервере, где установлен MS SQL Server, настроить источник данных к Mysql. Скачиваем с сайта Mysql и устанавливаем драйвера ODBC Mysql, к примеру mysql-connector-odbc-5.1.8-win32.msi, там ничего сложного нет, все по умолчанию.
После установки заходим в «Администрирование (AdministrativeTools)»-> «Источники Данных ODBC (DataSource (ODBС))»->«Системный DSN (SystemDSN)»->«Добавить (Add)»
В списке драйверов должен присутствовать установленный драйвер «MySQLODBС 5.1 Driver», если его нет, то проблема с установкой драйвера.
Далее устанавливаем стандартные настройки сервера Mysql:
DataSourceName – имя DSN подключения, произвольное, в дальнейшем мы будеv его использовать в настройках подключения в MS SQL Server.
TCP/ IP Server – IP сервера MySql или его DNS имя
Port –порт подключения к Mysql, стандартный 3306
User и Password – имя пользователя в БД Mysql и его пароль.
Databases – имя БД по умолчанию при подключение, можно его не указывать.
После указания данных параметров, проверяем настройки «Test» и сохраняем подключение.
После того как создали ODBC подключение в ОС, необходимо настроить Linked Server в MS SQL Server.
Создаем новый LinkServer:
Имя связанного сервера – задаем имя cвязанного сервера, будем использоваться его в дальнейшем в запросах.
Название продукта и Источник данных – имя нашего настроенного ODBCподключения.
Нажимаем «ОК», если все создали правильно, то создание связанного сервера закончится без ошибок, иначе будет ошибка, в том числе и не на неправильный пароль к MySql или отсутствие доступа к БД.
После этого можно запускать запросы к Mysql через Openquery
select*from openquery(mysql,'select id from groups')
Какая здесь может быть проблема в данных запросах? Это наличие одних типов данных Mysql и их отсутствие в MS SQL server-е. Текст ошибки будет таков, как например на такой запрос:
select*from openquery(mysql,'select * from projects')
Для решения данной проблемы необходимо использовать преобразование типов на строне mysql, либо отказаться в использование данных столбцов в запросах
select*from openquery(mysql,'select id from projects')
это запрос уже сработает:
select*from openquery(mysql,'select id,cast(viewtype as char(30)) from projects')
В данном запросе мы использовали функцию преобразования Mysql CAST().
Выше были простые запросы, а что делать если нам необходим запрос с условиями, в данном случае можно прибегнут ьк динамическим запросам.
К примеру так :
Declare @sqlstr nvarchar(850)
Set @sqlstr='insert into dbo.tasks_pr select id,[user],st,priority, from openquery(sd,''SELECT id,user,cast(state as char(15)) as st,'
set @sqlstr=@sqlstr+'cast(priority as char(15)) as priority FROM tasks t'
set @sqlstr=@sqlstr+' where id>'+CAST(@idasnvarchar(10))+''')'
--print @sqlstr
execute sp_executesql @sqlstr
Кстати командой «print» легко проверять, что за команда получается в итоге.
Вот и все доступ к Mysql из MS SQL Server получили.
Вот наоборот бы подключиться: из MySQL к MS SQL. Возможно ли такое и как.
ОтветитьУдалитьСкорее всего надо будет писать свое приложение для подключения к MS SQL Server и и перенос данных в Mysql.
Удалить