הגדרת שכפול MySQL Master-Slave: GTID, ניטור, שגיאות
הערה: כאשר שרת ה-MySQL הראשי קורס, העסק מאבד לא רק זמן אלא גם עסקאות — שחזור מגיבויים יכול לקחת שעות. בפרויקט אחד עם עומס של 5000 שאילתות בשנייה, זמן ההשבתה נמשך 4 שעות, מה שהוביל להפסדים. שכפול MySQL Master-Slave פותר בעיה זו: העותק מעתיק את יומן הבינארי מהמאסטר ומחיל אירועים עם השהיה של אלפיות שנייה. הגדרה מקצועית של שכפול Master-Slave היא לא רק שרת גיבוי, אלא גם יכולת לחלק שאילתות קריאה, להפחית עומס על השרת הראשי. במאמר זה — תצורה מעשית, שגיאות אופייניות, ניטור השהיה, ומה אנחנו כוללים בעבודה. שכפול יציב עם GTID מקצר את זמן המעבר לדקות, ותחת עומס רגיל, ההשהיה אינה עולה על 1–2 שניות. הגדרה מקצועית מתחילה ב-$1,500 עבור תצורה בסיסית (מאסטר אחד, עותק אחד).
מה מספק שכפול Master-Slave?
- סובלנות לתקלות: כאשר המאסטר נופל, אנחנו עוברים לעותק תוך דקות.
- הרחבת קריאה: אנו שולחים שאילתות SELECT למספר עותקים, ומשאירים את המאסטר לכתיבה.
- גיבויים ללא השבתה: אנו לוקחים dump מהעותק מבלי להשפיע על הייצור.
רוב הפרויקטים מגיעים לשכפול לאחר התקלה הראשונה. אנו ממליצים להגדיר זאת מההתחלה: זה זול ומהיר יותר משחזור נתונים חירום.
הגדרת שכפול MySQL שלב אחר שלב
תצורת מאסטר
במאסטר, הפעל את היומן הבינארי והגדר server_id. דוגמת תצורה:
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server_id = 1
log_bin = /var/log/mysql/mysql-bin
binlog_format = ROW
binlog_row_image = MINIMAL
sync_binlog = 1
expire_logs_days = 7צור משתמש עם הרשאות # /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] server_id = 1 log_bin = /var/log/mysql/mysql-bin binlog_format = ROW binlog_row_image = MINIMAL sync_binlog = 1 expire_logs_days = 7 :
CREATE USER 'repl'@'10.0.0.2' IDENTIFIED WITH caching_sha2_password BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.0.2';
FLUSH PRIVILEGES; לקיחת Dump ראשוני
כדי לאתחל את העותק, יש צורך ב-dump עם מיקום ה-binlog. שתי שיטות:
| שיטה | פקודה | נעילה | מתאים ל |
|---|---|---|---|
| mysqldump | REPLICATION SLAVE |
מינימלית (נעילה קצרה) | עד 50 GB |
| Percona XtraBackup | CREATE USER 'repl'@'10.0.0.2' IDENTIFIED WITH caching_sha2_password BY 'repl_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.0.2'; FLUSH PRIVILEGES; |
ללא נעילות | כל גודל, כולל 500+ GB |
מיקום ה-binlog יהיה בתחילת קובץ ה-dump או ב-mysqldump --all-databases --master-data=2 --single-transaction --routines --triggers --events. בפרויקט אחרון עם 500 GB של נתונים, XtraBackup הפחית את זמן ה-dump פי 3 בהשוואה ל-mysqldump.
תצורת עותק
בעותק — xtrabackup --backup --target-dir=/backup/ משלו ומצב xtrabackup_binlog_info:
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server_id = 2
relay_log = /var/log/mysql/mysql-relay
read_only = ON
log_bin = /var/log/mysql/mysql-bin
log_slave_updates = ONשחזר את ה-dump והתחל שכפול:
mysql -u root -p < /backup/full_dump.sql
mysql -e "CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.0.0.1', SOURCE_USER='repl', SOURCE_PASSWORD='repl_password', SOURCE_LOG_FILE='mysql-bin.000042', SOURCE_LOG_POS=12345, SOURCE_SSL=1; START REPLICA; SHOW REPLICA STATUS\G"בדוק: server_id, read_only, # /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] server_id = 2 relay_log = /var/log/mysql/mysql-relay read_only = ON log_bin = /var/log/mysql/mysql-bin log_slave_updates = ON — השהיה בשניות.
GTID או שכפול לפי מיקום?
GTID (Global Transaction ID) — מזהי עסקאות גלובליים הזמינים מ-MySQL 5.6 ומעלה. היתרון העיקרי שלהם הוא שאין צורך לציין ידנית את קובץ ה-binlog והמיקום. במהלך מעבר, העותק קובע בעצמו אילו עסקאות להחיל. תיעוד MySQL: עסקאות GTID הן ייחודיות גלובלית. בזכות GTID, זמן המעבר מצטמצם מ-10–15 דקות ל-2–3 דקות, מה שמפחית הפסדים בפרויקטים בעלי עומס גבוה. תצורת GTID:
gtid_mode = ON enforce_gtid_consistency = ON פקודת CHANGE משתמשת ב-mysql -u root -p < /backup/full_dump.sql mysql -e "CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.0.0.1', SOURCE_USER='repl', SOURCE_PASSWORD='repl_password', SOURCE_LOG_FILE='mysql-bin.000042', SOURCE_LOG_POS=12345, SOURCE_SSL=1; START REPLICA; SHOW REPLICA STATUS\\G" במקום ציון קובץ ומיקום. GTID גם מפשט דילוג על עסקאות שגויות — במקום Replica_IO_Running: Yes, השתמש ב-Replica_SQL_Running: Yes.
אם גרסת MySQL שלך היא 5.6+ ואתה מתכנן מעברי מאסטר תכופים, בחר ב-GTID. עבור גרסאות ישנות יותר (5.5 ומטה), זמין רק שכפול לפי מיקום. בשלב התכנון, אנו עוזרים לקבוע את האפשרות האופטימלית לעומס ול-SLA שלך.
ניטור וניהול השהיית שכפול
השהיה היא הפרש הזמן בין ביצוע עסקה במאסטר לבין יישומה בעותק. היא נמדדת בשניות דרך Seconds_Behind_Source. תחת עומס רגיל, ההשהיה אינה עולה על 1–2 שניות. אם ההשהיה גדלה, בדוק:
- ביצועי דיסק בעותק;
- גודל עסקאות (DDL גדול יכול להגדיל השהיה);
- השהיית רשת.
ניטור השהיה — דרך מדד gtid_mode = ON enforce_gtid_consistency = ON SOURCE_AUTO_POSITION=1. התראה בהשהיה > 30 שניות ו-> 60 שניות.
להשהיה גבוהה (>30 שניות), בדוק תחילה את עומס העותק: אם CPU או I/O מנוצלים עד הסוף, הגדל משאבים או הוסף עובדים מקבילים (SQL_SLAVE_SKIP_COUNTER). אם הבעיה היא רשת (השהיה >5 ms), שקול VLAN ייעודי או מיקום גיאוגרפי של עותקים.
כדי להאיץ שכפול, השתמש ב-SET GTID_NEXT='...'; BEGIN; COMMIT; וב-Seconds_Behind_Source — זה מפחית את נפח הנתונים המועברים. כמו כן הגדל את mysqld_exporter ל-4-8 אם MySQL 8.0+. בשרת חזק, זה נותן שיפור ביצועים של עד 50%.
תרחישי כשל אופייניים
טבלת תרחישי כשל ופתרונות
| תרחיש | סיבה | פתרון |
|---|---|---|
| רשומה כפולה | כתיבה ישירה בעותק | הפעל mysql_slave_status_seconds_behind_master ודלג על העסקה |
| רשומה לא נמצאה | מחיקה במאסטר לפני יישום | סנכרן נתונים עם המאסטר |
| אובדן מיקום binlog | קיצוץ יומן במאסטר | אתחל מחדש את העותק מגיבוי טרי |
אם השכפול נעצר, בדוק slave_parallel_workers — השדות המרכזיים binlog_format = ROW ו-binlog_row_image = MINIMAL צריכים להיות Yes.
תהליך עבודה ומה כלול
- ניתוח (2–4 שעות): הערכת הסכימה הנוכחית, גודל מסד הנתונים, השהיית רשת.
- תכנון (1–2 ימים): בחירה בין שכפול לפי מיקום ל-GTID, תכנון מעבר.
- יישום (2–5 ימים): תצורת שרתים, יצירת משתמש, dump, התחלת שכפול.
- בדיקות (4–8 שעות): בדיקת מהירות שכפול, בדיקת השהיה, מעבר לעותק.
- תיעוד והדרכה (יום אחד): מסירת runbook, הגדרת התראות.
עבור מסד נתונים של 500 GB עם עומס של 10,000 שאילתות בשנייה, השכפול מוגדר תוך 3–4 ימים. שים לב: מה כלול בעבודה:
- תצורה של 2–4 שרתי MySQL תוך התחשבות בטופולוגיה (מאסטר + 1–3 עותקים).
- בחירת שיטת dump: mysqldump למסדי נתונים עד 50 GB, Percona XtraBackup למסדי נתונים עד 1 TB ויותר.
- הגדרת GTID ו-
slave_parallel_workers(אם MySQL 5.6+). - ניטור השהיה דרך Prometheus/Grafana: מדד
read_only, התראות בהשהיה >30 ו->60 שניות. - Runbook לפעולות אופייניות: מעבר מאסטר (failover ידני), שחזור לאחר תקלה, דילוג על עסקאות שגויות.
- ייעוץ מהנדס לאחר ההשקה.
צור קשר כדי להגדיר שכפול לפרויקט שלך — נעריך את התשתית הנוכחית ונציע פתרון אופטימלי.
היתרונות שלנו
המהנדסים שלנו הם DBA מוסמכים עם ניסיון של 5+ שנים בייעוץ MySQL בפרויקטים עם עומסים עד 100,000 שאילתות בשנייה. אנו מבטיחים שההשהיה לא תעלה על 30 שניות תחת עומס רגיל. יותר מ-50 פרויקטים מוצלחים מאשרים את המקצועיות שלנו.
הזמן הגדרה מקצועית של שכפול MySQL — המהנדס שלנו יחזור אליך תוך שעה ויציע פתרון למשימות שלך.







