المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : تحويل قاعدة بيانات vb4 إلى ترميز UTF-8 بواسطة SSH


admin
12-31-2009, 08:22 AM
بحثت كثيراً عن طريقة لتحويل قاعدة بيانات المنتدى (http://www.top3rab.com/showthread.php?t=211) إلى UTF-8 (http://www.top3rab.com/showthread.php?t=211) ، ووجدت طرق أعتقد أنها (( هزيلة )) ، وغير صالحة ، لسبب مهم جداً أنها تعتمد على المتصفح ..

بحيث لو انقطع الإنترنت - واجهت DNS Error - و و و .. سيذهب كل تعبك سدى ..

علاوة على أخذها لوقت طوووووووووووويل جداً قد يزيد عن يوم كامل في حال كان المنتدى كبيراً ..

الطرق التي شاهدتها تصلح لمنتديات (http://www.top3rab.com/showthread.php?t=211) صغيرة لا تزيد المشاركات فيها عن 50 ألف مشاركة كحد أقصى ..

لذلك قمت بالبحث الطويل والطويل جداً عن طريقة سهلة وسريعة لإنهاء هذه المعاناة ، وللأسف (( لا يوجد )) .. هناك أخطاء تواجهني ، هناك نقص في الأوامر ، ومشاكل أخرى ..

فعكفت طويلاً على حل هذه الأزمة والحمد لله .. تم حلها بشكل كاااااااااامل على منتديات (http://www.top3rab.com/showthread.php?t=211) من نوع vb4 ..

وتوصلت إلى ما يلي :

1- أن التحويل (http://www.top3rab.com/showthread.php?t=211) من ترميز إلى ترميز (http://www.top3rab.com/showthread.php?t=211) يكون بإستخدام الدالة iconv
2- الجداول التي تحتوي على حقول من نوع binary أو كما يعرف عنها blob يجب أن لا يتم تحويلها (http://www.top3rab.com/showthread.php?t=211) بواسطة الدالة لأنها عبارة عن صور وملفات .
3- يجب أن تمتلك حساب SSH
4- قاعدة البيانات (http://www.top3rab.com/showthread.php?t=211) كما هو معلوم قبل التحويل (http://www.top3rab.com/showthread.php?t=211) من نوع latin1

وبدأت في حل المشكلة كالتالي :

1- أخذ نسخة احتياطية (http://www.top3rab.com/showthread.php?t=211) من المنتدى باستثناء الجداول التي تحتوي على حقول binary بالأمر التالي :

رمز Code:
mysqldump -u root -p --default-character-set=latin1 --ignore-table=database_vb.block --ignore-table=database_vb.blog_attachment --ignore-table=database_vb.customavatar --ignore-table=database_vb.customprofilepic --ignore-table=database_vb.filedata --ignore-table=database_vb.stylevar --ignore-table=database_vb.stylevardfn --ignore-table=database_vb.socialgroupicon --ignore-table=database (http://www.top3rab.com/showthread.php?t=211)_vb.sigpic database_vb > vb4-latin1.sql
حيث أن database_vb هي قاعدة بيانات (http://www.top3rab.com/showthread.php?t=211) المنتدى ..

وبالأمر السابق قمنا بإستثناء الجداول من نوع binary ، وأخذ باقي القاعدة (http://www.top3rab.com/showthread.php?t=211)ووضعها في ملف vb4-latin1.sql

بقي الآن أن نأخذ بقية قاعدة (http://www.top3rab.com/showthread.php?t=211) الجداول التي استثنيناها لكن في ملف جديد ..

وبالتالي ننفذ الأمر التالي :

رمز Code:
mysqldump -u root -p --default-character-set=latin1 database_vb block blog_attachment customavatar customprofilepic filedata stylevar stylevardfn socialgroupicon sigpic > vb4-latin1-blob.sql
حيث أن database_vb هي قاعدة بيانات (http://www.top3rab.com/showthread.php?t=211) المنتدى (http://www.top3rab.com/showthread.php?t=211) ..

والهدف هو ملف vb4-latin1-blob.sql

والآن بعد أن أخذنا قاعدة البيانات (http://www.top3rab.com/showthread.php?t=211) كاملة نبدأ في عملية التحويل (http://www.top3rab.com/showthread.php?t=211) ، وتم عبر عدة مراحل :

سنعمل الآن على تغيير الكلمات في قاعدة البيانات (http://www.top3rab.com/showthread.php?t=211) التي تشير إلى أن القاعدة (http://www.top3rab.com/showthread.php?t=211) latin1 (http://www.top3rab.com/showthread.php?t=211) إلى utf8 (http://www.top3rab.com/showthread.php?t=211) ، وذلك بالمرور على الملفين السابق إعدادهما ..

فقط قم بتنفيذ الأوامر التالية :

رمز Code:
cat ./vb4-latin1.sql | sed 's/SET NAMES latin1/SET NAMES utf8/g' > tmp
cat ./tmp > ./vb4-latin1.sql
rm -f ./tmp

cat ./vb4-latin1-blob.sql | sed 's/SET NAMES latin1/SET NAMES utf8/g' > tmp
cat ./tmp > ./vb4-latin1-blob.sql
rm -f ./tmp

cat ./vb4-latin1.sql | sed 's/CHARSET=latin1/CHARSET=utf8/g' > tmp
cat ./tmp > ./vb4-latin1.sql
rm -f ./tmp

cat ./vb4-latin1-blob.sql | sed 's/CHARSET=latin1/CHARSET=utf8/g' > tmp
cat ./tmp > ./vb4-latin1-blob.sql
rm -f ./tmp

cat ./vb4-latin1.sql | sed 's/CHARACTER SET latin1 COLLATE latin1_bin/CHARACTER SET utf8 COLLATE utf8_bin/g' > tmp
cat ./tmp > ./vb4-latin1.sql
rm -f ./tmp

cat ./vb4-latin1-blob.sql | sed 's/CHARACTER SET latin1 COLLATE latin1_bin/CHARACTER SET utf8 COLLATE utf8_bin/g' > tmp
cat ./tmp > ./vb4-latin1-blob.sql
rm -f ./tmp
كل ما سبق كان الغرض منه كما ذكرت تغيير محتويات الملفين السابقين ليشيران إلى أنهما من نوع utf8 (http://www.top3rab.com/showthread.php?t=211) ..

ولكن هل هذا يكفي ؟؟

بالطبع لا .. لأن محتويات القاعدة لازالت latin1 ، وإن كانت تشير إلى utf8 ..

والحل هنا استخدام الدالة iconv .. على الملف الأول ، والذي يحتوي على المشاركات ..

وذلك بالأمر التالي :

رمز Code:
iconv -c -f windows-1256 -t utf-8 vb4-latin1.sql > vb4-utf8.sql
وكأنني أخبره أن المدخلات الحالية في قاعدة البيانات مدخلة بترميز windows-1256 ، وأريد منك أن تحوله لـ utf-8 ، وذلك بأخذها من الملف vb4-latin1.sql ووضعها بالملف الجديد vb4-utf8.sql ..

الأمر بسيط .. لكن سيأخذ بعض الوقت ..

لكن بالطبع لن يأخذ يوماً أو يومين ، وإنما سيأخذ وقتاً بحسب حجم المنتدى (http://www.top3rab.com/showthread.php?t=211) ، ولكن كمنتدى متوسط الحجم لن يزيد على 5 - 15 دقيقة .. http://www.traidnt.net/vb/images/smilies/cupidarrow.gif ، وهنا الروعة ..

كل ماهو مطلوب منا الآن هو إنشاء قاعدة بيانات (http://www.top3rab.com/showthread.php?t=211) جديدة .. من لوحة تحكم الموقع حتى يتم إستعادة البيانات الجديدة فيها ..

وبعد ذلك نستخدم الأوامر التالية لإستعادة القاعدة ..

رمز Code:
mysql -u root -p --max_allowed_packet=1024M database_vb2 < vb4-utf8.sql
mysql -u root -p --max_allowed_packet=1024M database_vb2 < vb4-latin1-blob.sql
أخيراً ..

تم تحويل قاعدة البيانات (http://www.top3rab.com/showthread.php?t=211) بالكامل إلى utf-8 (http://www.top3rab.com/showthread.php?t=211) ..

وبقي لنا ثلاثة خطوات بسيطة فقط لإنهاء العمل بشكل كامل ..


1- إزالة علامة // من ملف كونفيق قبل العبارة التالية :
رمز Code:
$config['Mysqli']['charset']='utf8';
2- تحويل ملف اللغة إلى UTF-8 (http://www.top3rab.com/showthread.php?t=211) ، وذلك بتحميل برنامج notepad++

ثم فتح ملف اللغة ( من أخونا ضيف المهاجر ) ..

ثم من قائمة Format ==> convert To UTF-8 (http://www.top3rab.com/showthread.php?t=211)

ثم حفظه ورفعه كلغة جديدة في المنتدى ..

3- وهي الخطوة الأخيرة الدخول لإعدادات ملف اللغة في لوحة تحكم المنتدى وتغيير الترميز (http://www.top3rab.com/showthread.php?t=211) من windows-1256 إلى UTF-8 (http://www.top3rab.com/showthread.php?t=211) ..

وبالتالي نكون قد انتهينا بحمد الله تعالى من تحويل قاعدة البيانات (http://www.top3rab.com/showthread.php?t=211) بشكل كامل ..


ملحوظة : بعد رفع ملف config الجديد بعد إزالة // منه ..

سيلاحظ البعض وجود مشكلة في المنتدى والحل بسيط جداً برفع ملف tools.php الموجود في مجلد المنتدى /do_not_upload إلى المجلد admincp

ثم الضغط على العبارات الثلاثة التي يوجد فيها cash ..