مهاجرت از mysql به postgresql بدون ازدست رفتن اطلاعات


سلام دوستان. وقت بخیر

میخوایم توی این نوشته/آموزش/مقاله/هرچی که اسمش هست یاد بگیریم که چطوری بدون ازدست رفتن اطلاعات از mysql به postgresql مهاجرت کنیم.

اگه توی نت سرچ کنیم چنتا روش مختلف میاره که خب هم وقتتونو میگیره هم یه عالمه وقتتونو میگیره.

من شخصا 3 روزه درگیرش هستم و کلی وقتم رو گذاشتم و تا نیم ساعت قبل از نوشتن این مطلب درگیرش بودم و انقد بهم سخت گذشت که اومدم زودتر بنویسمش که بلکه ینفر دیگه زودتر راحت شه!

داستان از اونجایی شروع شد که من یه پروژه جنگو با mysql داشتم و خب همونطور که میدونیم توی جنگو mysql به خوبیpostgresql عمل نمیکنه و سرعتش کمتره( نمیگم mysql سرعتش کمه!‌توی جنگو اینطوریه)

حالا شما هم به هر علتی ممکنه این مشکل رو توی هر پروژه ای داشته باشین.

بریم سراغ اصل مطلب.

اول بگم که مهم نیست سیستم عاملتون چی باشه مال من گنو/لینوکس توزیع مانجارو هست .

اما توی ویندوز هم میتونید اینکارو انجام بدین.

اول نیاز داریم که موارد زیر توی سیستمتون نصب باشه:

JDK 1.8 and above (Java Development Kit)

libwebkitgtk-1.0-0 (لینوکس)

حالا باید نرم افزار pentaho Data Integration رو دانلود و نصب بکنیم.

لینکش هم این هست:

https://sourceforge.net/projects/pentaho/files/Pentaho%208.1/client-tools/pdi-ce-8.1.0.0-365.zip/download?use_mirror=netcologne

هم ویندوز و هم لینوکس باید همینو دانلود و نصب کنن. طبیعتا من قرار نیست نصبش رو یادتون بدم نصبش خیلی آسون هست و آموزشش هم اینجا هست:

https://help.pentaho.com/Documentation/8.0/Setup/Installation/Tools/PDI_Client_and_plugins

اگر خاستین زرنگی کنید و برید از snap نصب کنید خب باید بگم که کور خوندید و قراره به ارور بخوریم.

بعد از نصب برنامه رو اجرا کنید و مراحل زیر رو دنبال کنید.

  1. از سربرگ fileیدونه job بسازید
  2. یه کانکشن به دیتابیس اول ینی mysql بزنید! از این مسیر: Tools -> Wizard -> Create database connection
  3. حالا باز مثل مرحله قبل به دیتابیس دوم ینی postgresql کانکشن بزنید.

خب احتمالا توی مرحله 2 یه ارور دارید برای کانکت شدن به mysql یه ارور خیلی بزرگ که داره میگه:

Error connecting to database [MySQLConnetion] :
org.pentaho.di.core.exception.KettleDatabaseException:
Error occurred while trying to connect to the database
Driver class 'org.gjt.mm.mysql.Driver' could not be found,
make sure the 'MySQL' driver (jar file) is installed.

اولش یه همچین چیزیه!

اگه باز هم فکر کردید که خیلی زرنگ هستید و رفتید از snap craft نصب کردید نمیتونید حلش کنید یا حداقل من نتونستم!

توی فایل های این برنامه یه پوشه هست به اسمlib باید از لینک زیر فایل مورد نیازش رو دانلود کنید و بذارید توی این پوشه:

https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.48.zip

درحال حاضر آخرین ورژن mysql connector همین هست میتونید سرچ کنید اگر ورژن جدید تر داره دانلودش کنید.

بعد از unzip کردن دوتا فایل .jar داره که باید تو پوشه lib کپی کنید.

حالا برنامه رو restart کنید و دوباره مرحله هارو انجام بدید نباید هیچ اروری بده!

بعد از ساختن کانکشن ها باید بریم و table های mysql رو کپی کنیم توی postgresql.

از مسیر :Tools -> Wizard -> Copy Tables

اسم کانکشن هارو میاره سمت چپ اسم کانکشن mysql رو انتخاب کنید و سمت راست اسم کانکشن postgresql

اسم هارو موقع ساخت کانکشن خودتون نوشتید.

بعد بزنید next

میبینید که لیست table هارو میاره مثل شکل زیر

مهاجرت به postgresql
مهاجرت به postgresql

با فلش میتونید تیبل مورد نظر رو اضافه کنید که کپی بشه!

مرحله بعد یسری پروسس انجام میده و یه شکل بهمون نشون میده مثل شکل زیر:

migrate to postgresql
migrate to postgresql

سمت چپ بالا یه آیکون play یا همون start داره که وقتی بزنیم شروع میکنه به کپی کردن.

تمام.

نکته:

1.دیتا بیس دوم (postgresql) نباید تیبل انتخابی رو داشته باشه!

2.اگر تیبل توی دیتابیس هست اول باید drop کنید و این برنامه خودش براتون میسازه تیبل رو!

3.ترجیحا همه table هارو انتخاب کنید که هیچ dependency جا نیوفته و به ارور و مشکلی نخورید.

اگر همه مراحل رو با دقت انجام بدید نباید مشکلی پیش بیاد! الان سایت من به خوبی داره با postgresql

کار میکنه

سایت من یه سایت دانلود فیلم هست که به علت اضافه کردن یه فروشگاه احساس کردم خیلی کنده و باید یکم بهتر بشه.

این هم آدرس سایت: https://vdmovie.ir

این هم آدرس فروشگاه: https://dreamland.pw

این دوتا آدرس فقط روی یه پروژه جنگو هستن و از یه دیتابیس استفاده میکنن.

اگر دوست داشته باشید میتونم آموزش ایجاد چند سایت توی یه پروژه جنگو رو هم آموزش بدم.

اگر اشکالی توضیحی پیشنهاد و هرچیز دیگه ای بود توی کامنت ها برام بنویسید:)