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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介:

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

近来,一哥们由于不知道操作什么导致服务器直接挂掉,于是我联系机房启动机器后查看日志,没有发现什么明显的日志,只是有一条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,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
3月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
351 5
|
3月前
|
关系型数据库 MySQL 数据管理
Mysql基础学习day03-作业
本内容包含数据库建表语句及多表查询示例,涵盖内连接、外连接、子查询及聚合统计,适用于员工与部门数据管理场景。
73 1
|
3月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01
本课程为MySQL基础学习第一天内容,涵盖MySQL概述、安装、SQL简介及其分类(DDL、DML、DQL、DCL)、数据库操作(查询、创建、使用、删除)及表操作(创建、约束、数据类型)。适合初学者入门学习数据库基本概念和操作方法。
180 6
|
3月前
|
存储 弹性计算 关系型数据库
如何通过控制台创建RDS MySQL实例
本文介绍了通过控制台创建RDS MySQL实例的详细步骤,包括准备工作、选择计费方式、地域、实例规格、存储空间等关键配置,并指导用户完成下单与实例查看。
|
4月前
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL数据库的多实例环境
MySQL多实例是指在一台服务器上运行多个MySQL服务,通过不同端口提供独立的数据服务。各实例共享安装程序,但使用各自的配置文件和数据文件,实现资源高效利用。本文详细介绍了如何通过“mysqld_multi”工具配置和启动多个MySQL实例,并演示了目录创建、初始化、配置文件修改及实例启动等操作步骤。
163 1
|
3月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02-作业
本教程介绍了数据库表的创建与管理操作,包括创建员工表、插入测试数据、删除记录、更新数据以及多种查询操作,涵盖了SQL语句的基本使用方法,适合初学者学习数据库操作基础。
88 0
|
3月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day03
本课程为MySQL基础学习第三天内容,主要讲解多表关系与多表查询。内容涵盖物理外键与逻辑外键的区别、一对多、一对一及多对多关系的实现方式,以及内连接、外连接、子查询等多表查询方法,并通过具体案例演示SQL语句的编写与应用。
101 0
|
3月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01-作业
本教程包含三个数据库表的创建练习:学生表(student)要求具备主键、自增长、非空、默认值及唯一约束;课程表(course)定义主键、非空唯一字段及数值精度限制;员工表(employee)包含自增主键、非空字段、默认值、唯一电话号及日期时间类型字段。每个表的结构设计均附有详细SQL代码示例。
80 0
|
3月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02
本课程为MySQL基础学习第二天内容,涵盖数据定义语言(DDL)的表查询、修改与删除操作,以及数据操作语言(DML)的增删改查功能。通过具体SQL语句与实例演示,帮助学习者掌握MySQL表结构操作及数据管理技巧。
131 0

推荐镜像

更多