แก้ไขปัญหา “ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้” ใน ownCloud 10 ที่ใช้ MySQL

วิธีที่เร็วที่สุดในการแยกแยะข้อผิดพลาด “Failed to connect to database” ใน ownCloud 10 คือการทดสอบด้วยบัญชี MySQL ชื่อฐานข้อมูล และโฮสต์เดียวกันจากเซิร์ฟเวอร์ ownCloud เอง หากการเข้าสู่ระบบล้มเหลว ให้แก้ไขปัญหาความพร้อมใช้งานของ MySQL การเข้าถึงเครือข่าย ข้อมูลประจำตัว หรือสิทธิ์การเข้าถึงก่อน หากสำเร็จ ให้ตรวจสอบ ownCloud ส่วนขยาย config/config.phpPHP pdo_mysqlและตรวจสอบว่า PHP ใช้การเชื่อมต่อแบบ socket หรือ TCP ที่ถูกต้องหรือไม่

คู่มือนี้ครอบคลุมการติดตั้ง ownCloud Server 10 ที่มีอยู่แล้วโดยใช้ MySQL หรือ MariaDB บน ​​Linux ชื่อบริการและคำสั่งแพ็กเกจจะแตกต่างกันไปตามระบบปฏิบัติการและประเภทการติดตั้ง สำรองข้อมูลการกำหนดค่าและฐานข้อมูลก่อนแก้ไขการตั้งค่าสำหรับการใช้งานจริง ห้ามแชร์รหัสผ่านฐานข้อมูลในประเด็นปัญหาหรือคัดลอกไปวางในบันทึกคำสั่งสาธารณะเด็ดขาด

ข้อผิดพลาดนี้บอกอะไรคุณบ้าง?

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

ข้อความหรือเบาะแสพื้นที่น่าตรวจสอบ
could not find driverหรือข้อผิดพลาดของไดรเวอร์ PDOรันไทม์ PHP บนเว็บไม่ได้pdo_mysqlเปิดใช้งาน
SQLSTATE[HY000] [2002]หรือ “ไม่สามารถเชื่อมต่อได้”MySQL หยุดทำงาน โฮสต์หรือพอร์ตไม่ถูกต้อง ไฟร์วอลล์ปิดกั้น TCP หรือเส้นทางซ็อกเก็ตไม่ถูกต้อง
Access denied for userรหัสผ่าน โฮสต์บัญชี หรือการตั้งค่าการตรวจสอบสิทธิ์ MySQL ไม่ตรงกัน
Unknown databaseชื่อฐานข้อมูลที่กำหนดค่าไว้สะกดผิด ขาดหาย หรือไม่ปรากฏให้บัญชีผู้ใช้เห็น

รหัสข้อผิดพลาดที่แน่นอนอาจแตกต่างกันไปตามเวอร์ชันของ PHP, MySQL, MariaDB และระบบปฏิบัติการ ให้ถือว่ารหัสเหล่านี้เป็นเพียงเบาะแส และยืนยันสาเหตุด้วยการตรวจสอบด้านล่าง เอกสารเกี่ยวกับข้อผิดพลาด "การเข้าถึงถูกปฏิเสธ" ของ MySQL ระบุว่า การจับคู่บัญชีและโฮสต์เป็นสาเหตุที่พบบ่อย

โฮสต์ ownCloud สามารถเชื่อมต่อกับ MySQL ได้หรือไม่?

ตรวจสอบว่า MySQL ทำงานอยู่บนเซิร์ฟเวอร์ ownCloud เครื่องอื่น หรือคอนเทนเนอร์ บน Linux ให้ตรวจสอบบริการ ชื่อหน่วยที่ใช้กันทั่วไปคือmysqlและmariadb; ให้ใช้ตัวที่ติดตั้งอยู่บนเซิร์ฟเวอร์ของคุณ:

sudo systemctl status mysql
sudo systemctl status mariadb

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

sudo journalctl -u mariadb --since "30 minutes ago"
sudo systemctl start mariadb

เปลี่ยนชื่อบริการให้เหมาะสม การที่บริการทำงานอยู่ไม่ได้หมายความว่า ownCloud สามารถตรวจสอบสิทธิ์ได้ โปรดดำเนินการทดสอบบัญชีต่อไป

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

getent hosts db.example.net
nc -vz db.example.net 3306

การตรวจสอบที่ล้มเหลวอาจชี้ไปที่ DNS, การกำหนดเส้นทาง, ไฟร์วอลล์ หรือการกำหนดค่าตัวรับฟังฐานข้อมูล อนุญาตการเชื่อมต่อจากเซิร์ฟเวอร์ ownCloud ผ่านเครือข่ายส่วนตัวเท่านั้นหากเป็นไปได้ อย่าเปิดเผย MySQL สู่สาธารณะทางอินเทอร์เน็ตเพื่อเป็นทางลัด

บัญชีฐานข้อมูลใช้งานได้จากโฮสต์ ownCloud หรือไม่?

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

mysql -u oc_app -p -h localhost owncloud

สำหรับฐานข้อมูลระยะไกล ให้แทนที่localhostด้วยชื่อโฮสต์ของฐานข้อมูลนั้น หากการเข้าสู่ระบบสำเร็จ ให้ทำการตรวจสอบยืนยันที่ไม่เป็นอันตราย:

SELECT DATABASE(), CURRENT_USER();
SHOW TABLES;
EXIT;

ขั้นตอน นี้เป็นการยืนยันการตรวจสอบสิทธิ์ขั้นพื้นฐานและการเข้าถึงฐานข้อมูลที่เลือก หากล้มเหลว โปรดอ่านข้อผิดพลาดที่เกิดขึ้นอย่างละเอียดและชื่อผู้ใช้/โฮสต์ที่ MySQL รายงาน MySQL จะพิจารณาชื่อผู้ใช้และโฮสต์ร่วมกันเมื่อทำการจับคู่บัญชี โปรดทราบด้วยว่าlocalhostบน Linux โดยทั่วไปจะใช้ซ็อกเก็ต Unix ในขณะที่127.0.0.1บังคับใช้ TCP ทดสอบวิธีการเชื่อมต่อแบบเดียวกับที่การกำหนดค่า ownCloud ของคุณใช้:

mysql -u oc_app -p -h 127.0.0.1 owncloud

การตั้งค่าฐานข้อมูล ownCloud ถูกต้องหรือไม่

ตรวจสอบไฟล์ที่ใช้งานconfig/config.phpอยู่ในไดเร็กทอรีการติดตั้ง ownCloud เอกสารอ้างอิงการกำหนดค่า ownCloud แสดงรายการประเภทฐานข้อมูล ชื่อ ผู้ใช้ และรหัสผ่าน นอกจากนี้ คู่มือฐานข้อมูลยังแสดงโฮสต์และคำนำหน้าตารางด้วย การกำหนดค่า MySQL ทั่วไปจะมีลักษณะดังนี้:

'dbtype' => 'mysql',
'dbname' => 'owncloud',
'dbuser' => 'oc_app',
'dbpassword' => 'REDACTED',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',

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

หลังจากแก้ไขเสร็จแล้ว ให้ตรวจสอบว่าไฟล์นั้นเป็นไฟล์ PHP ที่ถูกต้อง โดยใช้ไบนารี PHP สำหรับการติดตั้งของคุณ:

php -l /var/www/owncloud/config/config.php

เส้นทางการติดตั้งของคุณอาจแตกต่างออกไป โปรดจำกัดการเข้าถึงconfig.phpเนื่องจากมีข้อมูลประจำตัวฐานข้อมูลและค่าสำคัญอื่นๆ

เว็บแอปพลิเคชันได้เปิดใช้งานไดรเวอร์ MySQL ของ PHP แล้วหรือไม่?

คู่มือฐานข้อมูลของ ownCloud 10 ต้องการpdo_mysql. ตรวจสอบเวอร์ชัน PHP และโมดูลที่โหลดแล้ว:

php -v
php -m | grep -i pdo_mysql

หากโมดูลหายไป ให้ติดตั้งแพ็กเกจ MySQL PDO ที่เหมาะสมกับเวอร์ชัน PHP ของคุณ จากนั้นรีสตาร์ทหรือรีโหลดเว็บเซิร์ฟเวอร์หรือพูล PHP-FPM ที่เกี่ยวข้อง ชื่อแพ็กเกจจะแตกต่างกันไปใน Ubuntu, Debian, SUSE, Red Hat และอิมเมจคอนเทนเนอร์ โมดูลที่เปิดใช้งานสำหรับ PHP แบบบรรทัดคำสั่งอาจไม่ได้เปิดใช้งานสำหรับ Apache หรือ PHP-FPM ดังนั้นตรวจสอบการกำหนดค่า PHP ของรันไทม์เว็บด้วย หลีกเลี่ยงการออกจากหน้าวินิจฉัยสาธารณะที่เปิดเผยข้อมูลการกำหนดค่า PHP

เป็นไปได้ไหมที่การตั้งค่าซ็อกเก็ตหรือโฮสต์จะผิดพลาด?

บนระบบ Linux ไคลเอนต์ MySQL อาจใช้ซ็อกเก็ต Unix สำหรับการเชื่อมต่อlocalhostในขณะที่127.0.0.1ใช้ TCP หาก MySQL อยู่บนเครื่องเดียวกัน ให้ตรวจสอบว่า PHP mysql.default_socketชี้ไปยังไฟล์ซ็อกเก็ตที่เซิร์ฟเวอร์ฐานข้อมูลสร้างขึ้นจริงหรือไม่ เปรียบเทียบการตั้งค่าซ็อกเก็ตและพอร์ตของเซิร์ฟเวอร์ฐานข้อมูลกับการตั้งค่าของ PHP และค่าโฮสต์ของ ownCloud

หาก MySQL อยู่บนเครื่องระยะไกล ให้localhostเป็นเครื่อง ownCloud ไม่ใช่เซิร์ฟเวอร์ฐานข้อมูล ให้ตั้งค่าชื่อโฮสต์ของฐานข้อมูลที่สามารถเข้าถึงได้แทน และตรวจสอบให้แน่ใจว่า MySQL รับฟังการเชื่อมต่อบนอินเทอร์เฟซที่ต้องการ ไฟร์วอลล์หรือการอนุญาตเฉพาะภายในเครื่องbind-addressอาจป้องกันการเข้าถึงระยะไกลได้ แม้ว่าคำสั่งฐานข้อมูลภายในเครื่องจะทำงานได้ก็ตาม จำกัดการเข้าถึงเฉพาะที่อยู่ส่วนตัวของเซิร์ฟเวอร์แอปพลิเคชัน

บัญชีผู้ใช้ MySQL และสิทธิ์การเข้าถึงตรงกับเครื่องไคลเอ็นต์หรือไม่

บัญชี MySQL ประกอบด้วยชื่อผู้ใช้และส่วนประกอบโฮสต์ ดังนั้น'oc_app'@'localhost'และ'oc_app'@'10.0.0.25'จึงเป็นรายการบัญชีที่แตกต่างกัน ใช้การเชื่อมต่อแบบผู้ดูแลระบบเพื่อตรวจสอบบัญชีที่มีอยู่และสิทธิ์การเข้าถึงสำหรับบัญชีที่ควรตรงกัน:

SELECT User, Host FROM mysql.user;
SHOW GRANTS FOR 'oc_app'@'localhost';

หากไม่มีบัญชีผู้ใช้และฐานข้อมูลมีอยู่แล้ว ให้สร้างบัญชีผู้ใช้เฉพาะและให้สิทธิ์เฉพาะในการเข้าถึงฐานข้อมูล ownCloud เท่านั้น แทนที่ฐานข้อมูล โฮสต์ และรหัสผ่านในตัวอย่างด้วยค่าจริงของคุณ:

CREATE USER 'oc_app'@'localhost' IDENTIFIED BY 'replace-with-a-strong-password';
GRANT ALL PRIVILEGES ON owncloud.* TO 'oc_app'@'localhost';

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

คุณจะยืนยันการซ่อมแซมได้อย่างไร?

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

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

สำหรับข้อมูลเพิ่มเติม โปรดอ่านคู่มือการกำหนดค่าและการแก้ไขปัญหาฐานข้อมูล ownCloud Server 10.16 , คู่มืออ้างอิงการกำหนดค่า ownCloud 10.15และคู่มืออย่างเป็นทางการของ MySQL เกี่ยวกับการแก้ไขปัญหาการเชื่อมต่อและข้อผิดพลาดการเข้าถึงถูกปฏิเสธชื่อบริการ คำสั่งแพ็กเกจ และการตั้งค่าที่แน่นอนจะขึ้นอยู่กับระบบปฏิบัติการและการติดตั้งใช้งานของคุณ

ฝากความเห็น

10 เครื่องมือ Ping Sweep ที่ดีที่สุดสำหรับการค้นหาอุปกรณ์ในเครือข่ายของคุณ

10 เครื่องมือ Ping Sweep ที่ดีที่สุดสำหรับการค้นหาอุปกรณ์ในเครือข่ายของคุณ

เปรียบเทียบเครื่องมือสแกน Ping 10 ตัว สำหรับการค้นหาเครือข่าย LAN อย่างรวดเร็ว การสแกนข้ามแพลตฟอร์ม และการจัดการที่อยู่ IP เรียนรู้ว่าการสแกน Ping สามารถบอกอะไรคุณได้บ้าง และบอกอะไรไม่ได้บ้าง

6 เครื่องมือบริหารจัดการเครือข่ายที่ดีที่สุดสำหรับการติดตามประสิทธิภาพ

6 เครื่องมือบริหารจัดการเครือข่ายที่ดีที่สุดสำหรับการติดตามประสิทธิภาพ

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

โปรแกรมวิเคราะห์ Wi-Fi ที่ดีที่สุดสำหรับ Windows, iOS และ Android

โปรแกรมวิเคราะห์ Wi-Fi ที่ดีที่สุดสำหรับ Windows, iOS และ Android

เปรียบเทียบแอปวิเคราะห์ Wi-Fi สำหรับ Windows, iPhone และ Android ซึ่งรวมถึงเครื่องมือสำหรับตรวจสอบความแออัดของช่องสัญญาณ การครอบคลุมสัญญาณ แผนที่ความร้อน และการแก้ไขปัญหาเครือข่าย

Ping Monitor: 7 เครื่องมือโอเพนซอร์สฟรีสำหรับตรวจสอบความพร้อมใช้งานของเครือข่าย

Ping Monitor: 7 เครื่องมือโอเพนซอร์สฟรีสำหรับตรวจสอบความพร้อมใช้งานของเครือข่าย

เปรียบเทียบโปรแกรมตรวจสอบค่า Ping แบบโอเพนซอร์สฟรี 7 ตัว ตั้งแต่ชุดโปรแกรมเครือข่ายแบบครบวงจรไปจนถึงโปรแกรมตรวจสอบความหน่วงแฝงโดยเฉพาะ และเลือกโปรแกรมที่เหมาะสมที่สุดตามความพร้อมใช้งาน การสูญเสียแพ็กเก็ต และประวัติการใช้งาน

QoS ในระบบเครือข่าย: คุณภาพของบริการ (Quality of Service) ทำอะไร และทำงานอย่างไร

QoS ในระบบเครือข่าย: คุณภาพของบริการ (Quality of Service) ทำอะไร และทำงานอย่างไร

เรียนรู้ความหมายของ QoS ในระบบเครือข่าย วิธีที่การกำหนดค่า DSCP และคิวการรับส่งข้อมูลจัดลำดับความสำคัญของเสียง วิดีโอ และแอปพลิเคชันทางธุรกิจ และสิ่งที่ QoS แก้ไขไม่ได้

7 เครื่องมือจัดการที่อยู่ IP ที่ดีที่สุดสำหรับทีมเครือข่าย

7 เครื่องมือจัดการที่อยู่ IP ที่ดีที่สุดสำหรับทีมเครือข่าย

เปรียบเทียบเครื่องมือจัดการที่อยู่ IP เจ็ดแบบ สำหรับการค้นหาซับเน็ต การประสานงาน DNS และ DHCP การสำรวจเครือข่าย และ IPAM แบบโอเพนซอร์ส

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

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

สร้างระบบตรวจสอบเครือข่ายที่ใช้งานได้จริง พร้อมการครอบคลุมอุปกรณ์ที่ชัดเจน ตัวชี้วัดประสิทธิภาพที่เป็นประโยชน์ การแจ้งเตือนที่นำไปปฏิบัติได้จริง และการเปรียบเทียบระหว่าง SolarWinds NPM, PRTG และ OpManager

10 เครื่องมือสแกนเครือข่ายที่ดีที่สุดสำหรับการค้นหาอุปกรณ์และที่อยู่ IP

10 เครื่องมือสแกนเครือข่ายที่ดีที่สุดสำหรับการค้นหาอุปกรณ์และที่อยู่ IP

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

วิธีใช้ Nmap สำหรับ Traceroute และอ่านเส้นทางเครือข่าย

วิธีใช้ Nmap สำหรับ Traceroute และอ่านเส้นทางเครือข่าย

ใช้ตัวเลือก --traceroute ของ Nmap เพื่อแมปฮอปไปยังโฮสต์ที่ได้รับอนุญาต ทำความเข้าใจเอาต์พุตของฮอปและ RTT และแก้ไขปัญหาการตอบสนองที่หายไปโดยไม่ต้องสแกนมากเกินไป

10 เครื่องมือสแกนและวิเคราะห์ไร้สายที่ดีที่สุดสำหรับ Windows, iOS และ Android

10 เครื่องมือสแกนและวิเคราะห์ไร้สายที่ดีที่สุดสำหรับ Windows, iOS และ Android

เปรียบเทียบเครื่องมือสแกนและวิเคราะห์เครือข่ายไร้สาย 10 รายการสำหรับ Windows, iOS และ Android พร้อมคำอธิบายที่ชัดเจนเกี่ยวกับช่องสัญญาณ Wi-Fi แผนที่ครอบคลุม การตรวจสอบ LAN และข้อจำกัดของแต่ละแพลตฟอร์ม