คู่มือการแก้ไขปัญหาแพ็คเกจ ServBay MariaDB/MySQL
ภาพรวม
MariaDB และ MySQL คือระบบบริหารจัดการฐานข้อมูลเชิงสัมพันธ์แบบโอเพ่นซอร์สที่ได้รับความนิยมสูง นำไปใช้กันอย่างแพร่หลายในเว็บแอปพลิเคชันและธุรกิจหลากหลายรูปแบบ ServBay ได้รวมแพ็คเกจ MariaDB/MySQL หลายเวอร์ชันไว้สำหรับ macOS และ Windows เพื่อให้ developer สร้างสภาพแวดล้อมฐานข้อมูล local ได้ง่ายและทรงประสิทธิภาพ แม้ว่าทั้งสองระบบจะขึ้นชื่อเรื่องความเสถียร แต่ก็ยังอาจพบปัญหา อาทิ แพ็คเกจไม่สามารถเริ่มทำงาน เชื่อมต่อไม่ได้ หรือประสิทธิภาพตกขณะใช้งาน
คู่มือนี้จัดทำขึ้นเพื่อช่วยผู้ใช้ ServBay วิเคราะห์และแก้ไขปัญหาที่พบบ่อยของ MariaDB/MySQL ในระดับแพ็คเกจ โดยแบ่งเป็นหมวดหมู่คำถามที่พบบ่อย วิธีตรวจสอบเบื้องต้น และวิธีแก้ไขเฉพาะ พร้อมระบุพาธและคำสั่งที่เกี่ยวข้องกับสภาพแวดล้อม ServBay
ข้อควรระวังสำคัญ:
- ก่อนทำรายการใด ๆ ที่อาจเปลี่ยนแปลงข้อมูลหรือการตั้งค่า กรุณาสำรองข้อมูลฐานข้อมูลของคุณก่อนทุกครั้ง! ServBay มีระบบสำรองข้อมูลในตัว แนะนำให้ทำเป็นประจำ
- ตัวอย่างคำสั่งและพาธในคู่มือได้ระบุ version เช่น
11.3
หรือ11.5
กรุณาเปลี่ยนให้ตรงกับเวอร์ชันที่คุณใช้งาน สามารถตรวจสอบได้จากหน้าแอป ServBay ที่แสดงเวอร์ชันที่ติดตั้งและเปิดใช้งาน - ในตัวอย่างคำสั่ง,
<username>
,<database>
,<your_backup.sql>
เป็นค่าตัวแปร กรุณาแทนด้วยชื่อผู้ใช้ ฐานข้อมูล และไฟล์ backup ตามจริง - คู่มือรองรับทั้ง macOS และ Windows โดยจะระบุคำสั่งหรือพาธเฉพาะสำหรับแต่ละระบบในแต่ละหัวข้อ
กระบวนการตรวจสอบเบื้องต้น (General Diagnostics)
ก่อนเจาะจงแก้ไขปัญหาเฉพาะ ขอแนะนำให้ดำเนินการตรวจสอบเบื้องต้นดังนี้
ตรวจสอบสถานะแพ็คเกจ ServBay: เปิดแอป ServBay และดูว่า MariaDB/MySQL เวอร์ชันที่จะใช้งานได้เปิดและแสดงสถานะ “กำลังทำงาน” หรือไม่ สามารถใช้ command line เพื่อตรวจสอบเช่นกัน:
bashservbayctl status mariadb <version> # ตัวอย่าง ตรวจสอบสถานะ MariaDB 11.3: servbayctl status mariadb 11.3
1
2
3เช็คบันทึกแอป ServBay: แอปพลิเคชัน ServBay จะมีบันทึกข้อผิดพลาดขณะสั่งเริ่ม/จัดการแพ็คเกจ สามารถดูได้ที่หน้าแอปบริเวณ log หรือเข้าถึงไฟล์บันทึกหลัก
ตรวจสอบไฟล์ error log ของ MariaDB/MySQL: ข้อมูลข้อผิดพลาดใน log เป็นข้อมูลสำคัญเมื่อแพ็คเกจเริ่มต้นไม่ได้หรือมี error ขณะทำงาน ตำแหน่งไฟล์ log โดยปกติคือ:
macOS:
bash/Applications/ServBay/logs/mariadb/<version>/<version>.err # ตัวอย่าง ดู log 50 บรรทัดล่าสุด MariaDB 11.3: tail -n 50 /Applications/ServBay/logs/mariadb/11.3/11.3.err
1
2
3Windows:
cmdC:\ServBay\logs\mariadb\<version>\<version>.err # ตัวอย่าง ดู log 50 บรรทัดล่าสุด MariaDB 11.3: powershell "Get-Content -Path 'C:\ServBay\logs\mariadb\11.3\11.3.err' -Tail 50"
1
2
3อ่านส่วนท้ายของไฟล์ log อย่างละเอียด เพราะมักจะแสดงสาเหตุที่แท้จริงของปัญหา
ปัญหาที่พบได้บ่อยและแนวทางแก้ไข
1. ข้อผิดพลาดขณะเชื่อมต่อ: SQLSTATE[HY000] [2002] No such file or directory
ปัญหานี้โดยมากเกิดขึ้นเมื่อลูกค้า (Client) ไม่สามารถเชื่อมต่อกับ MariaDB/MySQL ผ่านไฟล์ Unix socket บน macOS Unix socket เป็นวิธีการสื่อสารระหว่าง process บนเครื่องเดียวกัน ประหยัดทรัพยากรมากกว่าการเชื่อมต่อผ่าน TCP/IP หากเครื่องมือหรือแอปพยายามเชื่อมต่อแต่หาไฟล์ socket ไม่เจอ ก็จะเกิด error นี้
สาเหตุและวิธีแก้ไขที่เป็นไปได้:
- แพ็คเกจ MariaDB/MySQL ไม่ทำงาน:
- ตรวจสอบผ่านหน้าจอ ServBay หรือใช้คำสั่ง
servbayctl status mariadb <version>
ว่าแพ็คเกจกำลังทำงาน - หากไม่ทำงาน ลองสั่ง start ด้วยคำสั่ง
servbayctl start mariadb <version>
แล้วตรวจสอบไฟล์ log (.err
) หาสาเหตุ
- ตรวจสอบผ่านหน้าจอ ServBay หรือใช้คำสั่ง
- เส้นทางไฟล์ socket ไม่ตรง (macOS/Linux เท่านั้น):
- ตรวจสอบว่าเส้นทาง socket ที่ client ใช้งานตรงกับที่กำหนดในไฟล์คอนฟิก
my.cnf
- macOS: ดูการตั้งค่า parameter
socket
ในไฟล์/Applications/ServBay/etc/mariadb/<version>/my.cnf
- Windows: ไม่ใช้ Unix socket โดยใช้ TCP/IP หรือ named pipe แทน
- macOS: ตรวจสอบให้แน่ใจว่าโปรแกรมหรือ client ระบุเส้นทาง socket ตรงกับที่ ServBay ใช้งาน (เช่น
/Applications/ServBay/tmp/mysql.sock
หรือ/tmp/mysql.sock
)
- ตรวจสอบว่าเส้นทาง socket ที่ client ใช้งานตรงกับที่กำหนดในไฟล์คอนฟิก
- ปัญหาค่าตั้งต้นของ ServBay:
- เข้าไปที่ “การตั้งค่า” -> “SQL Server ตั้งต้น” เลือกเวอร์ชัน MariaDB/MySQL ให้ตรงกับที่จะใช้งาน บาง client จะเชื่อมต่อกับเวอร์ชัน default เมื่อไม่ได้ระบุ
-S
หรือ-h
- เข้าไปที่ “การตั้งค่า” -> “SQL Server ตั้งต้น” เลือกเวอร์ชัน MariaDB/MySQL ให้ตรงกับที่จะใช้งาน บาง client จะเชื่อมต่อกับเวอร์ชัน default เมื่อไม่ได้ระบุ
- สิทธิ์ไม่เพียงพอ:
- macOS: user ที่รัน process MariaDB/MySQL ไม่มีสิทธิ์เขียนหรืออ่านไฟล์ socket หรือ directory ที่เกี่ยวข้อง หากเคยปรับสิทธิ์ของ
/Applications/ServBay/tmp/
หรือ/tmp/
อาจทำให้เกิดปัญหา - Windows: ตรวจสอบว่าบัญชีผู้ใช้งานสามารถสร้าง named pipe หรือฟังที่ port ตามที่กำหนด
- macOS: user ที่รัน process MariaDB/MySQL ไม่มีสิทธิ์เขียนหรืออ่านไฟล์ socket หรือ directory ที่เกี่ยวข้อง หากเคยปรับสิทธิ์ของ
ทางเลือก (บังคับเชื่อมต่อผ่าน TCP/IP):
- ลองเชื่อมต่อฐานข้อมูลโดยใช้ IP
127.0.0.1
แทนlocalhost
เพื่อบังคับเชื่อมต่อผ่าน TCP/IP หากเชื่อมต่อได้ ปัญหาแน่นอนว่ามาจาก socketbashmysql -u <username> -p -h 127.0.0.1 -P 3306
1
2. ข้อผิดพลาดเชื่อมต่อ: ด้าน network (Connection refused
, Can't connect to MySQL server
)
ข้อผิดพลาดประเภทนี้หมายถึงลูกค้า (Client) ไม่สามารถเชื่อมต่อ MariaDB/MySQL ผ่าน TCP/IP ได้
สาเหตุและวิธีแก้ไขที่เป็นไปได้:
แพ็คเกจ MariaDB/MySQL ไม่ทำงาน: (เหมือนเดิม ดูสถานะและไฟล์
.err
)port ถูกใช้งาน:
- ตรวจสอบว่า port ที่ MariaDB/MySQL ใช้งาน (ปกติ 3306) ไม่ถูกโปรแกรมอื่นจับจอง
macOS:
bashlsof -i :3306 # หรือ netstat -anv | grep LISTEN | grep 3306
1
2
3Windows:
cmdnetstat -an | findstr :3306 # ใช้ PowerShell ก็ได้ Get-NetTCPConnection -LocalPort 3306
1
2
3ถ้า port ถูกใช้งาน ต้องหยุด process ที่ใช้ port นั้น หรือแก้ไขค่าพอร์ตใน
my.cnf
แล้ว restart- macOS:
/Applications/ServBay/etc/mariadb/<version>/my.cnf
- Windows:
C:\ServBay\etc\mariadb\<version>\my.cnf
Firewall ขวางการเชื่อมต่อ:
macOS:
- เข้าไปที่การตั้งค่าระบบ > เครือข่าย > Firewall
- ลองอนุญาต process
mysqld
ให้ผ่าน firewall: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
Windows:
- ตรวจสอบการตั้งค่า Windows Defender Firewall หรือ firewall อื่น ๆ
- สามารถเพิ่ม rule เพื่ออนุญาตไฟล์หรือ port:cmd
# อนุญาตโปรแกรมเฉพาะผ่าน firewall netsh advfirewall firewall add rule name="ServBay MariaDB" dir=in action=allow program="C:\ServBay\bin\mariadb\<version>\bin\mysqld.exe"
1
2
ปัญหาคอนฟิก (
bind-address
):- ใน
my.cnf
parameterbind-address
จะกำหนดว่าจะอนุญาตเชื่อมต่อจาก IP ใด ถ้าเป็น127.0.0.1
หรือlocalhost
จะรับแค่ในเครื่อง ต้องการรับจากเครื่องอื่นให้ตั้งเป็น0.0.0.0
หรือ IP ที่ต้องการ พร้อมปรับ firewall ด้วย
- ใน
ปัญหาการแก้ไข host (
localhost
):- ตรวจสอบว่า
localhost
แปลความหมายถูกต้องเป็น127.0.0.1
(IPv4) หรือ::1
(IPv6)
macOS:
bashping localhost # ตรวจสอบไฟล์ hosts cat /etc/hosts
1
2
3Windows:
cmdping localhost # ตรวจสอบ hosts type C:\Windows\System32\drivers\etc\hosts
1
2
3ตรวจสอบว่า hosts มีบรรทัดของ
localhost
ถูกต้อง หากมี proxy ในเครื่องก็ควรปิดก่อน เพราะบางครั้ง proxy จะกวนการเชื่อมต่อแบบ local- ตรวจสอบว่า
3. MariaDB/MySQL ไม่สามารถเริ่มต้นได้
สาเหตุและวิธีแก้ไขที่เป็นไปได้:
ตรวจสอบ error log (สำคัญที่สุด!): ดูไฟล์ log เพื่อดูสาเหตุที่เริ่มต้นไม่ได้
- macOS:
/Applications/ServBay/logs/mariadb/<version>/<version>.err
- Windows:
C:\ServBay\logs\mariadb\<version>\<version>.err
- macOS:
ไฟล์ config (
my.cnf
) มีข้อผิดพลาด: อาจเป็นไวยากรณ์ผิด, parameter ไม่ถูกต้อง, path ไม่ถูกต้อง ฯลฯตำแหน่งไฟล์ config:
- macOS:
/Applications/ServBay/etc/mariadb/<version>/my.cnf
- Windows:
C:\ServBay\etc\mariadb\<version>\my.cnf
ตรวจสอบ syntax ในไฟล์ config:
bash# macOS /Applications/ServBay/bin/mariadb/<version>/bin/mysqld --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf --validate-config # Windows C:\ServBay\bin\mariadb\<version>\bin\mysqld.exe --defaults-file=C:\ServBay\etc\mariadb\<version>\my.cnf --validate-config
1
2
3
4
5- macOS:
port ถูกใช้งาน: (เหมือนข้างต้น, ใช้
lsof -i :<port>
หรือnetstat
)พื้นที่ดิสก์ไม่พอ: ดาต้าดิเรกทอรี่และ log directory อาจไม่มีเนื้อที่พอ
ตำแหน่ง directory:
- macOS: ดาต้าดิเรกทอรี่
/Applications/ServBay/db/mariadb/<version>/
, log directory/Applications/ServBay/logs/mariadb/<version>/
- Windows: ดาต้าดิเรกทอรี่
C:\ServBay\db\mariadb\<version>\
, log directoryC:\ServBay\logs\mariadb\<version>\
- macOS: ดาต้าดิเรกทอรี่
สิทธิ์การเข้าถึงผิดพลาด: user ที่รัน MariaDB/MySQL ไม่มีสิทธิ์อ่านไฟล์ config/เขียนข้อมูล/ไฟล์ log ServBay จะตั้งค่าพวกนี้ให้อัตโนมัติ แต่หากมีการปรับ manual อาจเกิดปัญหา
macOS (สิทธิ์):
bashls -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ตรวจสอบว่า user (เช่น
_mysql
) มีสิทธิ์ read, write, execute ครบWindows (สิทธิ์): ดูจาก file explorer ว่า ServBay account มีสิทธิ์ read/write directory ที่เกี่ยวข้อง
ไฟล์ข้อมูลเสียหาย: (ดูหัวข้อ "ฐานข้อมูลเสียหายหรือพัง" ด้านล่าง)
หลังแก้ไขแล้ว:
- สั่ง restart ใหม่:
servbayctl restart mariadb <version>
4. ปัญหาสิทธิ์ผู้ใช้หรือ authentication
แม้เชื่อมต่อ database ได้ อาจพบ error Access denied
ด้วยเหตุสิทธิ์/รหัสผ่านไม่ถูกต้อง
สาเหตุและวิธีแก้ไขที่เป็นไปได้:
- ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง: เช็คว่าค่า username/password ที่เชื่อมต่อถูกต้อง ServBay มีฟังก์ชัน reset รหัสผ่าน root
- ข้อจำกัดด้าน host: สิทธิ์อาจอนุญาตเฉพาะจาก hostname เช่น
'<username>'@'localhost'
หรือ'admin'@'%'
(ทุก host) - สิทธิ์ไม่เพียงพอ: user อาจไม่มีสิทธิ์เข้าถึง database หรือ query ตามต้องการ
- วิธีตรวจสอบสิทธิ์:
- login ด้วย root:bash
mysql -u root -p
1 - ใน SQL command line, ตรวจสอบการมอบสิทธิ์:sql
SHOW GRANTS FOR '<username>'@'<hostname>'; -- ตัวอย่าง: SHOW GRANTS FOR 'webapp'@'localhost'; SHOW GRANTS FOR 'admin'@'%';
1
2
3
4 - ถ้าต้องการ ให้ใช้คำสั่ง
GRANT
และREVOKE
ปรับสิทธิ์ หรือสร้าง user ใหม่และมอบสิทธิ์ตามต้องการ
- login ด้วย root:
5. ปัญหาด้านประสิทธิภาพ
ประสิทธิภาพฐานข้อมูลตก อาจทำให้แอปพลิเคชันช้า
สาเหตุและวิธีแก้ไขที่เป็นไปได้:
- query ช้า: query ไม่มี index, หรือ execution plan ไม่ดี
- เปิด slow query log: ปรับ
my.cnf
ให้ใช้slow_query_log = 1
,long_query_time = 1
แล้วกำหนดไฟล์ log วิเคราะห์ query ที่ช้า - ใช้ EXPLAIN: คำสั่ง EXPLAIN ดู execution plan ได้sql
EXPLAIN SELECT * FROM your_table_name WHERE column_name = 'value';
1 - เขียน query ใหม่: จากผล EXPLAIN, แก้ query ให้ใช้งาน index, query อย่างมีประสิทธิภาพ
- เปิด slow query log: ปรับ
- ไม่มี index หรือ index ไม่เหมาะสม: ตรวจสอบโครงสร้าง table แล้วสร้าง index ตามคอลัมน์ที่ใช้บ่อย
- สร้าง indexsqlหมายเหตุ: index ช่วย query แต่เพิ่มภาระ write และกินพื้นที่ disk
CREATE INDEX idx_column_name ON your_table_name(column_name);
1
- สร้าง index
- cache ตั้งค่าไม่เหมาะสม: Parameter cache เช่น
innodb_buffer_pool_size
,key_buffer_size
อาจต้องปรับตามขนาด memory- ปรับปรุงไฟล์ my.cnf: กำหนดให้ cache เหมาะกับเครื่องและ workload โดยเฉพาะ
innodb_buffer_pool_size
เช่นini[mysqld] # ตัวอย่าง ต้องปรับตามจริง หน่วยเป็น byte หรือ K, M, G innodb_buffer_pool_size = 2G # กรณีใช้ MyISAM มาก: # key_buffer_size = 256M
1
2
3
4
5
- ปรับปรุงไฟล์ my.cnf: กำหนดให้ cache เหมาะกับเครื่องและ workload โดยเฉพาะ
- ทรัพยากรเครื่องจำกัด: CPU, RAM หรือ disk I/O เต็ม ตรวจสอบด้วย Activity Monitor หรือ
top
/htop
เพื่อดูจุด bottleneck
6. ฐานข้อมูลพังหรือข้อมูลเสียหาย
ฐานข้อมูลไม่สามารถเริ่มต้น, crash ขณะรัน, หรือข้อมูลผิดปกติ อาจเกิดจากข้อมูลเสีย
สาเหตุและวิธีแก้ไขที่เป็นไปได้:
- ตรวจสอบ error log: ดูสาเหตุในไฟล์ log เช่น InnoDB error, filesystem error หรือ hardware error
- macOS:
/Applications/ServBay/logs/mariadb/<version>/<version>.err
- Windows:
C:\ServBay\logs\mariadb\<version>\<version>.err
- macOS:
- ฮาร์ดแวร์เสีย: ดิสก์, RAM error อาจทำให้ข้อมูลพัง ตรวจสอบ system log หรือ diagnostic tool ในระบบ
- software conflict หรือ bug: MariaDB/MySQL บางรุ่นอาจมี bug หรือชนกับซอฟต์แวร์อื่น
- config ผิด: ตั้งค่าพารามิเตอร์ใน my.cnf ผิด อาจทำให้ระบบ crash
- หยุดงานหรือปิดเครื่องโดยไม่ stop: หาก force quit หรือปิด process โดยไม่ stop database อาจเกิดข้อมูลเสีย
แนวทางแก้ไข:
พยายาม restart แบบปกติ: เริ่มต้นใหม่ด้วยหน้าจอ ServBay หรือ command line:
servbayctl restart mariadb <version>
ใช้
mysqlcheck
ตรวจสอบและซ่อมแซม table: เหมาะกับ MyISAM เป็นหลักbash# ใช้ my.cnf และ root user 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
4หมายเหตุ: ตัวเลือก
--auto-repair
ใช้กับ MyISAM, ถ้าเป็น InnoDB ต้องใช้ขั้นตอนอื่น (เช่น InnoDB Force Recovery หรือ restore จาก backup)InnoDB Force Recovery (
innodb_force_recovery
): หาก InnoDB ไม่ start ให้ตั้ง parameter นี้ใน[mysqld]
ของ my.cnf (เลข 1–6) ทดลองทีละระดับ พร้อมสำรองไฟล์ก่อนทุกครั้ง!- สำรองข้อมูลถึงแม้จะเสีย: ก็อปปี้
/Applications/ServBay/db/mariadb/<version>/
ไปที่อื่นก่อน - แก้ไข my.cnf
/Applications/ServBay/etc/mariadb/<version>/my.cnf
- เพิ่ม
innodb_force_recovery = N
ใน[mysqld]
(N = 1–6, เพิ่มทีละขั้น หากยังไม่หาย) - ทดลอง start MariaDB/MySQL:
servbayctl start mariadb <version>
- หาก start ได้ backup ทันที!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 แล้ว ให้ stop database:
servbayctl stop mariadb <version>
- เข้าไปลบหรือ comment
innodb_force_recovery
ใน my.cnf - กู้ข้อมูล: โดย initialize data directory ใหม่ แล้วนำไฟล์ backup กลับเข้าฐานข้อมูล
- สำรองข้อมูลถึงแม้จะเสีย: ก็อปปี้
กู้คืนจาก backup: หาก table/database พังจนแก้ไขไม่ได้ restore จาก backup ล่าสุดได้ ServBay จะเก็บไฟล์ 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>;" # นำข้อมูลเข้า 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>
ให้เปลี่ยนตาม version ที่ต้องการ
7. ปัญหาการสำรองและกู้คืนข้อมูล
ขณะใช้ฟีเจอร์ backup ใน ServBay หรือสำรองข้อมูล manual ด้วย mysqldump
อาจพบอุปสรรค
สาเหตุและวิธีแก้ไขที่เป็นไปได้:
- ไฟล์ backup ไม่สมบูรณ์หรือเสียหาย:
- ตรวจสอบขนาด backup (
ls -lh /path/to/your_backup.sql
) ว่าสมเหตุสมผลกับข้อมูล - เปิดด้วย editor หรือดูด้วย
less /path/to/your_backup.sql
ว่าเป็นไฟล์ SQL หรือไม่ - ในกรณีใช้
mysqldump
manual ตรวจสอบ error ขณะรันคำสั่ง ถ้าใช้ ServBay backup ให้ดู log แอป
- ตรวจสอบขนาด backup (
- คำสั่งกู้คืนผิด:
- กำหนด username/password/database ผิด
- สิทธิ์ user ไม่พอ
- backup จาก version/type ที่ต่างกันอาจ syntax ไม่ตรง
- ปัญหาข้อจำกัด foreign key: ลำดับการนำเข้า table อาจทำให้ foreign key fail สามารถปิดตรวจสอบ foreign key ชั่วคราวก่อนนำเข้า แล้วเปิดกลับหลังจบsqlระวัง: การปิด foreign key checks อาจเสี่ยงข้อมูลไม่สัมพันธ์ ควรใช้เฉพาะช่วง import
-- ก่อน import SET foreign_key_checks = 0; -- import เช่น source /path/to/your_backup.sql; -- หรือ mysql ... < /path/to/your_backup.sql -- หลังจาก import SET foreign_key_checks = 1;
1
2
3
4
5
6
7
8 - ปัญหา charset หรือ collation: backup ที่ใช้ charset/collation ผิดจาก database ใหม่จะ import ไม่ได้หรือข้อมูลเพี้ยน ตรวจสอบ charset ให้ตรงกัน (
utf8mb4
)
ตัวอย่างการกู้คืนฐานข้อมูล (macOS):
bash
# กรณี backup เฉพาะบางฐานข้อมูล
# สร้าง database ก่อน
# mysql --defaults-file=/Applications/ServBay/etc/mariadb/<version>/my.cnf -u root -p -e "CREATE DATABASE <target_database_name>;"
# ใช้ config, user, password และชื่อ database ที่ถูกต้องในการ 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 แบบทั้ง system (--all-databases) ไม่ต้องระบุชื่อ database
# 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
Windows:
cmd
REM ตัวอย่าง backup เฉพาะบางฐานข้อมูล
REM สร้าง database ก่อน
REM C:\ServBay\bin\mariadb\<version>\bin\mysql.exe --defaults-file=C:\ServBay\etc\mariadb\<version>\my.cnf -u root -p -e "CREATE DATABASE <target_database_name>;"
REM restore ข้อมูลเข้า database
C:\ServBay\bin\mariadb\<version>\bin\mysql.exe --defaults-file=C:\ServBay\etc\mariadb\<version>\my.cnf -u <username> -p <target_database_name> < C:\ServBay\backup\mariadb\<version>\<your_backup.sql>
REM backup แบบทั้ง system (--all-databases) ไม่ต้องระบุชื่อ database
REM C:\ServBay\bin\mariadb\<version>\bin\mysql.exe --defaults-file=C:\ServBay\etc\mariadb\<version>\my.cnf -u <username> -p < C:\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>
ให้เปลี่ยนเป็น version จริง ระบบสำรองของ ServBay จะสร้างไฟล์ที่พร้อม restore ได้ง่าย และตัวเลือกการ restore ให้ด้วย
8. Bug เฉพาะ: MariaDB 11.5.1 InnoDB ไม่สามารถเริ่มต้น (ib_logfile0 was not found
/ Missing FILE_CHECKPOINT
)
ปัญหานี้เป็น Bug ร้ายแรงที่เกิดกับ MariaDB 11.5.1 ซึ่งทำให้ InnoDB ไม่สามารถสร้าง/อ่าน log file ได้ จึงเริ่มระบบไม่ได้
สัญญาณ error ใน log:
ในไฟล์ log คุณจะพบข้อความประมาณนี้:
macOS (/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
Windows (C:\ServBay\logs\mariadb\11.5\11.5.err
):
[ERROR] InnoDB: File C:\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 ได้ จึง failed ขณะ start
แนวทางแก้ไข (เน้นการ backup ข้อมูลก่อน):
Bug นี้ซ่อมตามปกติไม่ได้ แนะนำให้พยายามเปิดแบบ force เพื่อ backup ข้อมูลแล้ว migrate ไปเวอร์ชันที่เสถียร
ทดลอง force recovery เพื่อดึงข้อมูล (เสี่ยง!):
แก้ไฟล์ config:
- macOS:
/Applications/ServBay/etc/mariadb/11.5/my.cnf
- Windows:
C:\ServBay\etc\mariadb\11.5\my.cnf
เพิ่มบรรทัด
innodb_force_recovery = 6
ใน[mysqld]
สั่ง start:
bashservbayctl start mariadb 11.5
1หากเปิดได้ ให้ backup ข้อมูลทันที:
macOS:
bashmysqldump --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
1Windows:
cmdC:\ServBay\bin\mariadb\11.5\bin\mysqldump.exe --defaults-file=C:\ServBay\etc\mariadb\11.5\my.cnf -u root -p --all-databases --routines --triggers --events > C:\ServBay\backup\mariadb\11.5\mariadb_11.5_emergency_backup.sql
1ตรวจสอบว่าไฟล์ backup สร้างได้สมเหตุสมผล
- macOS:
หยุด MariaDB 11.5 และดำเนินการกับ data directory ต่อไป
- สั่งหยุด MariaDB 11.5:
servbayctl stop mariadb 11.5
- edit
my.cnf
เพื่อลบหรือ commentinnodb_force_recovery
- สั่งหยุด MariaDB 11.5: