µ±Ç°Î»ÖãºÖ÷Ò³ > ²é¿´ÄÚÈÝ

ÅųýMySQLÖг£¼û´íÎóµÄʵÓÃÕÐÊõ

·¢²¼Ê±¼ä£º2021-07-19 00:00| ÓРλÅóÓѲ鿴

¼ò½é£º¡¾51CTO.com¿ìÒë¡¿MySQLÊÇOracleÓµÓеÄÒ»Öֹ㷺ʹÓõĿªÔ´¹ØϵÊý¾Ý¿â¹ÜÀíϵͳ(RDMS)¡£¶àÄêÀ´£¬ËüÊÇ»ùÓÚWebµÄÓ¦ÓÃÈí¼þµÄĬÈÏÑ¡Ôñ£¬ÓëÆäËûÊý¾Ý¿âÒýÇæÏà±ÈÈÔÈ»´óÊÜ»¶Ó­¡£ MySQLÊÇΪWebÓ¦ÓÃÈí¼þÉè¼ÆºÍÓÅ»¯µÄ£¬Ëü¹¹³ÉÁË»ùÓÚWebµÄ¸÷´óÓ¦ÓÃ(±ÈÈçFacebook¡¢Twitter¡¢¡­¡­

ÅųýMySQLÖг£¼û´íÎóµÄʵÓÃÕÐÊõ

¡¾51CTO.com¿ìÒë¡¿MySQLÊÇOracleÓµÓеÄÒ»Öֹ㷺ʹÓõĿªÔ´¹ØϵÊý¾Ý¿â¹ÜÀíϵͳ(RDMS)¡£¶àÄêÀ´£¬ËüÊÇ»ùÓÚWebµÄÓ¦ÓÃÈí¼þµÄĬÈÏÑ¡Ôñ£¬ÓëÆäËûÊý¾Ý¿âÒýÇæÏà±ÈÈÔÈ»´óÊÜ»¶Ó­¡£

MySQLÊÇΪWebÓ¦ÓÃÈí¼þÉè¼ÆºÍÓÅ»¯µÄ£¬Ëü¹¹³ÉÁË»ùÓÚWebµÄ¸÷´óÓ¦ÓÃ(±ÈÈçFacebook¡¢Twitter¡¢WikipediaºÍYouTubeµÈ)µÄ±ØÒª²¿·Ö¡£

ÄãµÄÍøÕ¾»òWebÓ¦ÓÃÈí¼þÊÇ·ñ»ùÓÚMySQL?ÎÒÃÇÔÚ±¾ÎÄÖн«½âÊÍÈçºÎÅųýMySQLÊý¾Ý¿â·þÎñÆ÷ÖеÄÎÊÌâºÍ³£¼û´íÎó¡£ÎÒÃǽ«ÃèÊöÈçºÎ²éÃ÷ÎÊÌâµÄÔ­ÒòÒÔ¼°ÈçºÎ½â¾öÎÊÌâ¡£

1. ÎÞ·¨Á¬½Óµ½±¾µØMySQL·þÎñÆ÷

MySQLÖг£¼ûµÄ¿Í»§»úµ½·þÎñÆ÷Á¬½Ó´íÎóÖ®Ò»ÊÇ“ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)”¡£

ͼ1. ÎÞ·¨Á¬½Óµ½±¾µØMySQL·þÎñÆ÷

¸Ã´íÎó±íʾÖ÷»úϵͳÉÏûÓÐMySQL·þÎñÆ÷(mysqld)ÔÚÔËÐУ¬»òÕß³¢ÊÔÁ¬½Óµ½·þÎñÆ÷ʱָ¶¨ÁË´íÎóµÄUnixÌ×½Ó×ÖÎļþÃû»òTCP/IP¶Ë¿Ú¡£

½áºÏʹÓÃpsÃüÁîºÍgrepÃüÁ¼ì²éÊý¾Ý¿â·þÎñÆ÷Ö÷»úÉÏÃûΪmysqldµÄ½ø³Ì£¬ÒÔ´ËÈ·±£·þÎñÆ÷ÔÚÔËÐУ¬ÈçͼËùʾ¡£

  1. $ ps xa | grep mysqld | grep -v mysqld 

Èç¹ûÉÏÊöÃüÁîδÏÔʾÊä³ö£¬Ôò±íʾÊý¾Ý¿â·þÎñÆ÷ûÔÚÔËÐС£Òò´Ë¿Í»§»úÎÞ·¨Á¬½Óµ½Ëü¡£ÒªÆô¶¯·þÎñÆ÷£¬ÔËÐÐÏÂÁÐsystemctlÃüÁî¡£

  1. $ sudo systemctl start mysql #Debian/Ubuntu  
  2. $ sudo systemctl start mysqld #RHEL/CentOS/Fedora  

ÒªÑéÖ¤MySQL·þÎñ״̬£¬ÇëʹÓÃÏÂÁÐÃüÁî¡£

  1. $ sudo systemctl status mysql #Debian/Ubuntu  
  2. $ sudo systemctl status mysqld #RHEL/CentOS/Fedora 

ͼ2. ¼ì²éMySQL״̬

¿ÉÒÔ´ÓÉÏÊöÃüÁîµÄÊä³ö¿´³ö£¬MySQL·þÎñʧ°Ü¡£ÕâÖÖÇé¿öÏ£¬Äã¿ÉÒÔ³¢ÊÔÖØÐÂÆô¶¯£¬Ôٴμì²é״̬¡£

  1. $ sudo systemctl restart mysql  
  2. $ sudo systemctl status mysql 

ͼ3. ÖØÐÂÆô¶¯MySQL²¢Ñé֤״̬

´ËÍ⣬Èç¹û·þÎñÆ÷ÔÚÔËÐУ¬ÈçÏÂÁÐÃüÁîËùʾ£¬µ«ÄãÈÔ¿´µ½ÉÏÊö´íÎ󣬻¹Ó¦ÑéÖ¤TCP/IP¶Ë¿ÚÊÇ·ñ±»·À»ðǽ×èÖ¹»òÈκζ˿ÚÔÚ×èÖ¹·þÎñ¡£

  1. $ ps xa | grep mysqld | grep -v mysqld 

ÒªÕÒµ½·þÎñÆ÷ÔÚÕìÌýµÄ¶Ë¿Ú£¬Ê¹ÓÃnetstatÃüÁÈçÏÂËùʾ¡£

  1. $ sudo netstat -tlpn | grep "mysql" 

2. ÎÞ·¨Á¬½Óµ½MySQL·þÎñÆ÷

ÁíÒ»¸ö³£Óöµ½µÄÁ¬½Ó´íÎóÊÇ“(2003) Can’t connect to MySQL server on ‘server’ (10061)”£¬ÕâÒâζ×ÅÍøÂçÁ¬½Ó±»¾Ü¾ø¡£

ÔÚÕâÀÏȼì²éMySQL·þÎñÆ÷ÊÇ·ñÔÚϵͳÉÏÔËÐУ¬ÈçÉÏËùʾ¡£»¹ÒªÈ·±£·þÎñÆ÷ÒÑÆôÓÃÍøÂçÁ¬½Ó£¬ÓÃÓÚÁ¬½ÓµÄÍøÂç¶Ë¿ÚÊÇ·þÎñÆ÷ÉÏÅäÖõÄÄǸö¶Ë¿Ú¡£

ÊÔͼÁ¬½Óµ½MySQL·þÎñÆ÷ʱ¿ÉÄÜ»áÓöµ½µÄÆäËû³£¼û´íÎóÓУº

  1. ERROR 2003: Can't connect to MySQL server on 'host_name' (111)  
  2. ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)  

ÕâЩ´íÎó±íÃ÷·þÎñÆ÷¿ÉÄÜÔÚÔËÐУ¬µ«ÄãÊÔͼʹÓÃÓбðÓÚ·þÎñÆ÷ÔÚÕìÌýµÄTCP/IP¶Ë¿Ú¡¢ÃüÃû¹ÜµÀ»òUnixÌ×½Ó×ÖÎļþÀ´½øÐÐÁ¬½Ó¡£

3. MySQLÖзÃÎʱ»¾Ü¾ø´íÎó

ÔÚMySQLÖУ¬Óû§ÕÊ»§ÊǸù¾ÝÓû§ÃûºÍÓû§Á¬½Óµ½·þÎñÆ÷ËùÓõĿͻ§»úÖ÷»ú»òÖ÷»úÀ´¶¨ÒåµÄ¡£´ËÍ⣬ÕÊ»§»¹¿ÉÄÜÓµÓÐÉí·ÝÑé֤ƾ¾Ý£¬±ÈÈçÃÜÂë¡£

ËäÈ»“·ÃÎʱ»¾Ü¾ø”´íÎóÓÐÐí¶à²»Í¬µÄÔ­Òò£¬µ«Ò»¸ö³£¼ûÔ­ÒòÓë·þÎñÆ÷ÔÊÐí¿Í»§»ú³ÌÐòÔÚÁ¬½ÓʱʹÓõÄMySQLÕÊ»§Óйء£Ëü±íʾÁ¬½ÓÖÐÖ¸¶¨µÄÓû§ÃûûÓзÃÎÊÊý¾Ý¿âµÄȨÏÞ¡£

MySQLÔÊÐí´´½¨Ê¹¿Í»§»úÓû§Äܹ»Á¬½Óµ½·þÎñÆ÷²¢·ÃÎÊ·þÎñÆ÷¹ÜÀíµÄÊý¾ÝµÄÕÊ»§¡£ÔÚÕâ·½Ã棬Èç¹ûÄãÓöµ½·ÃÎʱ»¾Ü¾ø´íÎ󣬼ì²éÊÇ·ñÔÊÐíÓû§ÕÊ»§Í¨¹ýÄãËùʹÓõĿͻ§»ú³ÌÐòÁ¬½Óµ½·þÎñÆ÷¡£

¿ÉÒÔͨ¹ýÔËÐÐSHOW GRANTSÃüÁî²é¿´Ä³¸öÌض¨ÕÊ»§ÓµÓеÄȨÏÞ£¬ÈçͼËùʾ¡£

  1. > SHOW GRANTS FOR 'tecmint'@'localhost'

¿ÉÒÔÔÚMySQL shellÖÐʹÓÃÏÂÁÐÃüÁ½«Ìض¨Êý¾Ý¿âÉÏÌض¨Óû§µÄȨÏÞÊÚÓèÔ¶³ÌIPµØÖ·¡£

  1. grant all privileges on *.test_db to 'tecmint'@'192.168.0.100' 
  2. > flush privileges 

´ËÍ⣬·ÃÎʱ»¾Ü¾ø´íÎóÒ²¿ÉÄÜÓÉÁ¬½Óµ½MySQLʱÓöµ½µÄÎÊÌâÒýÆð£¬Çë²ÎÔÄÇ°Ãæ½âÊ͵ĴíÎó¡£

4. ÓëMySQL·þÎñÆ÷µÄÁ¬½Ó¶Ï¿ª

ÓÉÓÚÏÂÁÐÔ­Òò£¬Äã¿ÉÄÜ»áÓöµ½¸Ã´íÎó£ºÍøÂçÁ¬½Ó²»Ô糩¡¢Á¬½Ó³¬Ê±»òBLOBÖµ³öÏÖÎÊÌâ(Öµ´óÓÚmax_allowed_pa​​cket)¡£Èç¹û³öÏÖÍøÂçÁ¬½ÓÎÊÌ⣬ȷ±£ÄãÓÐÁ¼ºÃµÄÍøÂçÁ¬½Ó£¬·ÃÎÊÔ¶³ÌÊý¾Ý¿â·þÎñÆ÷ʱÓÈΪÈç´Ë¡£

Èç¹ûÊÇÁ¬½Ó³¬Ê±ÎÊÌ⣬ÓÈÆäÊÇMySQLÊÔͼÓë·þÎñÆ÷³õʼÁ¬½Óʱ£¬¼Ó´óconnect_timeout²ÎÊýµÄÖµ¡£µ«ÊÇÈç¹ûBLOBÖµ´óÓÚmax_allowed_pa​​cket£¬ÐèÒªÔÚ/etc/my.cnf ÖеÄ[mysqld]»ò[client]²¿·ÖÏÂÃæΪmax_allowed_pa​​cketÉèÖøü¸ßµÄÖµ£¬ÈçͼËùʾ¡£

  1. [mysqld]  
  2. connect_timeout=100  
  3. max_allowed_packet=500M  

Èç¹ûÄãÎÞ·¨·ÃÎÊMySQLÅäÖÃÎļþ£¬¿ÉÒÔÔÚMySQL shellÖÐʹÓÃÏÂÁÐÃüÁîÀ´ÉèÖøÃÖµ¡£

  1. SET GLOBAL connect_timeout=100;  
  2. SET GLOBAL max_allowed_packet=524288000;  

5. MySQLÁ¬½ÓÌ«¶à

Èç¹ûMySQL¿Í»§»úÓöµ½“Ì«¶àÁ¬½Ó”´íÎ󣬱íʾËùÓпÉÓÃÁ¬½Ó±»ÆäËû¿Í»§»úʹÓá£Á¬½ÓÊýÁ¿(ĬÈÏΪ151)ÓÉmax_connectionsϵͳ±äÁ¿¿ØÖÆ;¿ÉÒÔͨ¹ýÔÚ/etc/my.cnfÅäÖÃÎļþÖмӴóÖµ¡¢ÔÊÐí¸ü¶àÁ¬½ÓÀ´½â¾öÎÊÌâ¡£

  1. [mysqld]  
  2. max_connections=1000  

6. Òç³öÄÚ´æMySQL

Èç¹ûÄãʹÓÃMySQL¿Í»§»ú³ÌÐòÔËÐвéѯ£¬Óöµ½´íÎó£¬Òâζ×ÅMySQLûÓÐ×ã¹»µÄÄÚ´æÀ´´æ´¢Õû¸ö²éѯ½á¹û¡£

***²½ÊÇÈ·±£²éѯÕýÈ·;Èç¹ûÕýÈ·£¬Ö´ÐÐÏÂÁвÙ×÷£º

  • Èç¹ûÄãÖ±½ÓʹÓÃMySQL¿Í»§»ú£¬ÓÃ--quick²ÎÊýÑ¡Ïî·ûÆô¶¯Ëü£¬½ûÓûº´æ½á¹û;»òÕß
  • Èç¹ûÄãʹÓÃMyODBCÇý¶¯³ÌÐò£¬ÅäÖÃÓû§½çÃæ(UI)ÓбêÖ¾·½ÃæµÄ¸ß¼¶Ñ¡Ï¡£Ñ¡ÖГDo not cache result”¡£

ÁíÒ»¸öºÜ°ôµÄ¹¤¾ßÊÇMySQL Tuner£¬Õâ¸öʵÓõĽű¾»áÁ¬½Óµ½ÔËÐÐÖеÄMySQL·þÎñÆ÷£¬ÔÚÈçºÎÅäÖÃÒÔ»ñµÃ¸ü¸ßÐÔÄÜ·½Ãæ¸ø³ö½¨Òé¡£

  1. $ sudo apt-get install mysqltuner #Debian/Ubuntu  
  2. $ sudo yum install mysqltuner #RHEL/CentOS/Fedora  
  3. $ mysqltuner  

ÏëÁ˽âMySQLÓÅ»¯ºÍÐÔÄܵ÷Óż¼ÇÉ£¬ÇëÔĶÁÎÒÃǵÄÎÄÕ£º¡¶15¸öʵÓõÄMySQL/MariaDBÐÔÄܵ÷ÕûºÍÓÅ»¯¼¼ÇÉ¡·(https://www.tecmint.com/mysql-mariadb-performance-tuning-and-optimization/)¡£

7. MySQL²»¶Ï±ÀÀ£

Èç¹ûÄãÓöµ½¸ÃÎÊÌ⣬Ӧ¸ÃÊÔ×ŲéÃ÷ÎÊÌâ¸ùÔ´ÊÇMySQL·þÎñÆ÷ÒÑËÀ»¹ÊÇ¿Í»§»ú´æÔÚÎÊÌâ¡£Çë×¢Ò⣬Ðí¶à·þÎñÆ÷±ÀÀ£ÊÇÓÉË𻵵ÄÊý¾ÝÎļþ»òË÷ÒýÎļþÒýÆðµÄ¡£

Äã¿ÉÒÔ¼ì²é·þÎñÆ÷״̬ÒÔÈ·¶¨Æô¶¯²¢ÔËÐÐÁ˶à¾Ã¡£

  1. $ sudo systemctl status mysql #Debian/Ubuntu  
  2. $ sudo systemctl status mysqld #RHEL/CentOS/Fedora  

»òÕߣ¬ÔËÐÐÏÂÁÐmysqladminÃüÁîÒÔ²éÕÒMySQL·þÎñÆ÷µÄÕý³£ÔËÐÐʱ¼ä¡£

  1. $ sudo mysqladmin version -p 

ͼ4. ²éÕÒMySQL·þÎñÆ÷µÄÕý³£ÔËÐÐʱ¼ä

ÆäËû½â¾ö·½°¸°üÀ¨µ«²»ÏÞÓÚÍ£Ö¹MySQL·þÎñÆ÷²¢ÆôÓõ÷ÊÔ£¬È»ºóÔÙ´ÎÆô¶¯·þÎñ¡£¿ÉÒÔ³¢ÊÔ´´½¨Ò»¸ö²âÊÔÓÃÀýÒÔ±ãÖØÏÖÎÊÌâ¡£´ËÍ⣬´ò¿ªÁíÒ»¸öÖն˴°¿Ú£¬²¢ÔËÐÐÏÂÁÐÃüÁÔÚÔËÐÐÆäËû²éѯʱÏÔʾMySQL½ø³ÌµÄͳ¼ÆÐÅÏ¢£º

  1. $ sudo mysqladmin -i 5 status 

»òÕß

  1. $ sudo mysqladmin -i 5 -r status 

½áÂÛ£º²éÃ÷µ¼ÖÂÎÊÌâ»ò´íÎóµÄÔ­Òò

ËäÈ»ÎÒÃÇÒѲ鿴ÁËһЩ³£¼ûµÄMySQLÎÊÌâºÍ´íÎ󣬻¹ÌṩÁËÅųýºÍ½â¾öÎÊÌâµÄ·½·¨£¬µ«Õï¶Ï´íÎóʱ×îÖØÒªµÄÊÇÃ÷°×Æ京Òå(¾ÍÊÇʲôÔÚµ¼Ö´íÎó)¡£

ÄÇôÈçºÎ²éÃ÷ÄØ?ÏÂÃ漸µã½«Ö¸µ¼ÄãÈçºÎÈ·¶¨µ¼ÖÂÎÊÌâµÄÔ­Òò£º

  • ***²½Ò²ÊÇ×îÖØÒªµÄ²½ÖèÊDz鿴´æ´¢ÔÚĿ¼/var/log/mysql/ÖеÄMySQLÈÕÖ¾¡£¿ÉÒÔʹÓÃtailµÈÃüÁîÐÐʵÓóÌÐòÀ´¶ÁÈ¡ÈÕÖ¾Îļþ¡£
  • Èç¹ûMySQL·þÎñÎÞ·¨Æô¶¯£¬Ê¹ÓÃsystemctl¼ì²éÆä״̬£¬»òʹÓÃsystemdϵÄjournetctl(´ø-xe±êÖ¾)ÃüÁîÀ´¼ì²éÎÊÌâ¡£
  • »¹¿ÉÒÔ¼ì²éϵͳÈÕÖ¾Îļþ£¬±ÈÈç/var/log/messages»òÀàËÆÎļþ£¬²éÕÒµ¼ÖÂÎÊÌâµÄÔ­Òò¡£
  • ³¢ÊÔʹÓÃMytop¡¢glances¡¢top¡¢ps»òhtopµÈ¹¤¾ß£¬¼ì²éÄĸö³ÌÐòÔÚÕ¼ÓÃËùÓÐCPU»òËø¶¨»úÆ÷£¬»òÕß¼ì²éÊÇ·ñºÄ¾¡ÁËÄÚ´æ¡¢´ÅÅ̿ռ䡢ÎļþÃèÊö·û»òÆäËûһЩÖØÒª×ÊÔ´¡£
  • ¼ÙÉèÎÊÌâ³öÔÚij¸öʧ¿ØµÄ½ø³Ì£¬Äã×ÜÊÇ¿ÉÒÔ³¢ÊÔÖÕÖ¹Ëü(ʹÓÃpkill»òkillʵÓóÌÐò)£¬ÒÔ±ãMySQLÕý³£¹¤×÷¡£
  • ¼ÙÉèmysqld·þÎñÆ÷µ¼ÖÂÎÊÌ⣬¿ÉÒÔÔËÐÐÃüÁmysqladmin -u root ping»òmysqladmin -u root processlist£¬»ñÈ¡À´×ÔËüµÄÈκÎÏìÓ¦¡£
  • Èç¹ûÊÔͼÁ¬½Óµ½MySQL·þÎñÆ÷ʱÎÊÌâ³öÔÚ¿Í»§»ú³ÌÐò£¬¼ì²éΪʲôËüδÕý³£¹¤×÷£¬³¢ÊÔ´ÓÖлñµÃÈκÎÊä³öÒÔÓÃÓÚÅųý¹ÊÕÏ¡£

Ô­ÎıêÌ⣺Useful Tips to Troubleshoot Common Errors in MySQL£¬×÷ÕߣºAaron Kili

¡¾51CTOÒë¸å£¬ºÏ×÷Õ¾µãתÔØÇë×¢Ã÷Ô­ÎÄÒëÕߺͳö´¦Îª51CTO.com¡¿


±¾ÎÄתÔØ×ÔÍøÂ磬ԭÎÄÁ´½Ó£ºhttp://www.51cto.com/
±¾Õ¾²¿·ÖÄÚÈÝתÔØÓÚÍøÂ磬°æȨ¹éÔ­×÷ÕßËùÓУ¬×ªÔØ֮ĿµÄÔÚÓÚ´«²¥¸ü¶àÓÅÐã¼¼ÊõÄÚÈÝ£¬ÈçÓÐÇÖȨÇëÁªÏµQQ/΢ÐÅ£º153890879ɾ³ý£¬Ð»Ð»£¡

ÍƼöͼÎÄ

  • ÖÜÅÅÐÐ
  • ÔÂÅÅÐÐ
  • ×ÜÅÅÐÐ

Ëæ»úÍƼö