ترحيل قاعدة بيانات Azure ل MySQL - خادم واحد إلى قاعدة بيانات Azure ل MySQL - خادم مرن باستخدام أدوات مفتوحة المصدر

يمكنك ترحيل مثيل قاعدة بيانات Azure ل MySQL - خادم واحد إلى قاعدة بيانات Azure ل MySQL - خادم مرن مع الحد الأدنى من وقت التعطل إلى تطبيقاتك باستخدام مجموعة من الأدوات مفتوحة المصدر مثل mydumper/myloader والنسخ المتماثل للبيانات.

إشعار

تحتوي هذه المقالة على مراجع لمصطلح slave، وهو مصطلح لم تعد Microsoft تستخدمه. عند إزالة المصطلح من البرنامج، بالتالي سنزيله من هذه المقالة.

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

إذا أعددت النسخ المتماثل لإدخال البيانات من أجل مزامنة البيانات من مثيل واحد لـ Azure Database for MySQL إلى مثيل آخر، يمكنك إجراء نقل انتقائي لتطبيقاتك من قاعدة البيانات الأساسية (أو المصدر) إلى النسخة المتماثلة (أو قاعدة البيانات الهدف).

في هذا البرنامج التعليمي، ستستخدم mydumper/myloader والنسخ المتماثل للبيانات لترحيل نموذج قاعدة بيانات (نماذج كلاسيكية) من مثيل Azure Database for MySQL - خادم واحد إلى مثيل Azure Database for MySQL - Flexible Server، ثم مزامنة البيانات.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • تكوين إعدادات الشبكة للنسخ المتماثل لإدخال البيانات للسيناريوهات المختلفة.
  • تكوين النسخ المتماثل لإدخال البيانات بين النسخة المتماثلة والنسخة الأساسية.
  • اختبار النسخ المتماثل.
  • النقل لإكمال الترحيل.

المتطلبات الأساسية

لإكمال هذا البرنامج التعليمي، تحتاج إلى:

  • مثيل Azure Database for MySQL Single Server الذي يعمل بالإصدار 5.7 أو 8.0.

    إشعار

    إذا كنت تقوم بتشغيل الإصدار 5.6 من Azure Database for MySQL Single Server، فقم بترقية المثيل إلى 5.7 ثم قم بتكوين النسخ المتماثل لإدخال البيانات. لمعرفة المزيد، راجع ترقية الإصدار الرئيسي في Azure Database for MySQL - Single Server.

  • مثيل Azure Database for MySQL Flexible Server. لمزيد من المعلومات، راجع المقالة إنشاء مثيل في Azure Database for MySQL Flexible Server.

    إشعار

    تكوين النسخ المتماثل لإدخال البيانات للخوادم ذات قابلية الوصول العالية المُكررة عبر المناطق غير مدعم. إذا كنت ترغب في الحصول على قابلية وصول عالية متكررة عبر المناطق للخادم الهدف، فقم بتنفيذ هذه الخطوات:

    1. إنشاء الخادم مع تمكين قابلية الوصول العالية المكررة عبر المناطق
    2. تعطيل قابلية الوصول العالية
    3. اتباع المقالة لإعداد النسخ المتماثل لإدخال البيانات
    4. إزالة تكوين النسخ المتماثل لإدخال البيانات بعد النقل
    5. تمكين قابلية الوصول العالية

    تأكد من أن GTID_Mode له نفس الإعداد على الخوادم المصدر والهدف.

  • للاتصال وإنشاء قاعدة بيانات باستخدام MySQL Workbench. لمزيد من المعلومات، راجع المقالة استخدام MySQL Workbench للاتصال والاستعلام عن البيانات.

  • للتأكد من أن لديك جهاز Azure ظاهري يعمل بنظام Linux في نفس المنطقة (أو على نفس الشبكة الظاهرية، مع وصول خاص) يستضيف قواعد البيانات الهدف والمصدر.

  • لتثبيت عميل mysql أو MySQL Workbench (أدوات العميل) على جهاز Azure الظاهري. التأكد من أنه يمكنك الاتصال بخادم النسخة المتماثلة والأساسية. لأغراض هذه المقالة، يتم تثبيت عميل mysql.

  • لتثبيت mydumper/myloader على جهاز ظاهري من Azure. لمزيد من المعلومات، راجع المقالة mydumper/myloader.

  • لتنزيل نموذج البرنامج النصي لقاعدة البيانات وتشغيله لقاعدة البيانات classicmodels على الخادم المصدر.

  • قم بتكوين binlog_expire_logs_seconds على الخادم المصدر للتأكد من عدم إزالة binlogs قبل أن تقوم النسخة المتماثلة بتثبيت التغييرات. بعد القص الناجح، يمكنك إعادة تعيين القيمة.

تكوين متطلبات الشبكة

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

  • إذا تم تمكين نقطة نهاية عامة على المصدر، فتأكد من أن الهدف يمكنه الاتصال بالمصدر عن طريق تمكين "السماح بالوصول إلى خدمات Azure" في قاعدة جدار الحماية. لمعرفة المزيد، راجع قواعد جدار الحماية - Azure Database for MySQL.
  • إذا تم تمكين نقطة نهاية خاصة ورفض الوصول العام على المصدر، فقم بتثبيت الارتباط الخاص في نفس VNet الذي يستضيف الهدف. لمعرفة المزيد، راجع Private Link - Azure Database for MySQL.

تكوين النسخ المتماثل لإدخال البيانات

لتكوين النسخ المتماثل لإدخال البيانات، قم بتنفيذ الخطوات التالية:

  1. تسجيل الدخول إلى الجهاز الظاهري في Azure الذي قمت بتثبيت أداة العميل mysql عليه.

  2. الاتصال بالمصدر والهدف باستخدام أداة العميل mysql.

  3. استخدم أداة العميل mysql لتحديد ما إذا تم تمكين log_bin على المصدر عن طريق تشغيل الأمر التالي:

    SHOW VARIABLES LIKE 'log_bin';
    

    إشعار

    باستخدام Azure Database for MySQL Single Server مع موقع التخزين الكبير، والذي يدعم ما يصل إلى 16 تيرابايت، يتم تمكين ذلك افتراضياً.

    تلميح

    باستخدام Azure Database for MySQL Single Server، الذي يدعم ما يصل إلى 4 تيرابايت، لا يتم تمكين ذلك افتراضياً. لكن، إذا قمت بترقية نسخة متماثلة للقراءة للخادم المصدر ثم حذفت النسخة المتماثلة للقراءة، فسيتم تعيين المعلّمة على ON.

  4. استناداً إلى فرض SSL للخادم المصدر، أنشئ مستخدماً في الخادم المصدر بإذن للنسخ المتماثل عن طريق تشغيل الأمر المناسب.

    إذا كنت تستخدم SSL، فقم بتشغيل الأمر التالي:

    CREATE USER 'syncuser'@'%' IDENTIFIED BY 'yourpassword';
    GRANT REPLICATION SLAVE ON *.* TO ' syncuser'@'%' REQUIRE SSL;
    

    إذا كنت لا تستخدم SSL، فقم بتشغيل الأمر التالي:

    CREATE USER 'syncuser'@'%' IDENTIFIED BY 'yourpassword';
    GRANT REPLICATION SLAVE ON *.* TO ' syncuser'@'%';
    
  5. لنسخ قاعدة البيانات احتياطياً باستخدام mydumper، قم بتشغيل الأمر التالي على الجهاز الظاهري من Azure حيث قمنا بتثبيت mydumper\myloader:

    mydumper --host=<primary_server>.mysql.database.azure.com --user=<username>@<primary_server> --password=<Password> --outputdir=./backup --rows=100000 -G -E -R -z --trx-consistency-only --compress --build-empty-files --threads=16 --compress-protocol --ssl  --regex '^(classicmodels\.)' -L mydumper-logs.txt
    

    تلميح

    الخيار --trx-consistency-only مطلوب من أجل اتساق العمليات أثناء النسخ الاحتياطي.

    • المكافئ mydumper من معاملة mysqldump -single-transaction.
    • مفيد إذا كانت كل الجداول InnoDB.
    • يحتاج مؤشر الترابط "الرئيسي" فقط إلى الاحتفاظ بالقفل العمومي حتى يمكن لمؤشرات الترابط "التفريغ" بدء معاملة.
    • أقصر مدة للتأمين العمومي

    يحتاج مؤشر الترابط "الرئيسي" فقط إلى الاحتفاظ بالقفل العمومي حتى يمكن لمؤشرات الترابط "التفريغ" بدء معاملة.

    فيما يلي شرح للمتغيرات في هذا الأمر:

    HOW-TO-MANAGE-FIREWALL-PORTAL --host: Name of the primary server

    • --user: اسم مستخدم (بالتنسيق username@servername بما أن الخادم الأساسي يقوم بتشغيل Azure Database for MySQL - Single Server). يمكنك استخدام مسؤول الخادم أو مستخدم لديه أذونات SELECT وRELOAD.
    • --Password: كلمة مرور المستخدم بالأعلى

    لمزيد من المعلومات حول استخدام mydumper، راجع mydumper/myloader

  6. يمكنك قراءة ملف بيانات التعريف لتحديد اسم ملف السجل الثنائي والإزاحة بواسطة تشغيل الأمر التالي:

    cat ./backup/metadata
    

    في هذا الأمر، يشير ./backup إلى دليل الإخراج المستخدم في الأمر في الخطوة السابقة.

    يجب أن تظهر النتائج كما هو موضح في الصورة التالية:

    لقطة شاشة للمزامنة المستمرة مع خدمة ترحيل قاعدة بيانات Azure.

    تأكد من ملاحظة اسم الملف الثنائي لاستخدامه في الخطوات اللاحقة.

  7. يمكنك استعادة قاعدة البيانات باستخدام myloader عن طريق تشغيل الأمر التالي:

    myloader --host=<servername>.mysql.database.azure.com --user=<username> --password=<Password> --directory=./backup --queries-per-transaction=100 --threads=16 --compress-protocol --ssl --verbose=3 -e 2>myloader-logs.txt
    

    فيما يلي شرح للمتغيرات في هذا الأمر:

    • --host: اسم خادم النسخة المتماثلة
    • --user: اسم مستخدم. يمكنك استخدام مسؤول الخادم أو مستخدم لديه إذن القراءة/الكتابة يمكنه استعادة المخططات والبيانات إلى قاعدة البيانات
    • --Password: كلمة مرور المستخدم بالأعلى
  8. بناء على فرض SSL على الخادم الأساسي، قم بالاتصال بخادم النسخة المتماثلة باستخدام أداة العميل mysql وتنفيذ الخطوات التالية.

    • إذا تم تمكين فرض SSL، فسيكون بإمكانك القيام بالتالي:

      1. تنزيل الشهادة اللازمة للاتصال عبر SSL باستخدام خادم Azure Database for MySQL من هنا.

      ‫2. افتح الملف في المفكرة والصق المحتويات في المقطع "ضع سياق شهادة المفتاح العام هنا".

      SET @cert = '-----BEGIN CERTIFICATE-----
      PLACE YOUR PUBLIC KEY CERTIFICATE'S CONTEXT HERE
      -----END CERTIFICATE-----'
      

      3. لتكوين النسخ المتماثل لإدخال البيانات، قم بتشغيل الأمر التالي:

      CALL mysql.az_replication_change_master('<Primary_server>.mysql.database.azure.com', '<username>@<primary_server>', '<Password>', 3306, '<File_Name>', <Position>, @cert);
      

      إشعار

      يمكنك تحديد الموضع واسم الملف من المعلومات الواردة في الخطوة 6.

    • إذا لم يتم تمكين فرض SSL، فقم بتشغيل الأمر التالي:

      CALL mysql.az_replication_change_master('<Primary_server>.mysql.database.azure.com', '<username>@<primary_server>', '<Password>', 3306, '<File_Name>', <Position>, '');
      
  9. لبدء النسخ المتماثل من خادم النسخة المتماثلة، استدعِ الإجراء المخزن بالأسفل.

    call  mysql.az_replication_start;
    
  10. للتحقق من حالة النسخ المتماثل، قم بتشغيل الأمر التالي على خادم النسخة المتماثلة:

    show slave status \G;
    

    إشعار

    إذا كنت تستخدم MySQL Workbench، فإن أداة التعديل \G غير مطلوبة.

    إذا كانت حالة Slave_IO_Running وSlave_SQL_Running مُعيّنة على Yes وكانت قيمة Seconds_Behind_Master مُعينة على 0، فهذا يعني أن النسخ المتماثل يعمل بشكل جيد. يشير Seconds_Behind_Master إلى مدى تأخر النسخة المتماثلة. إذا كانت القيمة مُعينة على شيء آخر غير 0، فهذا يعني أن النسخة المتماثلة تعالج التحديثات.

اختبار النسخ المتماثل (اختياري)

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

  1. حدد جدولا لاستخدامه للاختبار، على سبيل المثال، جدول العملاء، ثم تأكد من أن عدد الإدخالات التي يحتوي عليها هو نفسه على خوادم النسخ المتماثلة والأساسية عن طريق تشغيل الأمر التالي على كل منها:

    select count(*) from customers;
    
  2. دوّن عدد الإدخالات للمقارنة لاحقاً.

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

  3. في جدول Customers على الخادم الأساسي، يمكنك إدراج صفوف عن طريق تشغيل الأمر التالي:

    insert  into `customers`(`customerNumber`,`customerName`,`contactLastName`,`contactFirstName`,`phone`,`addressLine1`,`addressLine2`,`city`,`state`,`postalCode`,`country`,`salesRepEmployeeNumber`,`creditLimit`) values
    (<ID>,'name1','name2','name3 ','11.22.5555','54, Add',NULL,'Add1',NULL,'44000','country',1370,'21000.00');
    
  4. للتحقق من حالة النسخ المتماثل، استدعِ show slave status \G للتأكد من أن النسخ المتماثل يعمل كما هو متوقع.

  5. للتأكد من أن العدد لم يتغير، قم بتشغيل الأمر التالي على خادم النسخة المتماثلة:

    select count(*) from customers;
    

ضمان نجاح التشغيل

لضمان نجاح النقل، قم بتنفيذ المهام التالية:

  1. قم بتكوين قواعد الشبكة الظاهرية وجدار الحماية المناسب على مستوى الخادم للاتصال بالخادم الهدف. يمكنك مقارنة قواعد جدار الحماية للمصدر والهدف من المدخل.
  2. يمكنك تكوين تسجيلات الدخول المناسبة والأذونات على مستوى قاعدة البيانات في الخادم الهدف. يمكنك تشغيل SELECT FROM mysql.user؛ على الخوادم المصدر والهدف للمقارنة.
  3. تأكد من إيقاف كل الاتصالات الواردة إلى Azure Database for MySQL Single Server.

    تلميح

    يمكنك إعداد Azure Database for MySQL Single Server للقراءة فقط.

  4. تأكد من أن النسخة المتماثلة متوافقة مع الأساسي عن طريق تشغيل show slave status \G والتأكد من أن قيمة المعلّمة Seconds_Behind_Master هي 0.
  5. أعد توجيه العملاء وتطبيقات العملاء إلى المثيل الهدف لـ Azure Database for MySQL Flexible Server.
  6. قم بتنفيذ النقل النهائي عن طريق تشغيل الإجراء المخزن mysql.az_replication_stop، والذي سيؤدي إلى إيقاف النسخ المتماثل من خادم النسخة المتماثلة.
  7. قم باستدعاء mysql.az_replication_remove_master لإزالة تكوين النسخ المتماثل لإدخال البيانات.

عند هذه النقطة، يتم توصيل التطبيقات بـ Azure Database for MySQL Flexible server الجديد وسيتوقف النسخ المتماثل للتغييرات في المصدر إلى الهدف. إنشاء قواعد جدار حماية Azure Database for MySQL وإدارتها باستخدام مدخل Microsoft Azure