إذا كنت تنقل قاعدة بيانات من MariaDB إلى MySQL HeatWave على OCI، فعليك استخدام أدوات MySQL Shell (mysqlsh).
المشكلة: يسمح MariaDB بقيم افتراضية مباشرة لمصفوفات JSON (مثل DEFAULT [])، بينما يشترط MySQL بصرامة استخدام تعبيرات دالّية (DEFAULT (json_array())). فإذا كانت قاعدة بيانات MariaDB لديك تستخدم أعمدة JSON، سيفشل استيراد التصدير الخام إلى HeatWave.
إليك الخطوات الدقيقة لتثبيت الأدوات وتصدير قاعدة البيانات وتصحيح صياغة JSON ثم استيرادها.
الخطوة 0: تثبيت MySQL Shell (mysqlsh)
إذا لم يكن MySQL Shell مثبتًا على الخادم لديك، فثبّته عبر مدير الحزم.
لنظامي Ubuntu/Debian:
sudo apt update
sudo apt install mysql-shell -y
لأنظمة CentOS/RHEL/Oracle Linux:
Bash
sudo yum install mysql-shell -y
الخطوة 1: تصدير نسخة MariaDB
اتصل بالخادم المصدر وافتح MySQL Shell. ثم شغّل أداة التصدير مع الخيار ocimds: true لتطبيق إصلاحات التوافق السحابي الأساسية تلقائيًا.
sudo mysqlsh --no-defaults
\connect local_user@localhost:3306
util.dumpInstance('/data/mysqlheatwave-export', {
threads: 8,
ocimds: true,
users: false,
compatibility: ['strip_restricted_grants', 'strip_definers', 'force_innodb', 'create_invisible_pks']
})
الخطوة 2: تصحيح صياغة مصفوفات JSON
اخرج من MySQL Shell وشغّل أوامر sed التالية مباشرة في طرفية Linux. تبحث هذه الأوامر في ملفات SQL المُصدَّرة وتحوّل صياغة JSON الخاصة بـ MariaDB إلى الصيغة التي يتطلبها MySQL.
# Wrap existing json_array functions in parentheses
sudo find /data/mysqlheatwave-export/ -type f -exec sed -i 's/DEFAULT json_array()/DEFAULT (json_array())/g' {} +
# Convert literal string arrays to the json_array() function
sudo find /data/mysqlheatwave-export/ -type f -exec sed -i "s/NOT NULL DEFAULT '\\\\'\[\]\\''/NOT NULL DEFAULT (json_array())/g" {} +
ملاحظة مهمة: إذا استمر الاستيراد في إظهار خطأ يشير تحديدًا إلى قيد DEFAULT []، فربما أغفلت أوامر sed حالة تنسيق خاصة. ستحتاج حينها إلى فتح ملف .sql المذكور في رسالة الخطأ يدويًا، والبحث عن DEFAULT []، ثم حذفه بالكامل أو استبداله بـ DEFAULT (json_array()).
الخطوة 3: الاستيراد إلى MySQL HeatWave
افتح MySQL Shell مجددًا واتصل بعنوان IP الخاص بنسخة HeatWave لديك لتحميل ملفات التصدير بعد تصحيحها.
\connect remote_user@remote_host:3306
util.loadDump('/data/mysqlheatwave-export/', {
threads: 8,
ignoreVersion: true,
ignoreExistingObjects: true
})
يتطلب نقل قواعد البيانات الحساسة وتأمين البيئات المخترقة دقة عالية. وإذا كان فريقك يحتاج إلى دعم عملي في التعامل مع البنى التحتية السحابية المعقدة أو التعافي من الكوارث أو نقل قواعد البيانات، فإن مهندسي DevSecOps في NextMark يمكنهم مساعدتك على تصميم نظام آمن وعالي التوفر.