錯誤資訊
使用RDS for MySQL,程式執行查詢SQL時報錯如下:
<div class="code-tools">
<i class="theme-switch-btn"></i><i class="copy-btn"></i>
</div>
<pre class="pre codeblock" id="codeblock-op1-mla-6o9"><code class="hljs pgsql"><span class="hljs-keyword">SELECT</span> command denied <span class="hljs-keyword">to</span> <span class="hljs-keyword">user</span> <span class="hljs-string">'username'</span>@<span class="hljs-string">'ip'</span> <span class="hljs-keyword">for</span> <span class="hljs-keyword">table</span> <span class="hljs-string">'user'</span> </code></pre>
<div class="pre-scrollbar-track" style="display: none;width: 100%;height: 4px;margin-bottom: 16px;">
<div class="pre-scrollbar-thumb" style="height: 100%;background-color: #d7d8d9;position: relative;"></div>
</div>
</div>
排查步驟
- 測試RDS執行個體是否異常。可以使用mysql用戶端連接配接到RDS,查詢對應的表,如果可以正常查詢,說明RDS沒有問題。
- 用Wireshark軟體抓包本機發出的實際請求:
- 在Wireshark界面中,選擇捕獲 > 選項,在輸入頁簽選擇連接配接RDS的内網網卡,在輸出頁簽填寫輸出的檔案名,然後單擊開始。
SELECT command denied to user 'username'@'ip' for table 'user'錯誤處理 - 複現問題,問題複現後,停止抓包。
- 在Wireshark界面中,選擇捕獲 > 選項,在輸入頁簽選擇連接配接RDS的内網網卡,在輸出頁簽填寫輸出的檔案名,然後單擊開始。
- 打開生成的抓封包件,在顯示過濾器裡輸入mysql,過濾出mysql協定,找到報錯的包。
SELECT command denied to user 'username'@'ip' for table 'user'錯誤處理 - 在報錯的條目上單擊右鍵,選擇追蹤流 > TCP流。
SELECT command denied to user 'username'@'ip' for table 'user'錯誤處理 -
檢查發送的SQL是否正确。
說明 上面的案例中,報錯原因在于庫名是fnb,而程式拼接出來的是hnb.user,資料庫名拼接錯誤導緻報錯, 修正資料庫名後問題解決。