天天看點

MySQL學習之路:多執行個體無法啟動排錯

由于我們的伺服器會借給我們部分公司使用,但是部分公司有沒有運維,都是開發直接操作,導緻出現一些問題後直接來找我處理。為此,也學習到很多。

近來,一哥們由于不知道操作什麼導緻伺服器直接挂掉,于是我聯系機房啟動機器後檢視日志,沒有發現什麼明顯的日志,隻是有一條watchdog的日志資訊。于是又多方搜尋關于watchdog的相關知識。發現的也大緻是皮毛而已,也有部分送出一些核心資訊是關于watchdog的bug。此處也無法做什麼排查的(主要還是我的技術不精)。隻能推測是開發使用應用程式觸發了watchdog的監控。在指定時間内watchdog檢測不通過導緻reboot或者shutdown。好在這台機器他們隻是測試使用。沒有什麼重要的業務。

不過不久後他們又呼叫我mysql多執行個體的3308端口無法啟動。于是我又上機器排查。

登陸機器後首先檢視下端口:

1

2

3

4

5

6

7

<code># ss -tunl</code>

<code>Netid Recv</code><code>-</code><code>Q Send</code><code>-</code><code>Q                                             Local Address:Port                                               Peer Address:Port </code>

<code>tcp   </code><code>0</code>      <code>64</code>                                                            <code>:::</code><code>873</code>                                                          <code>:::</code><code>*</code>     

<code>tcp   </code><code>0</code>      <code>50</code>                                                             <code>*</code><code>:</code><code>3306</code>                                                          <code>*</code><code>:</code><code>*</code>     

<code>tcp   </code><code>0</code>      <code>128</code>                                                           <code>:::</code><code>11211</code>                                                        <code>:::</code><code>*</code>     

<code>tcp   </code><code>0</code>      <code>128</code>                                                            <code>*</code><code>:</code><code>11211</code>                                                         <code>*</code><code>:</code><code>*</code>     

<code>tcp   </code><code>0</code>      <code>50</code>                                                             <code>*</code><code>:</code><code>3307</code>                                                          <code>*</code><code>:</code><code>*</code>

檢視上述确實是沒有3308端口,于是又檢視下配置檔案。看看他們的具體配置是怎麼樣的。

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

<code># cat /etc/my.cnf</code>

<code>[client]</code>

<code>#port       = 3306</code>

<code>default</code><code>-</code><code>character</code><code>-</code><code>set</code> <code>=</code> <code>utf8</code>

<code>#socket     = /usr/local/mysql/mysql.sock</code>

<code>[mysqld_multi]</code>

<code>mysqld </code><code>=</code> <code>/</code><code>data0</code><code>/</code><code>mysql</code><code>/</code><code>bin</code><code>/</code><code>mysqld_safe</code>

<code>mysqladmin </code><code>=</code> <code>/</code><code>data0</code><code>/</code><code>mysql</code><code>/</code><code>bin</code><code>/</code><code>mysqladmin</code>

<code>[mysqld1]</code>

<code>socket          </code><code>=</code> <code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>mysql1.sock</code>

<code>port            </code><code>=</code> <code>3306</code>

<code>pid</code><code>-</code><code>file</code>        <code>=</code> <code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>mysql1.pid</code>

<code>datadir         </code><code>=</code> <code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>data1</code>

<code>user            </code><code>=</code> <code>mysql</code>

<code>log             </code><code>=</code> <code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>msyql</code><code>/</code><code>e1.log</code>

<code>server</code><code>-</code><code>id</code>   <code>=</code> <code>1</code>

<code>skip</code><code>-</code><code>name</code><code>-</code><code>resolve</code>

<code>character</code><code>-</code><code>set</code><code>-</code><code>server    </code><code>=</code> <code>utf8</code>

<code>log</code><code>-</code><code>bin</code><code>-</code><code>trust</code><code>-</code><code>function</code><code>-</code><code>creators</code><code>=</code><code>1</code>

<code>back_log       </code><code>=</code> <code>50</code>

<code>max_connections    </code><code>=</code> <code>500</code>

<code>max_connect_errors     </code><code>=</code> <code>32</code>

<code>max_allowed_packet     </code><code>=</code> <code>16M</code>

<code>table_cache        </code><code>=</code> <code>2048</code>

<code>binlog_cache_size  </code><code>=</code> <code>1M</code>

<code>max_heap_table_size    </code><code>=</code> <code>64M</code>

<code>tmp_table_size         </code><code>=</code> <code>64M</code>

<code>#binlog_format      = "MIXED"</code>

<code>key_buffer_size    </code><code>=</code> <code>32M</code>

<code>read_buffer_size   </code><code>=</code> <code>2M</code>

<code>read_rnd_buffer_size   </code><code>=</code> <code>16M</code>

<code>bulk_insert_buffer_size </code><code>=</code> <code>64M</code>

<code>sort_buffer_size   </code><code>=</code> <code>8M</code>

<code>join_buffer_size   </code><code>=</code> <code>8M</code>

<code>thread_cache_size  </code><code>=</code> <code>8</code>

<code>thread_concurrency     </code><code>=</code> <code>8</code>

<code>thread_stack       </code><code>=</code> <code>192K</code>

<code>slow_query_log</code>

<code>long_query_time </code><code>=</code> <code>2</code>

<code>log</code><code>-</code><code>short</code><code>-</code><code>format</code>

<code>myisam_sort_buffer_size    </code><code>=</code> <code>128M</code>

<code>myisam_max_sort_file_size  </code><code>=</code> <code>10G</code>

<code>myisam_repair_threads      </code><code>=</code> <code>1</code>

<code>myisam_recover</code>

<code>[mysqld2]</code>

<code>socket          </code><code>=</code> <code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>mysql2.sock</code>

<code>port            </code><code>=</code> <code>3308</code>

<code>pid</code><code>-</code><code>file</code>        <code>=</code> <code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>mysql2.pid</code>

<code>datadir         </code><code>=</code> <code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>data2</code>

<code>log             </code><code>=</code> <code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>msyql</code><code>/</code><code>e2.log</code>

<code>[mysqldump]</code>

<code>quick</code>

<code>max_allowed_packet </code><code>=</code> <code>16M</code>

<code>[mysql]</code>

<code>no</code><code>-</code><code>auto</code><code>-</code><code>rehash</code>

<code>[isamchk]</code>

<code>key_buffer      </code><code>=</code> <code>512M</code>

<code>sort_buffer_size </code><code>=</code> <code>512M</code>

<code>read_buffer     </code><code>=</code> <code>8M</code>

<code>write_buffer    </code><code>=</code> <code>8M</code>

<code>[myisamchk]</code>

<code>[mysqlhotcopy]</code>

<code>interactive</code><code>-</code><code>timeout</code>

<code>[mysqld_safe]</code>

<code>open</code><code>-</code><code>files</code><code>-</code><code>limit </code><code>=</code> <code>8192</code>

配置檔案如上,主要是看下資料目錄和sock檔案目錄以及pid存放位置和log位置。

然後就是到指定目錄下,檢視相關資訊。

<code># ls</code>

<code>3307</code>  <code>data1  docs    e2.log   lib       mysql2</code><code>-</code><code>slow.log  mysql</code><code>-</code><code>test  sql</code><code>-</code><code>bench</code>

<code>bin</code>   <code>data2  e1.log  include  libexec  mysql1</code><code>-</code><code>slow.log  mysql2.pid   mysql2.sock      share       var</code>

看到上述情況我真是很郁悶了,這完全和配置檔案對不上啊。明明mysql2.sock和pid檔案存在,為毛卻監聽的是3306端口呢?此時就很郁悶了,于是又ps -ef | grep mysql看了下路徑。不看不知道,看了下就更不對勁了。

<code># ps -ef | grep mysql</code>

<code>root     </code><code>18634</code>     <code>1</code>  <code>0</code> <code>Jan12 ?        </code><code>00</code><code>:</code><code>00</code><code>:</code><code>00</code> <code>/</code><code>bin</code><code>/</code><code>sh </code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>bin</code><code>/</code><code>mysqld_safe </code><code>-</code><code>-</code><code>datadir</code><code>=</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>var </code><code>-</code><code>-</code><code>pid</code><code>-</code><code>file</code><code>=</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>var</code><code>/</code><code>localhost.localdomain.pid</code>

<code>mysql    </code><code>18763</code> <code>18634</code>  <code>0</code> <code>Jan12 ?        </code><code>00</code><code>:</code><code>00</code><code>:</code><code>39</code> <code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>bin</code><code>/</code><code>mysqld </code><code>-</code><code>-</code><code>basedir</code><code>=</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql </code><code>-</code><code>-</code><code>datadir</code><code>=</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>var </code><code>-</code><code>-</code><code>plugin</code><code>-</code><code>dir</code><code>=</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>lib</code><code>/</code><code>plugin </code><code>-</code><code>-</code><code>user</code><code>=</code><code>mysql </code><code>-</code><code>-</code><code>log</code><code>-</code><code>error</code><code>=</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>var</code><code>/</code><code>localhost.localdomain.err </code><code>-</code><code>-</code><code>pid</code><code>-</code><code>file</code><code>=</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>var</code><code>/</code><code>localhost.localdomain.pid </code><code>-</code><code>-</code><code>socket</code><code>=</code><code>/</code><code>tmp</code><code>/</code><code>mysql.sock  </code><code>-</code><code>-</code><code>port</code><code>=</code><code>3306</code>

<code>root     </code><code>29805</code> <code>29780</code>  <code>0</code> <code>14</code><code>:</code><code>40</code> <code>pts</code><code>/</code><code>0</code>    <code>00</code><code>:</code><code>00</code><code>:</code><code>00</code> <code>grep mysql</code>

想必此時很多大神一眼就知道問題在哪裡了。可惜我不是大神。一時也沒想到那麼多。于是一步一步的來往下查啊。我這裡想到的是TM的居然啟動了預設的mysql。于是我就停掉了這個3306這個端口。

删除了mysql2.sock和pid檔案。再啟動一次:

mysqld_multi start 1,2

可是事與願違,3306端口還是起來了。但是3308還是沒起來。于是再次ps -ef | grep mysql檢視到mysqld_safe的程序起了兩個,反正相同的都是兩個。你懂得。這麼奇葩。于是我再次kill掉。

再次啟動時我先監控着多執行個體的日志:

tail -f mysqld_multi.log

<code>mysqld_multi log </code><code>file</code> <code>version </code><code>2.16</code><code>; run: Fri Jan </code><code>16</code> <code>13</code><code>:</code><code>53</code><code>:</code><code>44</code> <code>2015</code>

<code>Starting MySQL servers</code>

<code>150116</code> <code>13</code><code>:</code><code>53</code><code>:</code><code>44</code> <code>[ERROR] Fatal error: Please read </code><code>"Security"</code> <code>section of the manual to find out how to run mysqld as root!</code>

<code>150116</code> <code>13</code><code>:</code><code>53</code><code>:</code><code>44</code> <code>[ERROR] Aborting</code>

<code>150116</code> <code>13</code><code>:</code><code>53</code><code>:</code><code>44</code> <code>[Note] </code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>libexec</code><code>/</code><code>mysqld: Shutdown complete</code>

<code>mysqld_multi log </code><code>file</code> <code>version </code><code>2.16</code><code>; run: Fri Jan </code><code>16</code> <code>13</code><code>:</code><code>56</code><code>:</code><code>32</code> <code>2015</code>

就類似上面這種。報錯資訊大緻反映的就是不能以root啟動這個意思。但是mysql的配置檔案裡指定的就是mysql使用者。于是我又檢視了資料目錄的檔案夾權限等亂七八糟的一堆。感覺都是很正常的。到這裡時我就特别的郁悶了。那到底是哪裡的問題呢。

于是我就去找錯誤日志,但是發現var下面的.err的日志居然沒有記錄。我思前想後難道是配置檔案沒有生效?此時的我隻能先發會呆。

發完呆後我又仔細仔細看了看日志和配置檔案。終于發現問題了。mysqld_multi的配置和mysqld下面的路徑不一緻啊。

于是再次的使用指定目錄下面的啟動腳本,并加以選項。這次雖然還是沒能出現所要的結果。但是日志已經很明顯的指出問題所在了。

<code># tail -f mysqld_multi.log</code>

<code>mysqld_multi log </code><code>file</code> <code>version </code><code>2.16</code><code>; run: Fri Jan </code><code>16</code> <code>14</code><code>:</code><code>10</code><code>:</code><code>30</code> <code>2015</code>

<code>150116</code> <code>14</code><code>:</code><code>10</code><code>:</code><code>30</code> <code>mysqld_safe Logging to </code><code>'/usr/local/mysql/var/localhost.localdomain.err'</code><code>.</code>

<code>cat: </code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>var</code><code>/</code><code>localhost.localdomain.pid: No such </code><code>file</code> <code>or</code> <code>directory</code>

<code>150116</code> <code>14</code><code>:</code><code>10</code><code>:</code><code>30</code> <code>mysqld_safe Starting mysqld daemon with databases </code><code>from</code> <code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>var</code>

<code>mysqld_multi log </code><code>file</code> <code>version </code><code>2.16</code><code>; run: Fri Jan </code><code>16</code> <code>14</code><code>:</code><code>15</code><code>:</code><code>39</code> <code>2015</code>

于是配置一個mysql的環境變量,效果立馬見效。

<code>150116</code> <code>14</code><code>:</code><code>15</code><code>:</code><code>39</code> <code>mysqld_safe Logging to </code><code>'/usr/local/mysql/data1/localhost.localdomain.err'</code><code>.</code>

<code>150116</code> <code>14</code><code>:</code><code>15</code><code>:</code><code>39</code> <code>mysqld_safe Logging to </code><code>'/usr/local/mysql/data2/localhost.localdomain.err'</code><code>.</code>

<code>150116</code> <code>14</code><code>:</code><code>15</code><code>:</code><code>39</code> <code>mysqld_safe Starting mysqld daemon with databases </code><code>from</code> <code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>data1</code>

<code>150116</code> <code>14</code><code>:</code><code>15</code><code>:</code><code>39</code> <code>mysqld_safe Starting mysqld daemon with databases </code><code>from</code> <code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>mysql</code><code>/</code><code>data2</code>

到此終于解決問題。此事說明解決問題前一定要先弄清楚之前做了什麼操作,具體的環境是什麼樣子的。等等...

ps :有大神知道下面這個問題還請指教,感謝。

<code>localhost kernel: iTCO_wdt: Unexpected close, </code><code>not</code> <code>stopping watchdog!</code>

本文轉自Mr_陳 51CTO部落格,原文連結:http://blog.51cto.com/chenpipi/1604793,如需轉載請自行聯系原作者

繼續閱讀