MySQL学习之路:多实例无法启动排错

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

由于我们的服务器会借给我们部分公司使用,但是部分公司有没有运维,都是开发直接操作,导致出现一些问题后直接来找我处理。为此,也学习到很多。

近来,一哥们由于不知道操作什么导致服务器直接挂掉,于是我联系机房启动机器后查看日志,没有发现什么明显的日志,只是有一条watchdog的日志信息。于是又多方搜寻关于watchdog的相关知识。发现的也大致是皮毛而已,也有部分提交一些内核信息是关于watchdog的bug。此处也无法做什么排查的(主要还是我的技术不精)。只能推测是开发使用应用程序触发了watchdog的监控。在指定时间内watchdog检测不通过导致reboot或者shutdown。好在这台机器他们只是测试使用。没有什么重要的业务。

不过不久后他们又呼叫我mysql多实例的3308端口无法启动。于是我又上机器排查。

登陆机器后首先查看下端口:

1
2
3
4
5
6
7
# ss -tunl
Netid Recv - Q Send - Q                                             Local Address:Port                                               Peer Address:Port 
tcp    0       64                                                             ::: 873                                                           ::: *     
tcp    0       50                                                              * : 3306                                                           * : *     
tcp    0       128                                                            ::: 11211                                                         ::: *     
tcp    0       128                                                             * : 11211                                                          * : *     
tcp    0       50                                                              * : 3307                                                           * : *

查看上述确实是没有3308端口,于是又查看下配置文件。看看他们的具体配置是怎么样的。

1
2
3
4
5
6
7
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
# cat /etc/my.cnf
[client]
#port       = 3306
default - character - set  =  utf8
#socket     = /usr/local/mysql/mysql.sock
 
 
[mysqld_multi]
mysqld  =  / data0 / mysql / bin / mysqld_safe
mysqladmin  =  / data0 / mysql / bin / mysqladmin
 
[mysqld1]
socket           =  / usr / local / mysql / mysql1.sock
port             =  3306
pid - file         =  / usr / local / mysql / mysql1.pid
datadir          =  / usr / local / mysql / data1
user             =  mysql
log              =  / usr / local / msyql / e1.log
server - id    =  1
skip - name - resolve
character - set - server     =  utf8
log - bin - trust - function - creators = 1
back_log        =  50
max_connections     =  500
max_connect_errors      =  32
max_allowed_packet      =  16M
 
table_cache         =  2048
binlog_cache_size   =  1M
max_heap_table_size     =  64M
tmp_table_size          =  64M
#binlog_format      = "MIXED"
 
key_buffer_size     =  32M
read_buffer_size    =  2M
read_rnd_buffer_size    =  16M
bulk_insert_buffer_size  =  64M
sort_buffer_size    =  8M
join_buffer_size    =  8M
 
thread_cache_size   =  8
thread_concurrency      =  8
thread_stack        =  192K
 
slow_query_log
long_query_time  =  2
log - short - format
myisam_sort_buffer_size     =  128M
myisam_max_sort_file_size   =  10G
myisam_repair_threads       =  1
myisam_recover
 
[mysqld2]
socket           =  / usr / local / mysql / mysql2.sock
port             =  3308
pid - file         =  / usr / local / mysql / mysql2.pid
datadir          =  / usr / local / mysql / data2
user             =  mysql
log              =  / usr / local / msyql / e2.log
server - id    =  1
skip - name - resolve
character - set - server     =  utf8
log - bin - trust - function - creators = 1
back_log        =  50
max_connections     =  500
max_connect_errors      =  32
max_allowed_packet      =  16M
table_cache         =  2048
binlog_cache_size   =  1M
max_heap_table_size     =  64M
tmp_table_size          =  64M
#binlog_format      = "MIXED"
key_buffer_size     =  32M
read_buffer_size    =  2M
read_rnd_buffer_size    =  16M
bulk_insert_buffer_size  =  64M
sort_buffer_size    =  8M
join_buffer_size    =  8M
thread_cache_size   =  8
thread_concurrency      =  8
thread_stack        =  192K
slow_query_log
long_query_time  =  2
log - short - format
myisam_sort_buffer_size     =  128M
myisam_max_sort_file_size   =  10G
myisam_repair_threads       =  1
myisam_recover
 
[mysqldump]
quick
max_allowed_packet  =  16M
 
[mysql]
no - auto - rehash
 
[isamchk]
key_buffer       =  512M
sort_buffer_size  =  512M
read_buffer      =  8M
write_buffer     =  8M
 
[myisamchk]
key_buffer       =  512M
sort_buffer_size  =  512M
read_buffer      =  8M
write_buffer     =  8M
 
[mysqlhotcopy]
interactive - timeout
 
[mysqld_safe]
open - files - limit  =  8192

配置文件如上,主要是看下数据目录和sock文件目录以及pid存放位置和log位置。

然后就是到指定目录下,查看相关信息。

1
2
3
# ls
3307   data1  docs    e2.log   lib       mysql2 - slow.log  mysql - test  sql - bench
bin    data2  e1.log  include  libexec  mysql1 - slow.log  mysql2.pid   mysql2.sock      share       var

看到上述情况我真是很郁闷了,这完全和配置文件对不上啊。明明mysql2.sock和pid文件存在,为毛却监听的是3306端口呢?此时就很郁闷了,于是又ps -ef | grep mysql看了下路径。不看不知道,看了下就更不对劲了。

1
2
3
4
# ps -ef | grep mysql
root      18634      1   0  Jan12 ?         00 : 00 : 00  / bin / sh  / usr / local / mysql / bin / mysqld_safe  - - datadir = / usr / local / mysql / var  - - pid - file = / usr / local / mysql / var / localhost.localdomain.pid
mysql     18763  18634   0  Jan12 ?         00 : 00 : 39  / usr / local / mysql / bin / mysqld  - - basedir = / usr / local / mysql  - - datadir = / usr / local / mysql / var  - - plugin - dir = / usr / local / mysql / lib / plugin  - - user = mysql  - - log - error = / usr / local / mysql / var / localhost.localdomain.err  - - pid - file = / usr / local / mysql / var / localhost.localdomain.pid  - - socket = / tmp / mysql.sock   - - port = 3306
root      29805  29780   0  14 : 40  pts / 0     00 : 00 : 00  grep mysql

想必此时很多大神一眼就知道问题在哪里了。可惜我不是大神。一时也没想到那么多。于是一步一步的来往下查啊。我这里想到的是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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysqld_multi log  file  version  2.16 ; run: Fri Jan  16  13 : 53 : 44  2015
 
Starting MySQL servers
 
150116  13 : 53 : 44  [ERROR] Fatal error: Please read  "Security"  section of the manual to find out how to run mysqld as root!
 
150116  13 : 53 : 44  [ERROR] Aborting
 
150116  13 : 53 : 44  [Note]  / usr / local / mysql / libexec / mysqld: Shutdown complete
 
150116  13 : 53 : 44  [ERROR] Fatal error: Please read  "Security"  section of the manual to find out how to run mysqld as root!
 
150116  13 : 53 : 44  [ERROR] Aborting
 
150116  13 : 53 : 44  [Note]  / usr / local / mysql / libexec / mysqld: Shutdown complete
 
mysqld_multi log  file  version  2.16 ; run: Fri Jan  16  13 : 56 : 32  2015

就类似上面这种。报错信息大致反映的就是不能以root启动这个意思。但是mysql的配置文件里指定的就是mysql用户。于是我又查看了数据目录的文件夹权限等乱七八糟的一堆。感觉都是很正常的。到这里时我就特别的郁闷了。那到底是哪里的问题呢。

于是我就去找错误日志,但是发现var下面的.err的日志居然没有记录。我思前想后难道是配置文件没有生效?此时的我只能先发会呆。

发完呆后我又仔细仔细看了看日志和配置文件。终于发现问题了。mysqld_multi的配置和mysqld下面的路径不一致啊。

于是再次的使用指定目录下面的启动脚本,并加以选项。这次虽然还是没能出现所要的结果。但是日志已经很明显的指出问题所在了。

1
2
3
4
5
6
7
8
9
10
11
# tail -f mysqld_multi.log
mysqld_multi log  file  version  2.16 ; run: Fri Jan  16  14 : 10 : 30  2015
 
Starting MySQL servers
 
150116  14 : 10 : 30  mysqld_safe Logging to  '/usr/local/mysql/var/localhost.localdomain.err' .
150116  14 : 10 : 30  mysqld_safe Logging to  '/usr/local/mysql/var/localhost.localdomain.err' .
cat:  / usr / local / mysql / var / localhost.localdomain.pid: No such  file  or  directory
150116  14 : 10 : 30  mysqld_safe Starting mysqld daemon with databases  from  / usr / local / mysql / var
150116  14 : 10 : 30  mysqld_safe Starting mysqld daemon with databases  from  / usr / local / mysql / var
mysqld_multi log  file  version  2.16 ; run: Fri Jan  16  14 : 15 : 39  2015

于是配置一个mysql的环境变量,效果立马见效。

1
2
3
4
5
6
Starting MySQL servers
 
150116  14 : 15 : 39  mysqld_safe Logging to  '/usr/local/mysql/data1/localhost.localdomain.err' .
150116  14 : 15 : 39  mysqld_safe Logging to  '/usr/local/mysql/data2/localhost.localdomain.err' .
150116  14 : 15 : 39  mysqld_safe Starting mysqld daemon with databases  from  / usr / local / mysql / data1
150116  14 : 15 : 39  mysqld_safe Starting mysqld daemon with databases  from  / usr / local / mysql / data2

到此终于解决问题。此事说明解决问题前一定要先弄清楚之前做了什么操作,具体的环境是什么样子的。等等...





ps :有大神知道下面这个问题还请指教,感谢。

1
localhost kernel: iTCO_wdt: Unexpected close,  not  stopping watchdog!


本文转自Mr_陈 51CTO博客,原文链接:http://blog.51cto.com/chenpipi/1604793,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 关系型数据库 MySQL
|
1月前
|
存储 SQL 关系型数据库
创建并配置RDS实例
在阿里云上创建RDS实例涉及登录控制台、进入RDS管理页面、创建实例、选择数据库引擎和版本、配置实例规格与存储、设定网络与安全组、设置实例信息、确认订单并支付,最后初始化数据库。操作步骤可能因界面更新或数据库引擎不同略有差异。
19 1
|
1月前
|
SQL 存储 关系型数据库
【MySQL 数据库】11、学习 MySQL 中的【锁】
【MySQL 数据库】11、学习 MySQL 中的【锁】
76 0
|
存储 关系型数据库 MySQL
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】4、MySQL 事务学习
【MySQL 数据库】4、MySQL 事务学习
44 0
|
16天前
|
SQL 存储 关系型数据库
6本值得推荐的MySQL学习书籍
本文是关于MySQL学习书籍的推荐,作者在DotNetGuide技术社区和微信公众号收到读者请求后,精选了6本值得阅读的MySQL书籍,包括《SQL学习指南(第3版)》、《MySQL是怎样使用的:快速入门MySQL》、《MySQL是怎样运行的:从根儿上理解MySQL》、《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》以及《高性能MySQL(第4版)》和《MySQL技术内幕InnoDB存储引擎(第2版)》。此外,还有12本免费书籍的赠送活动,涵盖《SQL学习指南》、《MySQL是怎样使用的》等,赠书活动有效期至2024年4月9日。
|
21天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
1天前
|
关系型数据库 MySQL 数据库
一台MySQL数据库启动多个实例
一台MySQL数据库启动多个实例
|
1天前
|
存储 SQL 关系型数据库
MySQL学习手册(第一部分)
mysql日常使用记录
29 0
|
存储 SQL 关系型数据库