คู่มือการแก้ไขปัญหาแพ็กเกจ ServBay MariaDB/MySQL
ภาพรวม
MariaDB และ MySQL คือระบบจัดการฐานข้อมูลเชิงสัมพันธ์โอเพ่นซอร์สชั้นนำที่ได้รับความนิยมในการพัฒนาเว็บและแอปพลิเคชันธุรกิจต่าง ๆ ServBay ได้รวมแพ็กเกจหลากหลายเวอร์ชันของ MariaDB/MySQL สำหรับผู้ใช้งาน macOS เพื่อรองรับการพัฒนาและทดสอบในเครื่องอย่างง่าย สะดวก และมีประสิทธิภาพ แม้ซอฟต์แวร์เหล่านี้จะมีชื่อเสียงในด้านความเสถียร ทว่าในกระบวนการใช้งานหรือพัฒนา คุณยังอาจประสบปัญหาเริ่มต้นระบบไม่ได้ การเชื่อมต่อล้มเหลว หรือประสิทธิภาพลดลงได้
คู่มือนี้จัดทำขึ้นเพื่อแนะนำผู้ใช้ ServBay ในการวิเคราะห์และแก้ไขปัญหา MariaDB/MySQL ที่พบบ่อย โดยจะกล่าวถึงแนวทางเบื้องต้น วิธีวินิจฉัย และแนวทางแก้ไข รวมถึงรายละเอียดเกี่ยวกับเส้นทางไฟล์และคำสั่งเฉพาะในสภาพแวดล้อมของ ServBay
ข้อควรระวังสำคัญ:
- โปรดสำรองฐานข้อมูลของคุณก่อนดำเนินการปรับเปลี่ยนใด ๆ ที่อาจมีผลกับข้อมูลหรือการตั้งค่า! ServBay มีฟีเจอร์สำรองข้อมูลในตัวที่ขอแนะนำให้ใช้และทำอย่างสม่ำเสมอ
- ตัวอย่างคำสั่งและเส้นทางในคู่มือนี้มีการระบุเวอร์ชัน (เช่น
11.3
หรือ11.5
) โปรดแทนที่ด้วยเวอร์ชันที่คุณใช้งานจริงบน ServBay คุณสามารถดูเวอร์ชันที่ติดตั้งและเปิดใช้งานได้จากหน้าจอหลักของแอป ServBay - คำสั่งที่มี
<username>
,<database>
,<your_backup.sql>
เป็นเพียงตัวอย่าง ให้แทนที่ด้วยชื่อผู้ใช้ ชื่อฐานข้อมูล หรือชื่อไฟล์ของคุณเอง - คู่มือนี้เขียนขึ้นโดยอ้างอิงระบบ macOS
ขั้นตอนวินิจฉัยเบื้องต้น
ก่อนจะเจาะจงไปยังปัญหาเฉพาะ ควรดำเนินการตรวจสอบขั้นต้นดังนี้:
- ตรวจสอบสถานะแพ็กเกจ ServBay: เปิดแอป ServBay แล้วเช็คว่า MariaDB/MySQL เวอร์ชันที่คุณต้องการใช้งานได้เปิดไว้และแสดงสถานะ "กำลังทำงาน" หรือไม่ หรือจะใช้คำสั่งใน Terminal ดังนี้:bash
servbayctl status mariadb <version> # ตัวอย่าง ตรวจสอบสถานะ MariaDB 11.3: servbayctl status mariadb 11.3
1
2
3 - ตรวจสอบบันทึก (log) ของแอป ServBay: บางครั้งเมื่อมีข้อผิดพลาดระหว่างการเริ่มต้นหรือจัดการแพ็กเกจ แอป ServBay จะบันทึกข้อผิดพลาดไว้ คุณสามารถดูส่วน log ในแอป หรือเปิดไฟล์ log หลักของ ServBay
- ตรวจสอบ log ข้อผิดพลาดของ MariaDB/MySQL: ขั้นตอนสำคัญที่สุดเพื่อค้นหาสาเหตุของปัญหาเริ่มต้น/ไม่เสถียร เส้นทาง log โดยปกติคือ:bashควรอ่านข้อผิดพลาดที่ท้ายไฟล์ log อย่างละเอียดเพื่อค้นหาสาเหตุ
/Applications/ServBay/logs/mariadb/<version>/<version>.err # ตัวอย่าง ดู 50 บรรทัดล่าสุดของ log ข้อผิดพลาด MariaDB 11.3: tail -n 50 /Applications/ServBay/logs/mariadb/11.3/11.3.err
1
2
3
ปัญหาที่พบบ่อยและแนวทางแก้ไข
1. ข้อผิดพลาดการเชื่อมต่อ: SQLSTATE[HY000] [2002] No such file or directory
ข้อผิดพลาดนี้มักจะหมายถึง ไคลเอนต์ไม่สามารถเชื่อมต่อกับ MariaDB/MySQL ผ่านไฟล์ Unix socket ใน macOS, Unix socket เป็นวิธีการสื่อสารระหว่างโปรเซสในเครื่องเดียวกัน (local) ที่มีประสิทธิภาพสูงกว่าการเชื่อมต่อผ่าน TCP/IP เมื่อไคลเอนต์หรือเครื่องมือชี้ไปที่ไฟล์ socket ที่ไม่ตรงกับที่เซิร์ฟเวอร์กำหนดหรือไม่พบไฟล์ดังกล่าว ก็จะพบปัญหานี้
สาเหตุและแนวทางแก้ไข:
- แพ็กเกจ MariaDB/MySQL ยังไม่เริ่มทำงาน:
- ตรวจสอบสถานะใน ServBay หรือใช้คำสั่ง
servbayctl status mariadb <version>
- ถ้ายังไม่ทำงาน ให้เริ่มระบบด้วยคำสั่ง
servbayctl start mariadb <version>
และตรวจสอบไฟล์ log (.err
) หากยังมีปัญหา
- ตรวจสอบสถานะใน ServBay หรือใช้คำสั่ง
- เส้นทาง socket ไม่ถูกต้อง:
- เส้นทางที่ไคลเอนต์ระบุไม่ตรงกับ
socket
ที่กำหนดในไฟล์ตั้งค่า (my.cnf
) - เช็คค่า
socket
ในไฟล์/Applications/ServBay/etc/mariadb/<version>/my.cnf
- ต้องแน่ใจว่าไคลเอนต์หรือแอปพลิเคชันของคุณระบุเส้นทาง socket ที่ถูกต้อง ตามค่าดีฟอลต์ของ ServBay โดยทั่วไปจะอยู่ที่
/Applications/ServBay/tmp/
หรือ/tmp/
เช่น/Applications/ServBay/tmp/mysql.sock
หรือ/tmp/mysql.sock
- เส้นทางที่ไคลเอนต์ระบุไม่ตรงกับ
- ปัญหาการกำหนดค่าดีฟอลต์ของ ServBay:
- ตรวจสอบในเมนู "ตั้งค่า" -> "SQL เซิร์ฟเวอร์เริ่มต้น" ของ ServBay ว่าเลือกเวอร์ชันถูกต้องแล้ว เพราะบางเครื่องมือ (เช่นคำสั่ง
mysql
ที่ไม่ระบุ-S
หรือ-h
) จะเชื่อมต่อเฉพาะเซิร์ฟเวอร์ดีฟอลต์เท่านั้น
- ตรวจสอบในเมนู "ตั้งค่า" -> "SQL เซิร์ฟเวอร์เริ่มต้น" ของ ServBay ว่าเลือกเวอร์ชันถูกต้องแล้ว เพราะบางเครื่องมือ (เช่นคำสั่ง
- ปัญหาสิทธิ์ (Permission):
- ผู้ใช้ที่รัน MariaDB/MySQL หรือผู้ใช้ที่เชื่อมต่ออาจไม่มีสิทธิ์ในไดเรกทอรีหรือไฟล์ socket ServBay มักจะจัดการสิทธิ์ให้โดยอัตโนมัติ ถ้าไม่ได้แก้ไขสิทธิ์
/Applications/ServBay/tmp/
หรือ/tmp/
ด้วยตัวเอง
- ผู้ใช้ที่รัน MariaDB/MySQL หรือผู้ใช้ที่เชื่อมต่ออาจไม่มีสิทธิ์ในไดเรกทอรีหรือไฟล์ socket ServBay มักจะจัดการสิทธิ์ให้โดยอัตโนมัติ ถ้าไม่ได้แก้ไขสิทธิ์
ทางเลือก (บังคับใช้การเชื่อมต่อแบบเครือข่าย):
- ลองใช้ IP
127.0.0.1
แทนlocalhost
เพื่อบังคับให้เชื่อมต่อผ่าน TCP/IP แทน Unix socket ถ้าเชื่อมต่อผ่าน127.0.0.1
ได้ปกติ แสดงว่าสาเหตุอยู่ที่ socketbashmysql -u <username> -p -h 127.0.0.1 -P 3306
1
2. ข้อผิดพลาดการเชื่อมต่อ: ปัญหาเกี่ยวกับเครือข่าย (Connection refused
, Can't connect to MySQL server
)
ข้อผิดพลาดดังกล่าวมักเกิดเมื่อไคลเอนต์เชื่อมต่อฐานข้อมูล MariaDB/MySQL ที่ TCP/IP ไม่ได้
สาเหตุและแนวทางแก้ไข:
- แพ็กเกจ MariaDB/MySQL ยังไม่เริ่มทำงาน: (ตรวจสอบสถานะและ log ตามข้อก่อนหน้า)
- พอร์ตถูกใช้งาน:
- ตรวจสอบให้แน่ใจว่าพอร์ต 3306 (ค่าดีฟอลต์) ไม่ถูกโปรแกรมอื่นใช้งานอยู่
- ตรวจสอบโดยใช้:bash
lsof -i :3306 # หรือ netstat -anv | grep LISTEN | grep 3306
1
2
3 - หากพอร์ตโดนใช้งาน ให้หยุดโปรเซสที่ใช้พอร์ตนั้น หรือเปลี่ยนหมายเลขพอร์ตใน
/Applications/ServBay/etc/mariadb/<version>/my.cnf
แล้วรีสตาร์ท
- ไฟร์วอลล์บล็อกการเชื่อมต่อ:
- ตรวจสอบการตั้งค่าระบบ macOS -> เครือข่าย -> ไฟร์วอลล์
- อนุญาตโปรเซส
mysqld
ผ่านไฟร์วอลล์ อาจต้องแก้ไขเส้นทางตามเวอร์ชัน ServBay ของคุณ:bash# ตัวอย่างคำสั่ง กรุณาปรับเส้นทางตามจริง sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/ServBay/bin/mariadb/<version>/bin/mysqld sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /Applications/ServBay/bin/mariadb/<version>/bin/mysqld
1
2
3
- ปัญหาการตั้งค่า (
bind-address
):- ตรวจสอบ
bind-address
ในmy.cnf
ถ้าเป็น127.0.0.1
หรือlocalhost
จะรับแค่การเชื่อมต่อจากเครื่องเดียวกันเท่านั้น ถ้าต้องการให้เชื่อมต่อจากเครือข่ายภายนอก ให้ใช้0.0.0.0
หรือระบุ IP ที่ต้องการ แล้วตรวจสอบไฟร์วอลล์
- ตรวจสอบ
- ปัญหาชื่อโฮสต์
localhost
:- ตรวจสอบว่า
localhost
ถูกแก้ไขชื่อเป็น127.0.0.1
(IPv4) หรือ::1
(IPv6) ถูกต้อง - ใช้คำสั่ง
ping localhost
เพื่อดูผลลัพธ์ - ตรวจสอบ
/etc/hosts
ว่ายังมีรายการของlocalhost
อยู่ - ปิดใช้งานพร็อกซีซอฟต์แวร์ที่อาจรบกวนการเชื่อมต่อของ
localhost
/127.0.0.1
- ตรวจสอบว่า
3. แพ็กเกจ MariaDB/MySQL ไม่สามารถเริ่มต้นได้
สาเหตุและแนวทางแก้ไข:
- อ่าน log ข้อผิดพลาด (สำคัญที่สุด!): เปิด
/Applications/ServBay/logs/mariadb/<version>/<version>.err
เพื่อดูข้อความแจ้งข้อผิดพลาดขณะเปิดโปรแกรม Log จะช่วยชี้จุดที่เกิดปัญหา - ไฟล์ตั้งค่ามีปัญหา:
- ตรวจสอบ
/Applications/ServBay/etc/mariadb/<version>/my.cnf
ว่ามีไวยากรณ์ผิด พารามิเตอร์ไม่ถูก หรือระบุเส้นทางผิดหรือไม่ - ตรวจสอบไฟล์ตั้งค่าด้วยคำสั่ง (โปรดปรับเส้นทางตามเวอร์ชัน):bash
# ตัวอย่างคำสั่ง ปรับเส้นทาง mysqld ตามจริง /Applications/ServBay/bin/mariadb/<version>/bin/mysqld --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf --validate-config
1
2
- ตรวจสอบ
- พอร์ตถูกใช้งาน: (ตรวจสอบด้วย
lsof -i :<port>
หรือnetstat
) - พื้นที่ดิสก์ไม่พอ: ตรวจสอบโฟลเดอร์ข้อมูล (
/Applications/ServBay/db/mariadb/<version>/
) หรือ log (/Applications/ServBay/logs/mariadb/<version>/
) ว่ามีพื้นที่เหลือพอหรือไม่ - ปัญหาสิทธิ์:
- ตรวจสอบว่ายูสเซอร์ที่ใช้รันฐานข้อมูล (เช่น
_mysql
) มีสิทธิ์กับไฟล์ตั้งค่า โฟลเดอร์ข้อมูล หรือ log ตามที่จำเป็น - ตัวอย่างการตรวจสอบสิทธิ์:bash
ls -ld /Applications/ServBay/db/mariadb/<version> ls -l /Applications/ServBay/etc/mariadb/<version>/my.cnf ls -ld /Applications/ServBay/logs/mariadb/<version>
1
2
3
- ตรวจสอบว่ายูสเซอร์ที่ใช้รันฐานข้อมูล (เช่น
- ไฟล์ข้อมูลเสียหาย: (ดูหัวข้อ "ฐานข้อมูลล่มหรือข้อมูลเสียหาย" ด้านล่าง)
หลังแก้ไขแล้ว:
- ลองรีสตาร์ทแพ็กเกจ:
servbayctl restart mariadb <version>
4. ปัญหาสิทธิ์หรือการยืนยันตัวตนของผู้ใช้
หากเชื่อมต่อได้แล้วแต่ไม่สามารถเข้าถึงหรือดำเนินการบางอย่างในฐานข้อมูลได้ เช่น ข้อผิดพลาด Access denied
สาเหตุและแนวทางแก้ไข:
- ชื่อผู้ใช้หรือรหัสผ่านผิด: ตรวจสอบความถูกต้องของชื่อผู้ใช้และรหัสผ่าน ServBay มีฟีเจอร์ให้รีเซ็ตรหัสผ่าน root ได้ง่าย
- ข้อจำกัดของโฮสต์: บัญชีผู้ใช้อาจถูกจำกัดให้เชื่อมต่อได้เฉพาะจากโฮสต์ที่กำหนด เช่น
'<username>'@'localhost'
แตกต่างจาก'<username>'@'127.0.0.1'
ค่า'%'
อนุญาตทุกโฮสต์ - สิทธิ์ไม่พอ: อาจไม่มีสิทธิ์เข้าถึงฐานข้อมูลเป้าหมายหรือดำเนินการบางอย่าง (เช่น SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ฯลฯ)
- ตรวจสอบสิทธิ์ผู้ใช้:
- เข้าสู่ระบบ MariaDB/MySQL ด้วยผู้ใช้ที่มีสิทธิ์สูง (เช่น root):bash
mysql -u root -p
1 - ดูรายละเอียดสิทธิ์ของผู้ใช้:sql
SHOW GRANTS FOR '<username>'@'<hostname>'; -- ตัวอย่าง ดูสิทธิ์ของ 'webapp' จาก 'localhost': SHOW GRANTS FOR 'webapp'@'localhost'; -- ดูสิทธิ์ของ 'admin' จากทุกโฮสต์: SHOW GRANTS FOR 'admin'@'%';
1
2
3
4
5 - แก้ไขสิทธิ์ด้วย
GRANT
/REVOKE
หรือสร้างผู้ใช้ใหม่ที่มีสิทธิ์ต้องการ
- เข้าสู่ระบบ MariaDB/MySQL ด้วยผู้ใช้ที่มีสิทธิ์สูง (เช่น root):
5. ปัญหาด้านประสิทธิภาพ
เมื่อระบบฐานข้อมูลช้าลงอาจส่งผลต่อความเร็วของแอปพลิเคชันทั้งหมด
สาเหตุและแนวทางแก้ไข:
- คำสั่ง SQL ช้า: หากคำสั่งดึงข้อมูลไม่มีประสิทธิภาพ ไม่มีอินเด็กซ์ หรือ execution plan ไม่ดี
- เปิดใช้งาน slow query log: ตั้งค่า
slow_query_log = 1
และlong_query_time = 1
ในmy.cnf
พร้อมกับslow_query_log_file
รีสตาร์ทแล้ววิเคราะห์ log เพื่อดู query ที่ใช้เวลานาน - ใช้
EXPLAIN
: วิเคราะห์คำสั่ง SQL ที่สงสัยว่าช้า ดูว่าใช้ index หรือไม่ สแกนกี่แถว ฯลฯsqlEXPLAIN SELECT * FROM your_table_name WHERE column_name = 'value';
1 - ปรับปรุง query: เขียนคำสั่งใหม่ให้มีประสิทธิภาพ หลีกเลี่ยง
SELECT *
หรือการใช้ฟังก์ชันใน WHERE, ตรวจสอบให้ใช้ index
- เปิดใช้งาน slow query log: ตั้งค่า
- อินเด็กซ์ไม่มีหรือไม่เหมาะสม: ควรสร้าง index ใน column ที่ใช้ใน WHERE, ORDER BY, GROUP BY บ่อย ๆ
- วิเคราะห์เพื่อสร้าง index ที่เหมาะสม:sqlหมายเหตุ: การเพิ่ม index อาจเพิ่มภาระขณะเขียนข้อมูลและใช้พื้นที่ดิสก์มากขึ้น
CREATE INDEX idx_column_name ON your_table_name(column_name);
1
- วิเคราะห์เพื่อสร้าง index ที่เหมาะสม:
- ตั้งค่าค่า cache ไม่เหมาะสม: ค่า
innodb_buffer_pool_size
,key_buffer_size
ฯลฯ ในmy.cnf
เล็ก/ใหญ่เกินไป- ปรับ
my.cnf
ให้เหมาะกับขนาดแรมและการใช้งาน เช่น:iniเปลี่ยนค่าแล้วต้องรีสตาร์ท MariaDB/MySQL ให้มีผล[mysqld] # ตัวอย่าง ปรับตามความต้องการและขนาดแรม innodb_buffer_pool_size = 2G # หากใช้ MyISAM มาก: # key_buffer_size = 256M
1
2
3
4
5
- ปรับ
- ฮาร์ดแวร์มีคอขวด: CPU, RAM, หรือ Disk I/O สูง ใช้ Activity Monitor,
top
หรือhtop
วิเคราะห์ทรัพยากรขณะใช้งาน
6. ฐานข้อมูลล่มหรือข้อมูลเสียหาย
เมื่อฐานข้อมูลไม่สามารถเริ่ม, ล่มบ่อย, หรือเกิดข้อผิดพลาดเมื่อเข้าถึงข้อมูล อาจเกิดจากไฟล์ข้อมูลเสียหาย
สาเหตุและแนวทางแก้ไข:
- ตรวจสอบ log ข้อผิดพลาด: เปิด
/Applications/ServBay/logs/mariadb/<version>/<version>.err
เพื่อดูรายละเอียดข้อผิดพลาด เช่น ข้อผิดพลาดของ InnoDB, ไฟล์ระบบ, หรือฮาร์ดแวร์ - ฮาร์ดแวร์เสีย: ปัญหาดิสก์หรือ RAM ควรตรวจสอบ Console.app หรือเครื่องมือวิเคราะห์ฮาร์ดแวร์
- ซอฟต์แวร์ขัดแย้งหรือบั๊ก: อาจเกิดจากบั๊กใน MariaDB/MySQL เวอร์ชันนั้น หรือโปรแกรมอื่นขัดแย้ง
- ไฟล์ตั้งค่าผิด: ตั้งค่า
my.cnf
ที่ไม่เหมาะสมอาจทำให้ฐานข้อมูลไม่เสถียรหรือล่มได้ - ปิดหรือหยุด MariaDB/MySQL อย่างผิดวิธี: เช่น ปิด ServBay ทันทีหรือ kill โปรเซสตรง ๆ อาจทำให้ไฟล์ข้อมูลผิดปกติ
แนวทางแก้ไข:
- ลองรีสตาร์ทแบบปลอดภัย: เริ่มใหม่ด้วยคำสั่ง
servbayctl restart mariadb <version>
หรือจากแอป ServBay - ใช้
mysqlcheck
เพื่อตรวจสอบและซ่อมแซมตาราง: (เหมาะกับ MyISAM):bashหมายเหตุ:mysqlcheck --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u root -p --check --all-databases # สำหรับ MyISAM ลอง auto repair # mysqlcheck --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u root -p --auto-repair --check --all-databases
1
2
3--auto-repair
ใช้ได้ดีสำหรับ MyISAM สำหรับ InnoDB การซ่อมแซมอาจซับซ้อนกว่า (ดูหัวข้อ InnoDB force recovery) - ใช้
innodb_force_recovery
(โหมดบังคับกู้ InnoDB): อันตรายและควรเฉพาะกรณีที่ซีเรียสเท่านั้น อาจทำให้ข้อมูลบางส่วนเสียหาย ใช้เพื่อให้ระบบเปิดชั่วคราวเพื่อ backup ข้อมูลสำคัญ- สำรองโฟลเดอร์ข้อมูลก่อน (แม้จะเสียหาย): ก็อปปี้
/Applications/ServBay/db/mariadb/<version>/
ออกมาก่อน - แก้ไขไฟล์
/Applications/ServBay/etc/mariadb/<version>/my.cnf
- เพิ่มบรรทัด
innodb_force_recovery = N
(N = 1 ถึง 6 ลองทีละค่าตั้งแต่ 1) - ลองสตาร์ทใหม่:
servbayctl start mariadb <version>
- ถ้าเข้าได้ (โหมดอ่านอย่างเดียวหรือจำกัด) ให้ dump ข้อมูลทันทีด้วย
mysqldump
bashตรวจสอบไฟล์ backup ว่าใช้งานได้และมีขนาดสมเหตุสมผลmysqldump --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u root -p --all-databases --routines --triggers --events > /path/to/your_emergency_backup.sql
1 - เมื่อ backup เสร็จหยุด process:
servbayctl stop mariadb <version>
- นำบรรทัด
innodb_force_recovery = N
ออกจาก my.cnf - กู้ข้อมูล: โดยปกติเริ่มใหม่ด้วยโฟลเดอร์ข้อมูลว่าง แล้วนำข้อมูลที่ export เข้าใหม่
- สำรองโฟลเดอร์ข้อมูลก่อน (แม้จะเสียหาย): ก็อปปี้
- กู้คืนจาก backup: หากไม่สามารถซ่อมหรือข้อมูลไม่สมบูรณ์ ควรใช้ไฟล์สำรองซึ่งปกติจะอยู่ใน
/Applications/ServBay/backup/mariadb/<version>/
- ตัวอย่างการกู้ (กรณีต้อง restore ไปที่
<target_database_name>
):bashหมายเหตุ:# สร้างฐานข้อมูลก่อน (ถ้ายังไม่มี) # mysql --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u root -p -e "CREATE DATABASE <target_database_name>;" # สั่ง restore mysql --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u <username> -p <target_database_name> < /Applications/ServBay/backup/mariadb/<version>/<your_backup.sql>
1
2
3
4
5<version>
ให้แทนด้วย MariaDB/MySQL ที่ต้องการ
- ตัวอย่างการกู้ (กรณีต้อง restore ไปที่
7. ปัญหาในการสำรองและกู้คืนข้อมูล
เมื่อใช้ฟีเจอร์สำรองของ ServBay หรือสั่ง mysqldump
ด้วยตนเอง อาจพบปัญหาต่าง ๆ
สาเหตุและแนวทางแก้ไข:
- ไฟล์สำรองไม่สมบูรณ์หรือไฟล์เสียหาย:
- ตรวจสอบขนาดไฟล์ (
ls -lh /path/to/your_backup.sql
) และเปิดด้วย editor หรือless
ว่าข้อมูลดูสมบูรณ์หรือไม่ - ถ้าสำรองด้วย
mysqldump
ให้ตรวจสอบว่าไม่มีข้อผิดพลาดใน terminal หรือถ้าสำรองด้วย ServBay ก็ควรอ่าน log ของแอปเสมอ
- ตรวจสอบขนาดไฟล์ (
- คำสั่ง restore ผิดพลาด:
- ใส่ชื่อผู้ใช้, รหัสผ่าน หรือชื่อฐานข้อมูลผิด
- ผู้ใช้ไม่มีสิทธิ์ import
- ถ้า backup จากเวอร์ชันต่างกัน (MySQL → MariaDB หรือกลับกัน) อาจมีบาง SQL statement ไม่รองรับ
- ปัญหา Foreign Key เมื่อนำเข้าข้อมูล: ลำดับนำเข้าตารางอาจทำให้ตรวจสอบ Foreign Key ล้มเหลว สามารถปิด foreign key check ชั่วคราวsqlคำเตือน: การปิดตรวจสอบ foreign key อาจทำให้ข้อมูลไม่สัมพันธ์, ใช้เฉพาะตอน restore เท่านั้น
-- ก่อน restore SET foreign_key_checks = 0; -- restore ด้วย source: source /path/to/your_backup.sql; -- หรือใช้ mysql ... < /path/to/your_backup.sql -- เปิด foreign_key_checks หลัง restore SET foreign_key_checks = 1;
1
2
3
4
5
6
7
8 - ปัญหา charset/collation: charset/collation ของไฟล์ backup ไม่ตรงกับฐานข้อมูลปลายทาง อาจก่อให้เกิดข้อผิดพลาดหรือข้อมูลผิดเพี้ยน ตรวจสอบให้ทั้งต้นทางและปลายทางสอดคล้อง (เช่น
utf8mb4
)
ตัวอย่างการกู้คืน (command line):
bash
# กรณี backup สำหรับฐานข้อมูลเฉพาะ
# สร้าง database ก่อน (ถ้ายังไม่มี)
# mysql --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u root -p -e "CREATE DATABASE <target_database_name>;"
# restore ด้วยชื่อผู้ใช้ รหัสผ่าน และชื่อฐานข้อมูลที่ถูกต้อง
mysql --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u <username> -p <target_database_name> < /Applications/ServBay/backup/mariadb/<version>/<your_backup.sql>
# ถ้า backup สำหรับทุก database (--all-databases) ไม่ต้องระบุชื่อฐานข้อมูล
# mysql --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u <username> -p < /Applications/ServBay/backup/mariadb/<version>/<your_backup.sql>
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
หมายเหตุ: <version>
ให้แทนด้วยเวอร์ชันจริง ServBay จะสร้างไฟล์ backup ที่ง่ายต่อการ restore เสมอและมีตัวเลือกบน UI
8. ปัญหาเฉพาะเวอร์ชัน: MariaDB 11.5.1 InnoDB สตาร์ทไม่ผ่าน (ib_logfile0 was not found
/ Missing FILE_CHECKPOINT
)
MariaDB 11.5.1 มีบั๊กสำคัญที่ทำให้ InnoDB ไม่สามารถเริ่มต้นหรือกู้คืนจาก log ได้ ทำให้ข้อมูลใช้ไม่ได้
ลักษณะ log ข้อผิดพลาด:
ใน /Applications/ServBay/logs/mariadb/11.5/11.5.err
อาจพบข้อความ:
[ERROR] InnoDB: File /Applications/ServBay/db/mariadb/11.5/ib_logfile0 was not found
[ERROR] InnoDB: Plugin initialization aborted with error Generic error
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
1
2
3
4
2
3
4
หรือ
[ERROR] InnoDB: Missing FILE_CHECKPOINT(xxxxx) at xxxxx
[ERROR] InnoDB: Log scan aborted at LSN xxxxx
[ERROR] InnoDB: Plugin initialization aborted with error Generic error
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
1
2
3
4
5
2
3
4
5
ชี้ว่า InnoDB หาทางเข้า log file ไม่เจอจนไม่สามารถเริ่มต้น engine ได้
แนวทางแก้ไข (ต้องอาศัยการย้ายข้อมูล - โปรด backup ก่อน):
เป็นบั๊กที่ไม่สามารถแก้ไขได้ด้วยวิธีปกติ วิธีที่ปลอดภัยคือพยายาม export ข้อมูลออกให้หมด แล้วนำไป import ลง MariaDB เวอร์ชันที่เสถียรกว่า
- ลองใช้ innodb_force_recovery (ความเสี่ยงสูง!):
- แก้ไข
/Applications/ServBay/etc/mariadb/11.5/my.cnf
- เติมบรรทัด
innodb_force_recovery = 6
หลัง[mysqld]
- สตาร์ท MariaDB 11.5 ผ่าน ServBay UI หรือ
servbayctl start mariadb 11.5
- ถ้าสตาร์ทได้ (แม้ว่าทำงานแบบจำกัด) ให้รีบใช้
mysqldump
สำรองข้อมูลทันที โดยถือเป็นโอกาสเดียวที่ยังกู้ข้อมูลได้bashตรวจสอบไฟล์ backup ว่าใช้งานได้และขนาดเหมาะสมmysqldump --defaults-file=/Applications/ServBay/etc/mariadb/11.5/my.cnf -u root -p --all-databases --routines --triggers --events > /Applications/ServBay/backup/mariadb/11.5/mariadb_11.5_emergency_backup.sql
1
- แก้ไข
- หยุดและจัดการ data directory ของเวอร์ชันที่มีปัญหา:
- หยุด MariaDB 11.5:
servbayctl stop mariadb 11.5
- แก้ไข my.cnf ลบหรือคอมเมนต์บรรทัด
innodb_force_recovery = 6
- หยุด MariaDB 11.5: