۱۳۹۰/۰۵/۱۱

اتصال SQL Server به MySQL


اگر SQL Server و MySQL بر روي سيستم شما نصب است، روشي ساده براي انتقال اطلاعات بين اين دو وجود دارد كه نيازي به دخالت هيچ نوع برنامه‌ي جانبي نداشته و با امكانات موجود قابل مديريت است.

ايجاد يك Linked server

براي اينكه SQL Server را به MySQL متصل كنيم مي‌توان بين اين دو يك Linked server تعريف كرد و سپس دسترسي به بانك‌هاي اطلاعاتي MySQL همانند يك بانك اطلاعاتي محلي SQL Server خواهد شد كه شرح آن در ادامه ذكر مي‌شود.
ابتدا نياز است تا درايور ODBC مربوط به MySQL دريافت و نصب شود. آن‌را مي‌توانيد از اينجا دريافت كنيد : (+)
سپس management studio را گشوده و در قسمت Server objects ، بر روي گزينه‌ي Linked servers كليك راست نمائيد. از منوي ظاهر شده، گزينه‌ي New linked server را انتخاب كنيد:


در ادامه، بايد تنظيمات زير را در صفحه‌ي باز شده وارد كرد:


در قسمت Linked server و Product name ، نام دلخواهي را وارد كنيد.
Provider انتخابي بايد از نوع Microsoft OLE DB Provider for ODBC Drivers باشد.
مهم‌ترين تنظيم آن، قسمت Provider string است كه بايد به صورت زير وارد شود (در غير اينصورت كار نمي‌كند):
DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; DATABASE=testdb; USER=root; PASSWORD=mypass; OPTION=3;PORT=3306; CharSet=UTF8;
در اينجا نام ديتابيس پيش فرض، نام كاربري اتصال به MySQL و Password و غيره را مي‌توان تنظيم كرد.
پس از انجام اين تنظيمات بر روي دكمه‌ي Ok كليك كنيد تا Linked server ساخته شود:


اگر ليست بانك‌هاي اطلاعاتي را مشاهده نموديد، يعني اتصال به درستي برقرار شده است.

تنظيمات ثانويه:

تا اينجا اس كيوال سرور به MySQL متصل شده است، اما براي استفاده بهينه از امكانات موجود نياز است تا يك سري تغييرات ديگر را هم اعمال كرد.

تنظيم MSDASQL Provider :
در همان قسمت Linked provider ، ذيل قسمت Providers ، گزينه‌ي MSDASQL را انتخاب كرده و بر روي آن كليك راست نمائيد. سپس صفحه‌ي خواص آن‌را انتخاب كنيد تا بتوان تنظيمات زير را به آن اعمال كرد. اين پروايدر جهت اتصال به MySQL مورد استفاده قرار مي‌گيرد.



فعال سازي RPC :

براي اينكه بتوان از طريق SQL Server ركوردي را در يكي از جداول بانك‌هاي اطلاعاتي MySQL متصل شده ثبت نمود، مي‌توان از دستور زير استفاده كرد:
EXECUTE('insert into testdb.testtable(f1,f1) values(1,''data'')') at mysql

اينجا testdb نام بانك اطلاعاتي اتصالي MySQL است و testTable هم نام جدول مورد نظر. MySQL ايي كه در آخر عبارت ذكر شده همان نام linked server ايي است كه پيشتر تعريف كرديم.
به محض سعي در اجراي اين كوئري خطاي زير ظاهر مي‌شود:
Server 'mysql' is not configured for RPC.

براي رفع اين مشكل، مجددا به صفحه‌ي خواص همان liked server ايجاد شده مراجعه كنيد. در قسمت Server options دو گزينه مرتبط به RPC بايد فعال شوند:



و اكنون براي كوئري گرفتن از اطلاعات ثبت شده هم از عبارت زير مي‌توان استفاده كرد:
SELECT * FROM OPENQUERY(mysql, 'SELECT * FROM testdb.testtable')

در اين كوئري، MySQL نام Linked server ثبت شده است و testdb هم يكي از بانك‌هاي اطلاعاتي MySQL مورد نظر.


انتقال تمام اطلاعات يك جدول از بانك اطلاعاتي MySQL به SQL Server

پس از برقراري اتصال، اكنون import كامل يك جدول MySQL به SQL Server به سادگي اجراي كوئري زير مي‌باشد:
SELECT * INTO MyDb.dbo.testtable FROM openquery(MYSQL, 'SELECT * FROM testdb.testtable')

در اين كوئري، MySQL همان Linked server تعريف شده است. MyDB نام بانك اطلاعاتي موجود در SQL Server جاري است و testtable هم جدولي است كه قرار است اطلاعات testdb.testtable بانك اطلاعاتي MySQL به آن وارد شود.

با اطلاعات فارسي هم (در سمت SQL Server) مشكلي ندارد. همانطور كه مشخص است، در اطلاعات provider string ذكر شده‌، مقدار charset به utf8 تنظيم شده و همچنين اگر نوع collation فيلدهاي تعريف شده در MySQL نيز به utf8_persian_ci تنظيم شده باشد، با مشكل ثبت اطلاعات فارسي به صورت ???? مواجه نخواهيد شد.


نكته:
اگر بانك اطلاعاتي MySQL شما بر روي local host نصب نيست، جهت فعال سازي دسترسي ريموت به آن، مي‌توان به يكي از نكات زير مراجعه كرد و سپس اين اطلاعات جديد بايد در همان قسمت provider string مرتبط با تعريف linked server وارد شوند:


مطالب مشابه:

هيچكدام از اين روش‌ها قابل استفاده نبودند چون provider string صحيحي را نهايتا توليد نمي‌كنند. همچنين تمام اين روش‌ها مبتني است بر ايجاد DSN در كنترل پنل كه اصلا نيازي به‌ آن نيست و اضافي است.