‏نمایش پست‌ها با برچسب MySQL. نمایش همه پست‌ها
‏نمایش پست‌ها با برچسب MySQL. نمایش همه پست‌ها

۱۳۹۰/۰۵/۱۱

اتصال 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 در كنترل پنل كه اصلا نيازي به‌ آن نيست و اضافي است.

۱۳۸۹/۰۹/۲۰

خلاصه‌اي در مورد وضعيت فعلي MySQL


MySQL مدتي است كه جزو يكي از محصولات شركت اوراكل محسوب شده و توسعه دهندگان تجاري بايد براي استفاده از آن هزينه كنند. اين هزينه نيز اخيرا افزايش يافته و به حداقل 2000 دلار به ازاي هر سرور رسيده است (+). اين عدد واقعا رقم بالايي براي محصولي محسوب مي‌شود كه بسياري از توسعه دهنده‌ها تصور مي‌كنند رايگان است. استفاده از اين محصول با توجه به مدل تجاري جديد آن فقط در پروژه‌هاي سورس باز رايگان است (بله فقط در پروژه‌هايي كه با مجوز GPL منتشر شوند) و اگر شما يك سيستم تجاري كلاينت سرور را بر اين اساس طراحي كنيد حتما بايد هزينه‌هاي مرتبط را نيز پرداخت نمائيد (+).
توضيحي در مورد GPL و MySQL
MySQL AB offers a commercial license for organizations that do not want to release the source code for their application.
The change from the LGPL to the GPL for the client libraries was made in 2001 during the development of MySQL 4.0 to help MySQL AB more easily differentiate between a proprietary user who should buy a commercial license and a free software user who should use the GPL license.

MySQL با توجه به مجوز GPL آن در شرايط زير رايگان خواهد بود:
- قصد توزيع مجدد آن‌را نداشته باشيد.
- همچنين برنامه‌ي شما نيز به صورت سورس باز تحت مجوز GPL ارائه گردد.
و تنها زماني در مورد MySQL بايد هزينه كنيد كه:
-قصد توزيع مجدد آن‌را داشته باشيد.
-برنامه‌ي شما سورس باز نبوده و قصد نداريد آن‌را تحت مجوز GPL ارائه دهيد. (كه عموما در مورد برنامه‌هاي تجاري به همين صورت است)

نكته‌ي ديگري را كه بايد به آن دقت داشت اين است كه براي واگذاري MySQL به شركت اوراكل،‌ اتحاديه اروپا نيز با توجه به وجود بيش از 50 هزار توسعه دهنده‌ي اروپايي كه از MySQL استفاده مي‌كنند، شركت اوراكل را موظف كرده است تا اين dual licensing (تجاري و سورس باز) را تا سال 2015 حفظ كرده و ادامه دهد (+). به اين معنا كه شركت اوراكل پس از سال 2015 هيچگونه تعهدي به ارائه‌ي نگارش سورس باز اين محصول به هيچ نهاد و يا سازماني ندارد.
البته اين‌ها به معناي پايان دنيا نيست. هم اكنون چهار fork سورس باز از اين محصول وجود دارند (Drizzle ، MariaDB ، OurDelta و Percona Server) ولي تنها آينده است كه ميزان موفقيت، پايداري و تداوم آن‌ها را مشخص خواهد كرد.