ຄຳ ແນະ ນຳ ທີ່ເປັນປະໂຫຍດໃນການແກ້ໄຂບັນຫາຄວາມຜິດພາດທົ່ວໄປໃນ MySQL
MySQL ແມ່ນລະບົບການຄຸ້ມຄອງຖານຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບການເປີດກວ້າງ (RDMS) ທີ່ເປັນເຈົ້າຂອງໂດຍ Oracle. ໃນຫລາຍປີທີ່ຜ່ານມາແມ່ນທາງເລືອກທີ່ບໍ່ເປັນໄປໄດ້ ສຳ ລັບການ ນຳ ໃຊ້ໂປແກຼມທີ່ໃຊ້ເວບໄຊທ໌ແລະຍັງຄົງເປັນທີ່ນິຍົມເມື່ອປຽບທຽບກັບເຄື່ອງຈັກຖານຂໍ້ມູນອື່ນໆ.
MySQL ຖືກອອກແບບແລະເພີ່ມປະສິດທິພາບໃຫ້ກັບໂປແກຼມໃຊ້ເວບໄຊທ໌ - ມັນປະກອບເປັນສ່ວນ ສຳ ຄັນຂອງໂປແກຼມ ນຳ ໃຊ້ເວັບທີ່ ສຳ ຄັນເຊັ່ນ: Facebook, Twitter, Wikipedia, YouTube, ແລະອື່ນໆ.
ເວບໄຊທ໌ຫລືໂປແກຼມເວັບຂອງທ່ານໃຊ້ໂດຍ MySQL ບໍ? ໃນບົດຄວາມລະອຽດນີ້, ພວກເຮົາຈະອະທິບາຍວິທີການແກ້ໄຂບັນຫາແລະຂໍ້ຜິດພາດທົ່ວໄປໃນເຊີຟເວີຖານຂໍ້ມູນ MySQL. ພວກເຮົາຈະອະທິບາຍວິທີການ ກຳ ນົດສາເຫດຂອງບັນຫາແລະສິ່ງທີ່ຕ້ອງເຮັດເພື່ອແກ້ໄຂ.
1. ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບ Local MySQL Server
ໜຶ່ງ ໃນບັນດາລູກຄ້າທົ່ວໄປທີ່ມີຂໍ້ຜິດພາດໃນການເຊື່ອມຕໍ່ເຊີຟເວີໃນ MySQL ແມ່ນ“ ERROR 2002 (HY000): ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບເຄື່ອງແມ່ຂ່າຍຂອງ MySQL ໃນທ້ອງຖິ່ນໂດຍຜ່ານເຕົ້າສຽບ ‘/var/run/mysqld/mysqld.sock’ (2)”.
ຂໍ້ຜິດພາດນີ້ຊີ້ໃຫ້ເຫັນວ່າບໍ່ມີເຄື່ອງແມ່ຂ່າຍ MySQL (mysqld)
ແລ່ນຢູ່ໃນລະບົບໂຮດຕິ້ງຫຼືວ່າທ່ານໄດ້ລະບຸຊື່ເອກະສານຊັອກ Unix ທີ່ບໍ່ຖືກຕ້ອງຫຼືພອດ TCP/IP ເມື່ອພະຍາຍາມເຊື່ອມຕໍ່ກັບເຊີບເວີ.
ຮັບປະກັນວ່າເຊີບເວີ ກຳ ລັງເຮັດວຽກໂດຍການກວດສອບຂັ້ນຕອນທີ່ມີຊື່ວ່າ mysqld
ໃນໂຮດຂອງຖານຂໍ້ມູນຂອງທ່ານໂດຍໃຊ້ ຄຳ ສັ່ງ grep ຮ່ວມກັນດັ່ງທີ່ເຫັນ
$ ps xa | grep mysqld | grep -v mysqld
ຖ້າ ຄຳ ສັ່ງຂ້າງເທິງສະແດງໃຫ້ເຫັນວ່າບໍ່ມີຜົນຜະລິດ, ຫຼັງຈາກນັ້ນເຄື່ອງແມ່ຂ່າຍຂອງຖານຂໍ້ມູນບໍ່ເຮັດວຽກຢູ່. ສະນັ້ນລູກຄ້າບໍ່ສາມາດເຊື່ອມຕໍ່ກັບມັນໄດ້. ເພື່ອເລີ່ມຕົ້ນເຄື່ອງແມ່ຂ່າຍ, ໃຫ້ ດຳ ເນີນການ ຄຳ ສັ່ງ systemctl ຕໍ່ໄປນີ້.
$ sudo systemctl start mysql #Debian/Ubuntu $ sudo systemctl start mysqld #RHEL/CentOS/Fedora
ເພື່ອກວດສອບສະຖານະການບໍລິການ MySQL, ໃຊ້ ຄຳ ສັ່ງຕໍ່ໄປນີ້.
$ sudo systemctl status mysql #Debian/Ubuntu $ sudo systemctl status mysqld #RHEL/CentOS/Fedora
ຈາກຜົນໄດ້ຮັບຂອງ ຄຳ ສັ່ງຂ້າງເທິງ, ບໍລິການ MySQL ລົ້ມເຫລວ. ໃນກໍລະນີດັ່ງກ່າວ, ທ່ານສາມາດພະຍາຍາມເລີ່ມຕົ້ນ ໃໝ່ ແລະກວດເບິ່ງສະຖານະພາບຂອງມັນອີກຄັ້ງ.
$ sudo systemctl restart mysql $ sudo systemctl status mysql
ນອກຈາກນັ້ນ, ຖ້າ server ກຳ ລັງເຮັດວຽກຕາມທີ່ໄດ້ສະແດງໂດຍ ຄຳ ສັ່ງຕໍ່ໄປນີ້, ແຕ່ທ່ານຍັງເຫັນຂໍ້ຜິດພາດຂ້າງເທິງ, ທ່ານກໍ່ຄວນກວດສອບວ່າພອດ TCP/IP ຖືກບລັອກໂດຍ firewall ຫຼືບໍລິການບລັອກໃດໆ.
$ ps xa | grep mysqld | grep -v mysqld
ເຖິງ ຄຳ ສັ່ງ netstat ຕາມທີ່ສະແດງ.
$ sudo netstat -tlpn | grep "mysql"
2. ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບ MySQL Server
ຂໍ້ຜິດພາດໃນການເຊື່ອມຕໍ່ທີ່ພົບເລື້ອຍທີ່ສຸດແມ່ນ“ (2003) ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບ MySQL server ໃນ ‘server’ (10061)”, ຊຶ່ງ ໝາຍ ຄວາມວ່າການເຊື່ອມຕໍ່ເຄືອຂ່າຍຖືກປະຕິເສດ.
ທີ່ນີ້, ເລີ່ມຕົ້ນໂດຍກວດເບິ່ງວ່າມີ server MySQL ກຳ ລັງເຮັດວຽກຢູ່ໃນລະບົບດັ່ງທີ່ສະແດງຢູ່ຂ້າງເທິງ. ພ້ອມທັງຮັບປະກັນວ່າເຄື່ອງແມ່ຂ່າຍມີການເຊື່ອມຕໍ່ເຄືອຂ່າຍທີ່ຖືກເປີດໃຊ້ແລະວ່າພອດເຄືອຂ່າຍທີ່ທ່ານ ກຳ ລັງໃຊ້ເພື່ອເຊື່ອມຕໍ່ແມ່ນເຄື່ອງທີ່ຕັ້ງຢູ່ໃນເຊີບເວີ.
ຂໍ້ຜິດພາດທົ່ວໄປອື່ນໆທີ່ທ່ານມັກຈະພົບໃນເວລາທີ່ທ່ານພະຍາຍາມເຊື່ອມຕໍ່ກັບ MySQL server ຄື:
ERROR 2003: Can't connect to MySQL server on 'host_name' (111) ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
ຂໍ້ຜິດພາດເຫລົ່ານີ້ສະແດງໃຫ້ເຫັນວ່າ server ອາດ ກຳ ລັງເຮັດວຽກຢູ່, ເຖິງຢ່າງໃດກໍ່ຕາມ, ທ່ານ ກຳ ລັງພະຍາຍາມເຊື່ອມຕໍ່ໂດຍໃຊ້ພອດ TCP/IP, ຊື່ທໍ່, ຫຼື Unix socket file ແຕກຕ່າງຈາກບ່ອນທີ່ server ຟັງ.
3. ການເຂົ້າເຖິງຂໍ້ຜິດພາດທີ່ຖືກປະຕິເສດໃນ MySQL
ໃນ MySQL, ບັນຊີຜູ້ໃຊ້ຖືກ ກຳ ນົດໃນແງ່ຂອງຊື່ຜູ້ໃຊ້ແລະລູກຄ້າຫລືເຈົ້າພາບທີ່ຜູ້ໃຊ້ສາມາດເຊື່ອມຕໍ່ກັບ server. ນອກຈາກນັ້ນ, ບັນຊີຍັງອາດຈະມີຂໍ້ມູນຢັ້ງຢືນຄວາມຖືກຕ້ອງເຊັ່ນ: ລະຫັດຜ່ານ.
ເຖິງແມ່ນວ່າມີຫຼາຍສາເຫດທີ່ແຕກຕ່າງກັນຂອງຂໍ້ຜິດພາດ“ ການເຂົ້າເຖິງຖືກປະຕິເສດ”, ໜຶ່ງ ໃນສາເຫດທົ່ວໄປແມ່ນກ່ຽວຂ້ອງກັບບັນຊີ MySQL ທີ່ເຊີຟເວີອະນຸຍາດໃຫ້ໂປແກຼມລູກຄ້າໃຊ້ໃນເວລາທີ່ເຊື່ອມຕໍ່. ມັນຊີ້ໃຫ້ເຫັນວ່າຊື່ຜູ້ໃຊ້ທີ່ລະບຸໄວ້ໃນການເຊື່ອມຕໍ່ບໍ່ມີສິດທິພິເສດໃນການເຂົ້າເຖິງຖານຂໍ້ມູນ.
MySQL ອະນຸຍາດໃຫ້ສ້າງບັນຊີທີ່ຊ່ວຍໃຫ້ລູກຄ້າສາມາດເຊື່ອມຕໍ່ກັບເຊີບເວີແລະເຂົ້າເຖິງຂໍ້ມູນທີ່ຄຸ້ມຄອງໂດຍ server. ໃນເລື່ອງນີ້, ຖ້າທ່ານພົບຂໍ້ຜິດພາດທີ່ຖືກປະຕິເສດ, ກວດເບິ່ງວ່າບັນຊີຜູ້ໃຊ້ຖືກອະນຸຍາດໃຫ້ເຊື່ອມຕໍ່ກັບເຊີບເວີຜ່ານໂປແກຼມລູກຄ້າທີ່ທ່ານ ກຳ ລັງໃຊ້ຢູ່ຫຼືບໍ່, ແລະອາດຈະເປັນເຈົ້າພາບທີ່ເຊື່ອມຕໍ່ມາຈາກ.
ທ່ານສາມາດເຫັນສິດທິພິເສດທີ່ບັນຊີມອບໃຫ້ໂດຍການໃຊ້ ຄຳ ສັ່ງ SHOW GRANTS
ຕາມທີ່ສະແດງ.
> SHOW GRANTS FOR 'tecmint'@'localhost';
ທ່ານສາມາດໃຫ້ສິດທິພິເສດແກ່ຜູ້ໃຊ້ສະເພາະໃນຖານຂໍ້ມູນສະເພາະຕໍ່ທີ່ຢູ່ ip ຫ່າງໄກສອກຫຼີກໂດຍໃຊ້ ຄຳ ສັ່ງຕໍ່ໄປນີ້ໃນ MySQL shell.
> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100'; > flush privileges;
ຍິ່ງໄປກວ່ານັ້ນ, ການເຂົ້າເຖິງຂໍ້ຜິດພາດທີ່ຖືກປະຕິເສດຍັງສາມາດເປັນຜົນມາຈາກບັນຫາກ່ຽວກັບການເຊື່ອມຕໍ່ກັບ MySQL, ໂດຍອ້າງອີງໃສ່ຂໍ້ຜິດພາດທີ່ໄດ້ອະທິບາຍຜ່ານມາ.
4. ຂາດການເຊື່ອມຕໍ່ກັບ MySQL Server
ທ່ານອາດຈະປະສົບກັບຄວາມຜິດພາດນີ້ຍ້ອນເຫດຜົນໃດ ໜຶ່ງ ຕໍ່ໄປນີ້: ການເຊື່ອມຕໍ່ເຄືອຂ່າຍທີ່ບໍ່ດີ, ໝົດ ເວລາການເຊື່ອມຕໍ່ຫລືບັນຫາທີ່ມີຄ່າ BLOB ທີ່ໃຫຍ່ກວ່າ max_allowed_packet. ໃນກໍລະນີຂອງບັນຫາການເຊື່ອມຕໍ່ເຄືອຂ່າຍ, ຮັບປະກັນວ່າທ່ານມີການເຊື່ອມຕໍ່ເຄືອຂ່າຍທີ່ດີໂດຍສະເພາະຖ້າທ່ານ ກຳ ລັງເຂົ້າເຖິງເຄື່ອງແມ່ຂ່າຍຖານຂໍ້ມູນທີ່ຢູ່ຫ່າງໄກສອກຫຼີກ.
ຖ້າມັນເປັນບັນຫາເວລາເຊື່ອມຕໍ່, ໂດຍສະເພາະເມື່ອ MySQL ກຳ ລັງພະຍາຍາມໃຊ້ການເຊື່ອມຕໍ່ເບື້ອງຕົ້ນກັບເຊີບເວີ, ເພີ່ມມູນຄ່າຂອງພາລາມິເຕີ connect_timeout. ແຕ່ໃນກໍລະນີຂອງຄ່າ BLOB ທີ່ມີຂະ ໜາດ ໃຫຍ່ກ່ວາ max_allowed_packet, ທ່ານ ຈຳ ເປັນຕ້ອງ ກຳ ນົດຄ່າທີ່ສູງກວ່າ ສຳ ລັບ max_allowed_packet ໃນເອກະສານການຕັ້ງຄ່າ /etc/my.cnf ຂອງທ່ານພາຍໃຕ້ [mysqld]
ຫຼື [ລູກຄ້າ]
ສ່ວນທີ່ສະແດງໄວ້.
[mysqld] connect_timeout=100 max_allowed_packet=500M
ຖ້າເອກະສານການຕັ້ງຄ່າຂອງ MySQL ບໍ່ສາມາດເຂົ້າເຖິງໄດ້, ທ່ານສາມາດ ກຳ ນົດຄ່ານີ້ໂດຍໃຊ້ ຄຳ ສັ່ງຕໍ່ໄປນີ້ໃນ MySQL shell.
> SET GLOBAL connect_timeout=100; > SET GLOBAL max_allowed_packet=524288000;
5. ການເຊື່ອມຕໍ່ MySQL ຫຼາຍເກີນໄປ
ໃນກໍລະນີທີ່ລູກຄ້າ MySQL ປະສົບກັບຄວາມຜິດພາດ“ ການເຊື່ອມຕໍ່ຫຼາຍເກີນໄປ”, ມັນ ໝາຍ ຄວາມວ່າການເຊື່ອມຕໍ່ທີ່ມີຢູ່ທັງ ໝົດ ແມ່ນໃຊ້ໂດຍລູກຄ້າຄົນອື່ນ. ຈຳ ນວນການເຊື່ອມຕໍ່ (ຄ່າເລີ່ມຕົ້ນແມ່ນ 151) ຖືກຄວບຄຸມໂດຍລະຫັດຂອງລະບົບ max_connections
; ທ່ານສາມາດແກ້ໄຂບັນຫາໂດຍການເພີ່ມມູນຄ່າຂອງມັນເພື່ອອະນຸຍາດໃຫ້ມີການເຊື່ອມຕໍ່ຫຼາຍຂື້ນໃນເອກະສານການຕັ້ງຄ່າ /etc/my.cnf ຂອງທ່ານ.
[mysqld] max_connections=1000
6. ອອກຈາກຄວາມ ຈຳ MySQL
ໃນກໍລະນີທີ່ທ່ານ ດຳ ເນີນການສອບຖາມໂດຍໃຊ້ໂປແກຼມລູກຄ້າ MySQL ແລະພົບຂໍ້ຜິດພາດໃນ ຄຳ ຖາມມັນ ໝາຍ ຄວາມວ່າ MySQL ບໍ່ມີຄວາມ ຈຳ ພຽງພໍທີ່ຈະເກັບຜົນໄດ້ຮັບແບບສອບຖາມທັງ ໝົດ.
ຂັ້ນຕອນ ທຳ ອິດແມ່ນເພື່ອຮັບປະກັນວ່າການສອບຖາມຖືກຕ້ອງ, ຖ້າຖືກ, ຫຼັງຈາກນັ້ນເຮັດດັ່ງຕໍ່ໄປນີ້:
- ຖ້າທ່ານ ກຳ ລັງໃຊ້ລູກຄ້າ MySQL ໂດຍກົງ, ເລີ່ມຕົ້ນດ້ວຍ
- ກົດປຸ່ມປິດ
, ເພື່ອປິດຜົນລັບທີ່ເກັບໄວ້ຫຼື - ຖ້າທ່ານ ກຳ ລັງໃຊ້ຄົນຂັບ MyODBC, ອິນເຕີເຟດຜູ້ໃຊ້ການຕັ້ງຄ່າ (UI) ມີແທັບທີ່ກ້າວ ໜ້າ ສຳ ລັບທຸງ. ກວດເບິ່ງ "ຢ່າເກັບຄ່າຜົນໄດ້ຮັບ".
ເຄື່ອງມືທີ່ດີອີກອັນ ໜຶ່ງ ແມ່ນ MySQL Tuner - ສະຄິບທີ່ເປັນປະໂຫຍດເຊິ່ງຈະເຊື່ອມຕໍ່ກັບເຊີຟເວີ MySQL ທີ່ ກຳ ລັງແລ່ນແລະໃຫ້ ຄຳ ແນະ ນຳ ກ່ຽວກັບວິທີທີ່ມັນສາມາດ ກຳ ນົດຄ່າໄດ້ ສຳ ລັບການເຮັດວຽກທີ່ສູງຂື້ນ.
$ sudo apt-get install mysqltuner #Debian/Ubuntu $ sudo yum install mysqltuner #RHEL/CentOS/Fedora $ mysqltuner
ສຳ ລັບ ຄຳ ແນະ ນຳ ກ່ຽວກັບການເພີ່ມປະສິດທິພາບຂອງ MySQL ແລະ ຄຳ ແນະ ນຳ ໃນການປັບແຕ່ງ, ອ່ານບົດຂຽນຂອງພວກເຮົາ: 15 ການປັບແຕ່ງ MySQL/MariaDB ທີ່ເປັນປະໂຫຍດແລະ ຄຳ ແນະ ນຳ ກ່ຽວກັບການເພີ່ມປະສິດທິພາບ.
7. MySQL ເຮັດໃຫ້ເກີດຄວາມກະວົນກະວາຍ
ຖ້າທ່ານປະສົບບັນຫານີ້, ທ່ານຄວນພະຍາຍາມຄົ້ນຫາວ່າບັນຫາມັນເຮັດໃຫ້ເຊີຟເວີ MySQL ເສຍຊີວິດຫຼືລູກຄ້າຂອງມັນມີປັນຫາຫລືບໍ່. ໃຫ້ສັງເກດວ່າເຄື່ອງແມ່ຂ່າຍຂອງອຸປະຕິເຫດຫຼາຍແມ່ນເກີດມາຈາກໄຟລ໌ຂໍ້ມູນທີ່ເສຍຫາຍຫຼືໄຟລ໌ດັດສະນີ.
ທ່ານສາມາດກວດສອບສະຖານະຂອງເຊີບເວີເພື່ອ ກຳ ນົດໄລຍະເວລາທີ່ມັນໄດ້ຖືກ ດຳ ເນີນງານແລະເຮັດວຽກຢູ່ດົນປານໃດ.
$ sudo systemctl status mysql #Debian/Ubuntu $ sudo systemctl status mysqld #RHEL/CentOS/Fedora
ອີກທາງເລືອກ, ດໍາເນີນການຄໍາສັ່ງ mysqladmin ຕໍ່ໄປນີ້ເພື່ອຊອກຫາເວລາຂອງເຄື່ອງແມ່ຂ່າຍ MySQL.
$ sudo mysqladmin version -p
ວິທີແກ້ໄຂອື່ນໆປະກອບມີແຕ່ບໍ່ ຈຳ ກັດການຢຸດເຊີຟເວີ MySQL ແລະເປີດໃຊ້ການແກ້ໄຂບັນຫາ, ຫຼັງຈາກນັ້ນໃຫ້ເລີ່ມການບໍລິການອີກຄັ້ງ. ທ່ານສາມາດທົດລອງໃຊ້ກໍລະນີທົດສອບເຊິ່ງສາມາດໃຊ້ເພື່ອແກ້ໄຂບັນຫາອີກຄັ້ງ. ນອກຈາກນັ້ນ, ເປີດປ່ອງຢ້ຽມຢູ່ປາຍທາງເພີ່ມເຕີມແລະດໍາເນີນການຄໍາສັ່ງຕໍ່ໄປນີ້ເພື່ອສະແດງສະຖິຕິຂະບວນການ MySQL ໃນຂະນະທີ່ທ່ານດໍາເນີນການສອບຖາມອື່ນໆຂອງທ່ານ:
$ sudo mysqladmin -i 5 status OR $ sudo mysqladmin -i 5 -r status
ເຖິງແມ່ນວ່າພວກເຮົາໄດ້ກວດເບິ່ງບາງບັນຫາແລະຂໍ້ຜິດພາດຂອງ MySQL ແລະຍັງໄດ້ໃຫ້ວິທີການແກ້ໄຂແລະແກ້ໄຂບັນຫາຕ່າງໆ, ສິ່ງທີ່ ສຳ ຄັນທີ່ສຸດໃນການວິນິດໄສຂໍ້ຜິດພາດແມ່ນການເຂົ້າໃຈຄວາມ ໝາຍ ຂອງມັນ (ໃນແງ່ຂອງສິ່ງທີ່ເປັນສາເຫດ).
ດັ່ງນັ້ນທ່ານສາມາດ ກຳ ນົດເລື່ອງນີ້ໄດ້ແນວໃດ? ຈຸດຕໍ່ໄປນີ້ຈະແນະ ນຳ ທ່ານກ່ຽວກັບວິທີການຄົ້ນຫາສິ່ງທີ່ກໍ່ໃຫ້ເກີດບັນຫາຢ່າງແນ່ນອນ:
<
/var/log/mysql/
. ທ່ານສາມາດໃຊ້ສິ່ງ ອຳ ນວຍຄວາມສະດວກໃນເສັ້ນ ຄຳ ສັ່ງເຊັ່ນຫາງເພື່ອອ່ານຜ່ານເອກະສານບັນທຶກ. -xe
) ພາຍໃຕ້ລະບົບເພື່ອກວດກາປັນຫາ. /var/log/messages
ຫຼືຄ້າຍຄືກັນ ສຳ ລັບເຫດຜົນຂອງທ່ານ. mysqladmin -u root ping
ຫຼື mysqladmin -u root processlist
ເພື່ອໃຫ້ໄດ້ຮັບ ຄຳ ຕອບໃດໆຈາກມັນ. ທ່ານອາດຈະຢາກອ່ານບົດຄວາມທີ່ກ່ຽວຂ້ອງກັບ MySQL ຕໍ່ໄປນີ້:
<
ສຳ ລັບຂໍ້ມູນເພີ່ມເຕີມ, ໃຫ້ປຶກສາປື້ມຄູ່ມືກ່ຽວກັບ MySQL Reference ທີ່ກ່ຽວຂ້ອງກັບບັນຫາແລະຂໍ້ຜິດພາດທົ່ວໄປ, ມັນມີລາຍຊື່ບັນຫາທົ່ວໄປແລະຂໍ້ຄວາມຜິດພາດທີ່ທ່ານອາດຈະພົບໃນຂະນະທີ່ໃຊ້ MySQL, ລວມທັງບັນດາຫົວຂໍ້ທີ່ພວກເຮົາໄດ້ກ່າວມາຂ້າງເທິງແລະອື່ນໆ.