ข้อผิดพลาดฐานข้อมูล Nextcloud หลังจากการอัปเดต: ควรตรวจสอบอะไรก่อน
กู้คืนการเข้าถึง Nextcloud หลังจากการอัปเดตโดยการวินิจฉัยข้อผิดพลาด SQL ตรวจสอบการเชื่อมต่อฐานข้อมูล และดำเนินการย้ายข้อมูลที่หยุดชะงักให้เสร็จสมบูรณ์อย่างปลอดภัย
หาก Nextcloud แสดงข้อความผิดพลาด “Database Error” หลังจากอัปเดต ให้ตรวจสอบข้อผิดพลาดของฐานข้อมูลnextcloud.logก่อนที่จะเปลี่ยนแปลงตารางใดๆ กู้คืนการเชื่อมต่อฐานข้อมูลก่อน หากการอัปเดตหยุดชะงักกลางคัน ให้ดำเนินการต่อให้เสร็จสิ้น แล้วocc upgradeจึงใช้คำสั่งซ่อมแซมที่ระบุไว้ในเอกสารเมื่อบันทึกการทำงานบ่งชี้ว่าจำเป็น
ข้อความในเบราว์เซอร์เป็นเพียงอาการ ไม่ใช่การวินิจฉัยโรค Nextcloud อาจไม่สามารถเชื่อมต่อกับ MySQL/MariaDB หรือ PostgreSQL ได้ บัญชีฐานข้อมูลอาจไม่สามารถตรวจสอบสิทธิ์ได้อีกต่อไป หรือโค้ดแอปพลิเคชันและสคีมาอาจอยู่ในขั้นตอนการอัปเกรดที่แตกต่างกันคู่มือการแก้ไขปัญหาอย่างเป็นทางการ ของ Nextcloud แนะนำให้จับคู่รหัสคำขอที่ล้มเหลวกับบันทึกของเซิร์ฟเวอร์
config/config.php. ไฟล์บันทึกเริ่มต้นคือdata/nextcloud.logแต่การปรับใช้แบบกำหนดเองอาจบันทึกข้อมูลไว้ที่อื่น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 ขั้นตอนการสำรองข้อมูล อย่างเป็นทางการ ยังรวมถึงแอปและธีมที่กำหนดเองด้วย หากมี ตรวจสอบให้แน่ใจว่าการสำรองข้อมูลนั้นเป็นช่วงเวลาเดียวกัน การสำรองข้อมูลเฉพาะโค้ดไม่สามารถกู้คืนฐานข้อมูลที่เปลี่ยนแปลงบางส่วนได้
คำสั่งด้านล่างนี้สมมติว่าเป็นการติดตั้ง Debian/Ubuntu ทั่วไปที่/var/www/nextcloudโดยใช้www-dataบัญชีเว็บเซิร์ฟเวอร์เป็น เรียกใช้คำสั่งoccโดยใช้ผู้ใช้ HTTP ที่เหมาะสม การติดตั้งแบบแพ็กเกจ, Docker, Snap, AIO และการติดตั้งแบบจัดการจะมีเส้นทางและวิธีการเรียกใช้ที่แตกต่างกันเอกสารอ้างอิงคำสั่ง occจะอธิบายข้อกำหนดเหล่านี้
หากบันทึกแสดงการปฏิเสธการเชื่อมต่อ ซ็อกเก็ตที่ไม่สามารถเข้าถึงได้ หรือเซิร์ฟเวอร์ไม่พร้อมใช้งาน ให้ตรวจสอบก่อนว่าบริการฐานข้อมูลที่มีอยู่ทำงานอยู่หรือไม่ นี่คือการตรวจสอบระดับโฮสต์ทางเลือก ไม่ใช่รายการที่ต้องดำเนินการโดยไม่เลือกปฏิบัติ:
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 และตรวจสอบสถานะของระบบ:
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อย่าคิดว่ามันจะมีอยู่ในเวอร์ชันเก่ากว่า ดูเอกสารอ้างอิงคำสั่งฐานข้อมูลสำหรับพฤติกรรมเฉพาะเวอร์ชัน
sudo -E -u www-data php occ statusตรวจสอบให้แน่ใจว่าเวอร์ชันที่ติดตั้งตรงกับเวอร์ชันที่ต้องการ ไม่จำเป็นต้องอัปเกรด และไม่มีข้อผิดพลาด SQL ร้ายแรงใหม่เกิดขึ้นsudo -E -u www-data php occ maintenance:mode --off.nextcloud.logสังเกตความผิดปกติในฐานข้อมูลที่เกิดขึ้นใหม่ระหว่างการตรวจสอบเหล่านี้หากเกิดข้อผิดพลาดของฐานข้อมูลแบบเดียวกันซ้ำอีก ให้หยุดการย้ายข้อมูลซ้ำๆ และรวบรวมรหัสคำขอ ข้อความ SQLSTATE บันทึกของฐานข้อมูลและเซิร์ฟเวอร์ คู่เวอร์ชัน และoccผลลัพธ์ที่ล้มเหลว หลักฐานเหล่านั้นจะช่วยระบุว่าปัญหาที่เหลืออยู่เกิดจากการเชื่อมต่อ ซอฟต์แวร์ที่ไม่เข้ากัน หรือการย้ายข้อมูลที่ล้มเหลวเฉพาะเจาะจง การเข้าสู่ระบบสำเร็จเพียงอย่างเดียวไม่ใช่หลักฐานว่างานเบื้องหลังและการสืบค้นฐานข้อมูลทั้งหมดทำงานได้
กู้คืนการเข้าถึง Nextcloud หลังจากการอัปเดตโดยการวินิจฉัยข้อผิดพลาด SQL ตรวจสอบการเชื่อมต่อฐานข้อมูล และดำเนินการย้ายข้อมูลที่หยุดชะงักให้เสร็จสมบูรณ์อย่างปลอดภัย
ใช้คำสั่ง OCC ของ Nextcloud เพื่อรีเซ็ตรหัสผ่านผู้ดูแลระบบจากเชลล์เซิร์ฟเวอร์ พร้อมคำแนะนำสำหรับชื่อผู้ใช้ สิทธิ์ และผู้ให้บริการเข้าสู่ระบบภายนอก
ล้างคำเตือน HSTS ของ Nextcloud โดยการตั้งค่าส่วนหัวที่ Apache, NGINX หรือพร็อกซี TLS ของคุณ จากนั้นตรวจสอบการตอบสนอง HTTPS สาธารณะอย่างปลอดภัย
ตรวจสอบหาสาเหตุของการติดตั้งแอปจาก App Store ที่ล้มเหลว ไม่ว่าจะเป็นปัญหาจาก DNS, HTTPS, พร็อกซี, TLS หรือปัญหาการตั้งค่าจากเซิร์ฟเวอร์ Nextcloud เอง
ย้ายการสร้างภาพขนาดย่อไปไว้ในกำหนดการพื้นหลังที่ควบคุมได้ ตัดขนาดภาพตัวอย่างที่ไม่ได้ใช้ และตรวจสอบคิวโดยไม่ทำให้เซิร์ฟเวอร์ Nextcloud ของคุณทำงานหนักเกินไป
ค้นหาไฟล์ กฎการยกเว้น ปัญหาการเชื่อมต่อ หรือสถานะฐานข้อมูลไคลเอ็นต์ที่ทำให้การซิงค์ Nextcloud หยุดชะงัก จากนั้นตรวจสอบการอัปโหลดและดาวน์โหลดอย่างปลอดภัย
ค้นหาข้อจำกัดของ PHP OPcache ที่ทำให้เกิดคำเตือนของ Nextcloud อัปเดตการตั้งค่า PHP สำหรับเว็บให้ถูกต้อง รีสตาร์ทอย่างปลอดภัย และตรวจสอบผลลัพธ์
เปรียบเทียบ CODE ที่ติดตั้งมากับระบบและ CODE ที่ใช้ Docker จากนั้นเชื่อมต่อ Collabora Online กับ Nextcloud ผ่านพร็อกซีแบบย้อนกลับ HTTPS ที่ปลอดภัย
วางแผนการใช้งาน Nextcloud HA ที่เชื่อถือได้ โดยใช้พื้นที่จัดเก็บข้อมูลร่วมกัน การล็อก Redis การกำหนดเส้นทาง MariaDB ที่คำนึงถึงจำนวนเสียงข้างมาก และการตรวจสอบการทำงานล้มเหลวที่ใช้งานได้จริง
กำหนดค่าและตรวจสอบรีเลย์ TURN ที่สามารถเข้าถึงได้สำหรับ Nextcloud Talk เมื่อไฟร์วอลล์หรือ NAT ที่จำกัดปิดกั้นสื่อการโทรโดยตรง