最初想到的是利用
1、進入mysql,創建一個新用戶root,密碼為root: 格式:grant 權限 on 數據庫名.表名 to 用戶@登錄主機 identified by "用戶密碼";
代碼如下 復制代碼grant select,update,insert,delete on *.* to [email protected] identified by "root"; 原先數據表結構mysql> use mysql;
Database changed
mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-----------+------+-------------------------------------------+
可以看到在user表中已有剛才創建的root用戶。host字段表示登錄的主機,其值可以用IP,也可用主機名,
如果是在linux shell命令行中直接打 mysql 命令,能夠順利連上 MySQL,執行查詢語句也比較正常,但如果執行 STOP SLAVE; 命令時就隨機出現 ERROR 2013 (HY000): Lost connection to MySQL server during query 問題。而如果把操作命令寫到腳本文件再去執行該腳本文件的話,則必然出現
Lost connection to MySQL server at 'reading initial communication packet', system error: 111
要是無論通過什麼途徑遠程訪問都出現錯誤可以認為是系統有防火牆之類的限制,但現在這種奇怪的抽筋現象讓人百思不得其解。最後找到的解決方法是在 my.cnf 裡面的 [mysqld] 段增加一個啟動參數
代碼如下 復制代碼skip-name-resolve
原因分析
所謂反向解析是這樣的:
mysql接收到連接請求後,獲得的是客戶端的ip,為了更好的匹配mysql.user裡的權限記錄(某些是用hostname定義的)。
如果mysql服務器設置了dns服務器,並且客戶端ip在dns上並沒有相應的hostname,那麼這個過程很慢,導致連接等待。
添加skip-name-resolve以後就跳過著一個過程了。