由于我们的服务器会借给我们部分公司使用,但是部分公司有没有运维,都是开发直接操作,导致出现一些问题后直接来找我处理。为此,也学习到很多。
近来,一哥们由于不知道操作什么导致服务器直接挂掉,于是我联系机房启动机器后查看日志,没有发现什么明显的日志,只是有一条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,如需转载请自行联系原作者