{"id":334,"date":"2026-10-13T16:01:28","date_gmt":"2026-10-13T16:01:28","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2013\/05\/15\/mysql-basic-troubleshooting-guide\/"},"modified":"2026-10-13T16:01:28","modified_gmt":"2026-10-13T16:01:28","slug":"mysql-basic-troubleshooting-guide","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/mysql-basic-troubleshooting-guide\/","title":{"rendered":"MySQL Basic Troubleshooting Guide: Service, Port 3306, Logs, and Crash Repair"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2013\/05\/mysql-troubleshooting.png\" alt=\"mysql-troubleshooting\"\/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><em>Originally published on 2013-05-15; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MySQL incidents are often a mix of service state, configuration mistakes, port conflicts, and storage pressure. This guide gives a practical troubleshooting sequence for DevOps and operations teams, with command examples you can run on Linux hosts and notes for legacy setups still using older init scripts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fast triage workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use this order to avoid jumping between unrelated checks and to quickly isolate whether the problem is process, network, config, or storage related.<\/p>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Locate mysql and mysqld binaries] --> B[Check mysqld service status]\n    B --> C{Running}\n    C -- no --> D[Read error log and my.cnf paths]\n    D --> E[Fix config, permissions, or disk issues]\n    E --> F[Start service again]\n    C -- yes --> G[Check port 3306 listener and socket]\n    G --> H{Conflict found}\n    H -- yes --> I[Stop conflicting process or change port]\n    H -- no --> J[Test login and mysqladmin status]\n    J --> K[Review slow queries and host performance]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Confirm MySQL binaries and service state<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Start by confirming the client binary location, then verify whether <strong>mysqld<\/strong> is running.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">which mysql\nlocate mysql\nps -ef | grep &#91;m]ysqld<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Service control commands differ by init system. Many older guides use SysV-style commands; modern distributions usually use <strong>systemd<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Task<\/th><th>systemd-based Linux<\/th><th>SysV init (legacy)<\/th><\/tr><\/thead><tbody><tr><td>Check status<\/td><td>systemctl status mysqld<br\/>or systemctl status mysql<\/td><td>service mysqld status<\/td><\/tr><tr><td>Start \/ stop \/ restart<\/td><td>systemctl start|stop|restart mysqld<\/td><td>\/etc\/init.d\/mysqld start|stop|restart<br\/>or service mysqld start|stop|restart<\/td><\/tr><tr><td>If service is missing<\/td><td>Validate installed package\/service name<\/td><td>Legacy registration sometimes used chkconfig with scripts under \/etc\/init.d<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Check port 3306 binding and process conflicts<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If MySQL reports <strong>Address already in use<\/strong>, verify which process owns TCP 3306.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">ss -ltnp | grep :3306\nlsof -i TCP:3306\nnetstat -lp | grep 3306\nnetstat -tap | grep mysql\nps -aux | grep mysql<\/code><\/span><\/pre>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Command<\/th><th>Best use<\/th><th>What to look for<\/th><\/tr><\/thead><tbody><tr><td>ss -ltnp<\/td><td>Modern listener check<\/td><td>PID\/program bound to 3306<\/td><\/tr><tr><td>lsof -i TCP:3306<\/td><td>Process-to-port mapping<\/td><td>Whether mysqld owns the socket<\/td><\/tr><tr><td>netstat -lp \/ -tap<\/td><td>Legacy systems<\/td><td>Listener and owning process<\/td><\/tr><tr><td>ps &#8230; grep mysqld<\/td><td>Process existence check<\/td><td>Running daemon and possible duplicates<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If 3306 is not listening under mysqld, either MySQL is down or configured for another port\/socket in <strong>my.cnf<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Find my.cnf and verify critical settings<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When startup or connectivity fails, confirm configuration file location and validate key directives.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">whereis my.cnf\nlocate my.cnf\nfind \/ -name my.cnf\nstrace mysql <span class=\"hljs-string\">\";\"<\/span> <span class=\"hljs-number\">2<\/span>&gt;&amp;<span class=\"hljs-number\">1<\/span> | grep cnf<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Platform<\/th><th>Common default option files (original guide)<\/th><\/tr><\/thead><tbody><tr><td>Linux<\/td><td>\/etc\/my.cnf<br\/>\/etc\/mysql\/my.cnf<br\/>\/usr\/etc\/my.cnf<br\/>~\/.my.cnf<\/td><\/tr><tr><td>Windows<\/td><td>C:\\Windows\\my.ini<br\/>C:\\Windows\\my.cnf<br\/>C:\\my.ini<br\/>C:\\my.cnf<br\/>C:\\Program Files\\MySQL\\MySQL Server 5.5\\my.ini<br\/>C:\\Program Files\\MySQL\\MySQL Server 5.5\\my.cnf<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Important parameters to verify in <strong>my.cnf<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>datadir<\/strong> (data directory path)<\/li><li><strong>log-error<\/strong> (error log file path)<\/li><li><strong>pid-file<\/strong> (daemon PID file path)<\/li><li><strong>tmpdir<\/strong><\/li><li><strong>default-character-set<\/strong><\/li><li><strong>default-storage-engine<\/strong><\/li><li><strong>innodb_data_home_dir<\/strong> (if used)<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Diagnose startup failures from logs and filesystem state<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If mysqld will not start, check logs first, then ownership\/permissions of datadir and available disk space.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\"><span class=\"hljs-comment\"># Locate configured log path in my.cnf<\/span>\ngrep -R <span class=\"hljs-string\">\"log-error\\|datadir\\|pid-file\"<\/span> \/etc\/my.cnf \/etc\/mysql\/my.cnf <span class=\"hljs-number\">2<\/span>&gt;\/dev\/<span class=\"hljs-keyword\">null<\/span>\n\n<span class=\"hljs-comment\"># Review error output<\/span>\ntail -n <span class=\"hljs-number\">200<\/span> \/<span class=\"hljs-keyword\">var<\/span>\/log\/mysqld.log\n<span class=\"hljs-comment\"># or (systemd hosts)<\/span>\njournalctl -u mysqld -n <span class=\"hljs-number\">200<\/span> --no-pager\n\n<span class=\"hljs-comment\"># Check data directory permissions and free space<\/span>\nls -ld \/<span class=\"hljs-keyword\">var<\/span>\/lib\/mysql\ndf -h<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For local hostname resolution issues, verify localhost mapping exists:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">grep <span class=\"hljs-string\">\"127.0.0.1\"<\/span> \/etc\/hosts<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Recover crashed tables<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original guide shows table-crash errors during startup and uses SQL repair plus <strong>mysqlcheck<\/strong>. Start with targeted repair, then broaden if needed.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-sql\"><span class=\"hljs-selector-tag\">mysql<\/span> <span class=\"hljs-selector-tag\">-u<\/span> <span class=\"hljs-selector-tag\">root<\/span> <span class=\"hljs-selector-tag\">-p<\/span>\n<span class=\"hljs-selector-tag\">REPAIR<\/span> <span class=\"hljs-selector-tag\">TABLE<\/span> <span class=\"hljs-selector-tag\">database1<\/span><span class=\"hljs-selector-class\">.table1<\/span>;\n<span class=\"hljs-selector-tag\">SHOW<\/span> <span class=\"hljs-selector-tag\">CREATE<\/span> <span class=\"hljs-selector-tag\">DATABASE<\/span> <span class=\"hljs-selector-tag\">database1<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\"><span class=\"hljs-comment\"># Optimize + auto-repair one database<\/span>\nmysqlcheck -u username -p -o --auto-repair -v --optimize database_name\n\n<span class=\"hljs-comment\"># Check\/repair all databases<\/span>\nmysqlcheck -u root -p --auto-repair --check --optimize --all-databases<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>Note:<\/strong> behavior differs by storage engine. Validate engine-specific recovery steps before running repair operations broadly.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quick performance triage on host and MySQL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use short-interval OS metrics and then correlate with MySQL slow queries and error logs.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\">top\nvmstat <span class=\"hljs-number\">5<\/span>\niostat -x <span class=\"hljs-number\">5<\/span>\n\n<span class=\"hljs-comment\"># If slow query logging is enabled, inspect the log configured in my.cnf<\/span>\n<span class=\"hljs-comment\"># and review long-running statements<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tool<\/th><th>What it helps detect<\/th><th>Typical signal<\/th><\/tr><\/thead><tbody><tr><td>top<\/td><td>CPU contention by process<\/td><td>mysqld or non-MySQL process saturating CPU<\/td><\/tr><tr><td>vmstat 5<\/td><td>CPU, memory, and I\/O wait trend<\/td><td>High wa values over multiple samples<\/td><\/tr><tr><td>iostat -x 5<\/td><td>Disk saturation and latency<\/td><td>Busy device with sustained high utilization<\/td><\/tr><tr><td>Slow query log<\/td><td>Inefficient SQL<\/td><td>Repeated high-latency queries<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Use mysqladmin for quick health checks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>mysqladmin<\/strong> is useful for lightweight checks without entering the interactive MySQL shell.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">mysqladmin -h hostname -p ping\nmysqladmin -h hostname -p status\nmysqladmin -h hostname -p variables\nmysqladmin -h hostname -p processlist\nmysqladmin -h hostname -p flush-logs\nmysqladmin -h hostname -p flush-status\nmysqladmin -h hostname -p shutdown<\/code><\/span><\/pre>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>mysqladmin command<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td>ping<\/td><td>Check whether server is reachable<\/td><\/tr><tr><td>status<\/td><td>Short runtime summary (uptime, threads, queries)<\/td><\/tr><tr><td>variables<\/td><td>Show server variables and values<\/td><\/tr><tr><td>processlist<\/td><td>List active server threads<\/td><\/tr><tr><td>flush-logs<\/td><td>Rotate and reopen logs<\/td><\/tr><tr><td>shutdown<\/td><td>Stop server cleanly<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Connectivity checks from clients<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For network-level troubleshooting, test TCP reachability from the calling host.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\">telnet your_host_name <span class=\"hljs-number\">3306<\/span>\n<span class=\"hljs-comment\"># alternative if telnet is unavailable<\/span>\nnc -vz your_host_name <span class=\"hljs-number\">3306<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">References from the original post<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.5\/en\/mysqladmin.html\" target=\"_blank\" rel=\"noopener\">http:\/\/dev.mysql.com\/doc\/refman\/5.5\/en\/mysqladmin.html<\/a><\/li><li><a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.1\/en\/slow-query-log.html\" target=\"_blank\" rel=\"noopener\">http:\/\/dev.mysql.com\/doc\/refman\/5.1\/en\/slow-query-log.html<\/a><\/li><li><a href=\"http:\/\/www.linux-mag.com\/id\/7473\/\" target=\"_blank\" rel=\"noopener\">http:\/\/www.linux-mag.com\/id\/7473\/<\/a><\/li><li><a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.1\/en\/starting-server.html\" target=\"_blank\" rel=\"noopener\">http:\/\/dev.mysql.com\/doc\/refman\/5.1\/en\/starting-server.html<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Best practices and common pitfalls<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Always read the MySQL error log first before restarting repeatedly.<\/li><li>Do not assume service name is always <strong>mysqld<\/strong>; some systems use <strong>mysql<\/strong>.<\/li><li>Verify <strong>datadir<\/strong> ownership and free disk space during startup failures.<\/li><li>Confirm who owns TCP 3306 before changing configuration.<\/li><li>Use staged repair: single table, then single database, then all databases only when necessary.<\/li><li>Capture baseline metrics (CPU, memory, disk, slow queries) before and after fixes.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This Linux-first runbook helps you troubleshoot common MySQL issues quickly, from startup failures to port conflicts and slow performance. You will learn practical checks for service health, configuration, logging, and table repair.<\/p>\n","protected":false},"author":1,"featured_media":3783,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[49],"tags":[2380,2396,545,255,493,2394,2395,2393,2387,2398,2390,2391,2388,2389,2397,2392,293],"class_list":["post-334","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-general","tag-buildforge-server","tag-common-problems-in-mysql","tag-how","tag-issues","tag-mysql","tag-mysql-basic-issues","tag-mysql-basic-problems","tag-mysql-basic-troubleshooting","tag-mysql-common-issues","tag-mysql-guide","tag-mysql-issues","tag-mysql-problems","tag-mysql-troubleshooting","tag-mysql-troubleshooting-guide","tag-mysql-tutorial","tag-troubleshoot-mysql","tag-troubleshooting"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=334"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/334\/revisions"}],"predecessor-version":[{"id":79204,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/334\/revisions\/79204"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/3783"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}