ข้อผิดพลาดฐานข้อมูล Nextcloud หลังจากการอัปเดต: ควรตรวจสอบอะไรก่อน

หาก Nextcloud แสดงข้อความผิดพลาด “Database Error” หลังจากอัปเดต ให้ตรวจสอบข้อผิดพลาดของฐานข้อมูลnextcloud.logก่อนที่จะเปลี่ยนแปลงตารางใดๆ กู้คืนการเชื่อมต่อฐานข้อมูลก่อน หากการอัปเดตหยุดชะงักกลางคัน ให้ดำเนินการต่อให้เสร็จสิ้น แล้วocc upgradeจึงใช้คำสั่งซ่อมแซมที่ระบุไว้ในเอกสารเมื่อบันทึกการทำงานบ่งชี้ว่าจำเป็น

ระบุสาเหตุของความล้มเหลวที่แท้จริง

ข้อความในเบราว์เซอร์เป็นเพียงอาการ ไม่ใช่การวินิจฉัยโรค Nextcloud อาจไม่สามารถเชื่อมต่อกับ MySQL/MariaDB หรือ PostgreSQL ได้ บัญชีฐานข้อมูลอาจไม่สามารถตรวจสอบสิทธิ์ได้อีกต่อไป หรือโค้ดแอปพลิเคชันและสคีมาอาจอยู่ในขั้นตอนการอัปเกรดที่แตกต่างกันคู่มือการแก้ไขปัญหาอย่างเป็นทางการ ของ Nextcloud แนะนำให้จับคู่รหัสคำขอที่ล้มเหลวกับบันทึกของเซิร์ฟเวอร์

  1. บันทึกเวลา ข้อผิดพลาดของเบราว์เซอร์ทั้งหมด และรหัสคำขอที่แสดง ห้ามเผยแพร่บันทึกส่วนตัวโดยไม่ลบข้อมูลลับและข้อมูลส่วนบุคคลออกก่อน
  2. ค้นหาไดเร็กทอรีข้อมูลที่กำหนดค่าไว้ในconfig/config.php. ไฟล์บันทึกเริ่มต้นคือdata/nextcloud.logแต่การปรับใช้แบบกำหนดเองอาจบันทึกข้อมูลไว้ที่อื่น
  3. ในการติดตั้ง Linux แบบทั่วไป ให้ตรวจสอบรายการล่าสุด จากนั้นตรวจสอบบันทึกบริการฐานข้อมูล แทนที่ด้วยเส้นทาง Nextcloud จริงของคุณ:
sudo tail -n 100 /var/www/nextcloud/data/nextcloud.log
sudo journalctl -u mariadb --since '30 minutes ago'

คำสั่งที่สองใช้ได้เฉพาะกับโฮสต์ที่รัน MariaDB ภายใต้ systemd เท่านั้น สำหรับการใช้งานแบบอื่น ให้ใช้บันทึกบริการ PostgreSQL หรือบันทึกคอนเทนเนอร์ ค้นหาSQLSTATEรหัสของข้อยกเว้นและสาเหตุแรกที่เกี่ยวข้องกับฐานข้อมูล แทนที่จะพึ่งพาบรรทัดสุดท้ายของ stack-trace

เบาะแสบันทึกการตรวจสอบที่มีประโยชน์ครั้งแรก
SQLSTATE[HY000] [2002]การเข้าถึงกระบวนการฐานข้อมูล ชื่อโฮสต์ พอร์ต เส้นทางซ็อกเก็ต หรือไฟล์ SQLite นั้น ไดรเวอร์จะเป็นผู้กำหนดการตีความ
SQLSTATE[HY000] [1040]การหมดการเชื่อมต่อ MySQL/MariaDB และเซสชันที่ใช้งานอยู่
MySQL server has gone awayการรีสตาร์ทฐานข้อมูล การตัดการเชื่อมต่อ แรงกดดันด้านทรัพยากร และบันทึกเซิร์ฟเวอร์
การตรวจสอบสิทธิ์หรือการเข้าถึงถูกปฏิเสธบัญชีผู้ใช้ฐานข้อมูล รหัสผ่าน การเข้าถึงเครือข่าย และสิทธิ์การเข้าถึง
ขาดตาราง ความสัมพันธ์ หรือคอลัมน์ตรวจสอบว่าการอัปเกรดฐานข้อมูลเสร็จสมบูรณ์หรือไม่ และโค้ดที่ติดตั้งตรงกับโครงสร้างฐานข้อมูลหรือไม่

ตัวอย่างสามข้อแรกมีอธิบายไว้ในเอกสารข้อผิดพลาดทั่วไปของ Nextcloud แล้ว ข้อความแจ้งว่าตารางหายไปไม่ได้หมายความว่าคุณได้รับอนุญาตให้สร้างตารางด้วยตนเอง: ให้ระบุสาเหตุของความล้มเหลวในการย้ายข้อมูลให้ชัดเจนก่อน

ป้องกันอินสแตนซ์ก่อนทำการแก้ไข

ก่อนที่จะลองทำการย้ายข้อมูลอีกครั้ง โปรดสำรองข้อมูลฐานข้อมูลที่สามารถกู้คืนได้ พร้อมกับการตั้งค่าและข้อมูลของ Nextcloud ขั้นตอนการสำรองข้อมูล อย่างเป็นทางการ ยังรวมถึงแอปและธีมที่กำหนดเองด้วย หากมี ตรวจสอบให้แน่ใจว่าการสำรองข้อมูลนั้นเป็นช่วงเวลาเดียวกัน การสำรองข้อมูลเฉพาะโค้ดไม่สามารถกู้คืนฐานข้อมูลที่เปลี่ยนแปลงบางส่วนได้

  • ควรหยุดการซิงค์และการทำงานเบื้องหลังชั่วคราวในระหว่างช่วงเวลาการกู้คืนข้อมูล หากเป็นไปได้ โดยเฉพาะอย่างยิ่งเมื่อมีการเขียนหรืออัปเกรดฐานข้อมูล
  • จดบันทึกเวอร์ชัน Nextcloud เก่าและใหม่ รวมถึงเอนจิน/เวอร์ชันฐานข้อมูล เวอร์ชัน PHP และวิธีการอัปเดตไว้ด้วย
  • ห้ามลบตารางฐานข้อมูล ห้ามนำเข้าสคีมาว่างเปล่า ห้ามเรียกใช้คำสั่ง SQL แบบสุ่มจากฟอรัม หรือห้ามกู้คืนส่วนประกอบเพียงส่วนเดียวจากการสำรองข้อมูลแบบหลายส่วนซ้ำๆ

คำสั่งด้านล่างนี้สมมติว่าเป็นการติดตั้ง Debian/Ubuntu ทั่วไปที่/var/www/nextcloudโดยใช้www-dataบัญชีเว็บเซิร์ฟเวอร์เป็น เรียกใช้คำสั่งoccโดยใช้ผู้ใช้ HTTP ที่เหมาะสม การติดตั้งแบบแพ็กเกจ, Docker, Snap, AIO และการติดตั้งแบบจัดการจะมีเส้นทางและวิธีการเรียกใช้ที่แตกต่างกันเอกสารอ้างอิงคำสั่ง occจะอธิบายข้อกำหนดเหล่านี้

กู้คืนการเชื่อมต่อฐานข้อมูลก่อนทำการย้ายข้อมูล

ตรวจสอบการตั้งค่าบริการฐานข้อมูลและการเชื่อมต่อ Nextcloud

หากบันทึกแสดงการปฏิเสธการเชื่อมต่อ ซ็อกเก็ตที่ไม่สามารถเข้าถึงได้ หรือเซิร์ฟเวอร์ไม่พร้อมใช้งาน ให้ตรวจสอบก่อนว่าบริการฐานข้อมูลที่มีอยู่ทำงานอยู่หรือไม่ นี่คือการตรวจสอบระดับโฮสต์ทางเลือก ไม่ใช่รายการที่ต้องดำเนินการโดยไม่เลือกปฏิบัติ:

sudo systemctl status mariadb
sudo systemctl status postgresql

สำหรับเซิร์ฟเวอร์ฐานข้อมูลแยกต่างหาก ให้ตรวจสอบ DNS, กฎไฟร์วอลล์, พอร์ตที่เลือก และการเข้าถึงเครือข่ายจากโฮสต์แอปพลิเคชันหรือคอนเทนเนอร์ Nextcloud ด้วย ตรวจสอบหาconfig/config.php, dbtype, dbhost, dbnameและ เอกสารอ้างอิง dbuserพารามิเตอร์การกำหนดค่าจะอธิบายชื่อโฮสต์ พอร์ต และไวยากรณ์ซ็อกเก็ต Unix ห้ามคัดลอกข้อความนี้ ไปวาง dbpasswordในตั๋วสาธารณะหรือคำสั่งเชลล์ที่เปิดเผยข้อมูลนี้ในประวัติการใช้งาน

หากรหัสผ่านฐานข้อมูลถูกหมุนเวียนหรือข้อมูลประจำตัวถูกเปลี่ยนแปลงระหว่างการติดตั้งใช้งาน ให้แก้ไขความไม่ตรงกันนั้นโดยใช้เวิร์กโฟลว์การจัดการความลับของคุณ หากเซิร์ฟเวอร์รายงานว่ามีการเชื่อมต่อมากเกินไป ให้ตรวจสอบการเชื่อมต่อที่ใช้งานอยู่และสาเหตุของการสะสมการเชื่อมต่อก่อนที่จะพิจารณาการเปลี่ยนแปลงความจุ คำสั่ง index จะไม่สามารถแก้ไขปัญหาการหยุดชะงักของการเชื่อมต่อได้

ตรวจสอบความเข้ากันได้ของรันไทม์หลังจากอัปเดตแล้ว

การอัปเกรด PHP หรือเซิร์ฟเวอร์ฐานข้อมูลพร้อมกันอาจทำให้การติดตั้งที่เคยใช้งานได้เสียหายได้ ควรเปรียบเทียบเวอร์ชัน Nextcloud ที่ต้องการ กับ ข้อกำหนดของระบบและบันทึกการเผยแพร่ฉบับทางการ แทนที่จะสันนิษฐานว่าไดรเวอร์และเวอร์ชันเซิร์ฟเวอร์ที่ติดตั้งอยู่ในปัจจุบันทั้งหมดจะยังคงได้รับการสนับสนุน จากเอกสาร Nextcloud 35 ที่ตรวจสอบแล้ว พบว่ารองรับ PHP เวอร์ชัน 8.3–8.5 ส่วนเวอร์ชันฐานข้อมูลที่ยอมรับได้นั้นมีการระบุไว้ในเอกสารแยกต่างหาก เวอร์ชันก่อนหน้าอาจมีข้อจำกัดที่แตกต่างกัน

โปรดตรวจสอบให้แน่ใจว่าไดรเวอร์ฐานข้อมูล PHP ที่จำเป็นสำหรับเอนจิ้นที่คุณเลือกนั้นเปิดใช้งานอยู่ทั้งในสภาพแวดล้อม PHP แบบบรรทัดคำสั่งและแบบเว็บ อย่าลดระดับเวอร์ชันเซิร์ฟเวอร์ฐานข้อมูลโดยไม่ตรวจสอบให้ดีหลังจากทำการย้ายสคีมาแล้ว ให้กู้คืนจากแผนสำรองข้อมูลที่เข้ากันได้และสอดคล้องกันเท่านั้น

ดำเนินการอัปเกรด Nextcloud ที่หยุดชะงักให้เสร็จสมบูรณ์หรือซ่อมแซมให้เรียบร้อย

เมื่อสามารถเข้าถึงฐานข้อมูลและทำการสำรองข้อมูลเรียบร้อยแล้ว ให้เปลี่ยนไปที่ไดเร็กทอรีการติดตั้ง Nextcloud และตรวจสอบสถานะของระบบ:

cd /var/www/nextcloud
sudo -E -u www-data php occ status

หาก Nextcloud แจ้งว่าการอัปเกรดกำลังดำเนินการอยู่หรือดำเนินการไม่เสร็จสมบูรณ์ ให้ปฏิบัติตามเส้นทางการอัปเกรดที่รองรับสำหรับเวอร์ชันต้นทางและปลายทางที่ติดตั้งไว้ สำหรับการติดตั้งด้วยตนเองแบบดั้งเดิม ให้เรียกใช้คำสั่งต่อไปนี้:

sudo -E -u www-data php occ upgrade

อย่าขัดจังหวะคำสั่งหรือเรียกใช้กระบวนการอัปเกรดพร้อมกัน อ่านผลลัพธ์: การย้ายข้อมูลที่สำเร็จจะแตกต่างจากข้อผิดพลาดในการเชื่อมต่อฐานข้อมูลเอกสารการอัปเกรดด้วยตนเอง ของ Nextcloud แนะนำอย่างชัดเจนว่าocc upgradeเมื่อใดที่กระบวนการบนเว็บหยุดชะงัก และmaintenance:repairหากเส้นทางการอัปเกรดจำเป็นต้องได้รับการแก้ไข:

sudo -E -u www-data php occ maintenance:repair

ใช้maintenance:repairหลังจากวิเคราะห์ความล้มเหลวแล้ว วิธีนี้ไม่สามารถใช้แทนการแก้ไขปัญหาข้อมูลรับรองที่ไม่ถูกต้อง ฐานข้อมูลหยุดทำงาน หรือรันไทม์ที่ไม่เข้ากันอย่างแท้จริงได้ หากocc upgradeเกิดความล้มเหลวในการย้ายข้อมูล SQL เฉพาะเจาะจง ให้บันทึกข้อผิดพลาดที่เกิดขึ้นอย่างแม่นยำ และค้นหาวิธีแก้ไขเฉพาะเวอร์ชัน หรือกู้คืนข้อมูลสำรองที่ตรงกันทั้งหมด แทนที่จะทดลองแก้ไขด้วยคำสั่ง DDL ด้วยตนเอง

จัดการคำเตือนเกี่ยวกับสคีมาหลังจากอัปเกรดสำเร็จแล้วเท่านั้น

การย้ายข้อมูลบางรายการจะถูกเลื่อนออกไปโดยเจตนา ในระบบที่ทำงานได้ตามปกติ ภาพรวมของผู้ดูแลระบบอาจขอให้ระบุคอลัมน์ ดัชนี หรือคีย์หลักเพิ่มเติม คำสั่งเหล่านี้จะแสดงตัวอย่างการทำงานจริงเมื่อเวอร์ชันนั้นรองรับ:

sudo -E -u www-data php occ db:add-missing-indices --dry-run
sudo -E -u www-data php occ db:add-missing-columns --dry-run
sudo -E -u www-data php occ db:add-missing-primary-keys --dry-run

เรียกใช้คำสั่งที่เกี่ยวข้อง--dry-runเฉพาะในกรณีที่ปัญหาที่บันทึกไว้หรือการตรวจสอบโดยผู้ดูแลระบบร้องขอ และการเปลี่ยนแปลงที่เสนอได้รับการตรวจสอบแล้ว การดำเนินการบำรุงรักษาเหล่านี้อาจใช้เวลานานสำหรับฐานข้อมูลขนาดใหญ่ Nextcloud 35 ยังมีเอกสารเพิ่มเติมเกี่ยว กับเรื่องนี้ด้วย db:schema:checkอย่าคิดว่ามันจะมีอยู่ในเวอร์ชันเก่ากว่า ดูเอกสารอ้างอิงคำสั่งฐานข้อมูลสำหรับพฤติกรรมเฉพาะเวอร์ชัน

ตรวจสอบการกู้คืนและเปิดการเข้าถึงอีกครั้ง

  1. ทำซ้ำขั้นตอนนี้sudo -E -u www-data php occ statusตรวจสอบให้แน่ใจว่าเวอร์ชันที่ติดตั้งตรงกับเวอร์ชันที่ต้องการ ไม่จำเป็นต้องอัปเกรด และไม่มีข้อผิดพลาด SQL ร้ายแรงใหม่เกิดขึ้น
  2. หากโหมดบำรุงรักษายังคงเปิดอยู่และการอัปเกรดเสร็จสมบูรณ์แล้วให้ปิดใช้งานด้วยคำสั่งsudo -E -u www-data php occ maintenance:mode --off.
  3. เปิด WebGUI เข้าสู่ระบบ แสดงรายการไฟล์ และทำการอัปโหลดและดาวน์โหลดไฟล์ขนาดเล็กที่ได้รับอนุญาตnextcloud.logสังเกตความผิดปกติในฐานข้อมูลที่เกิดขึ้นใหม่ระหว่างการตรวจสอบเหล่านี้
  4. ดำเนินการงานที่กำหนดไว้และการซิงโครไนซ์ไคลเอ็นต์ต่อ จากนั้นตรวจสอบการตั้งค่าการดูแลระบบเพื่อดูว่ามีคำเตือนใด ๆ ในฐานข้อมูลที่ยังคงเหลืออยู่หรือไม่

หากเกิดข้อผิดพลาดของฐานข้อมูลแบบเดียวกันซ้ำอีก ให้หยุดการย้ายข้อมูลซ้ำๆ และรวบรวมรหัสคำขอ ข้อความ SQLSTATE บันทึกของฐานข้อมูลและเซิร์ฟเวอร์ คู่เวอร์ชัน และoccผลลัพธ์ที่ล้มเหลว หลักฐานเหล่านั้นจะช่วยระบุว่าปัญหาที่เหลืออยู่เกิดจากการเชื่อมต่อ ซอฟต์แวร์ที่ไม่เข้ากัน หรือการย้ายข้อมูลที่ล้มเหลวเฉพาะเจาะจง การเข้าสู่ระบบสำเร็จเพียงอย่างเดียวไม่ใช่หลักฐานว่างานเบื้องหลังและการสืบค้นฐานข้อมูลทั้งหมดทำงานได้

ฝากความเห็น

ข้อผิดพลาดฐานข้อมูล Nextcloud หลังจากการอัปเดต: ควรตรวจสอบอะไรก่อน

กู้คืนการเข้าถึง Nextcloud หลังจากการอัปเดตโดยการวินิจฉัยข้อผิดพลาด SQL ตรวจสอบการเชื่อมต่อฐานข้อมูล และดำเนินการย้ายข้อมูลที่หยุดชะงักให้เสร็จสมบูรณ์อย่างปลอดภัย

รีเซ็ตรหัสผ่านผู้ดูแลระบบ Nextcloud ที่ลืมไปโดยใช้ OCC

ใช้คำสั่ง OCC ของ Nextcloud เพื่อรีเซ็ตรหัสผ่านผู้ดูแลระบบจากเชลล์เซิร์ฟเวอร์ พร้อมคำแนะนำสำหรับชื่อผู้ใช้ สิทธิ์ และผู้ให้บริการเข้าสู่ระบบภายนอก

เพิ่มส่วนหัว HSTS ที่ปลายทาง HTTPS ที่ให้บริการ Nextcloud

ล้างคำเตือน HSTS ของ Nextcloud โดยการตั้งค่าส่วนหัวที่ Apache, NGINX หรือพร็อกซี TLS ของคุณ จากนั้นตรวจสอบการตอบสนอง HTTPS สาธารณะอย่างปลอดภัย

แก้ไขปัญหาการติดตั้งแอป Nextcloud ที่แจ้งว่าไม่มีการเชื่อมต่ออินเทอร์เน็ต

แก้ไขปัญหาการติดตั้งแอป Nextcloud ที่แจ้งว่าไม่มีการเชื่อมต่ออินเทอร์เน็ต

ตรวจสอบหาสาเหตุของการติดตั้งแอปจาก App Store ที่ล้มเหลว ไม่ว่าจะเป็นปัญหาจาก DNS, HTTPS, พร็อกซี, TLS หรือปัญหาการตั้งค่าจากเซิร์ฟเวอร์ Nextcloud เอง

แก้ปัญหา CPU กระชากเร็วใน Nextcloud Preview ด้วยคิวที่กำหนดเวลาไว้

ย้ายการสร้างภาพขนาดย่อไปไว้ในกำหนดการพื้นหลังที่ควบคุมได้ ตัดขนาดภาพตัวอย่างที่ไม่ได้ใช้ และตรวจสอบคิวโดยไม่ทำให้เซิร์ฟเวอร์ Nextcloud ของคุณทำงานหนักเกินไป

รับการซิงค์ข้อมูลบนเดสก์ท็อป Nextcloud โดยไม่ต้องแสดงสถานะ “กำลังประมวลผลไฟล์” อีกต่อไป

ค้นหาไฟล์ กฎการยกเว้น ปัญหาการเชื่อมต่อ หรือสถานะฐานข้อมูลไคลเอ็นต์ที่ทำให้การซิงค์ Nextcloud หยุดชะงัก จากนั้นตรวจสอบการอัปโหลดและดาวน์โหลดอย่างปลอดภัย

ล้างคำเตือน Nextcloud OPcache โดยการปรับขีดจำกัดให้ถูกต้อง

ค้นหาข้อจำกัดของ PHP OPcache ที่ทำให้เกิดคำเตือนของ Nextcloud อัปเดตการตั้งค่า PHP สำหรับเว็บให้ถูกต้อง รีสตาร์ทอย่างปลอดภัย และตรวจสอบผลลัพธ์

เชื่อมต่อ Nextcloud กับ CODE Docker: การตั้งค่าและข้อดีข้อเสีย

เชื่อมต่อ Nextcloud กับ CODE Docker: การตั้งค่าและข้อดีข้อเสีย

เปรียบเทียบ CODE ที่ติดตั้งมากับระบบและ CODE ที่ใช้ Docker จากนั้นเชื่อมต่อ Collabora Online กับ Nextcloud ผ่านพร็อกซีแบบย้อนกลับ HTTPS ที่ปลอดภัย

สร้างคลัสเตอร์ Nextcloud ที่ทนทานด้วย Galera

วางแผนการใช้งาน Nextcloud HA ที่เชื่อถือได้ โดยใช้พื้นที่จัดเก็บข้อมูลร่วมกัน การล็อก Redis การกำหนดเส้นทาง MariaDB ที่คำนึงถึงจำนวนเสียงข้างมาก และการตรวจสอบการทำงานล้มเหลวที่ใช้งานได้จริง

รับสาย Nextcloud Talk ได้เมื่อการเชื่อมต่อ Direct Media ล้มเหลว

รับสาย Nextcloud Talk ได้เมื่อการเชื่อมต่อ Direct Media ล้มเหลว

กำหนดค่าและตรวจสอบรีเลย์ TURN ที่สามารถเข้าถึงได้สำหรับ Nextcloud Talk เมื่อไฟร์วอลล์หรือ NAT ที่จำกัดปิดกั้นสื่อการโทรโดยตรง