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

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

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

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

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

# 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端口,于是又查看下配置文件。看看他们的具体配置是怎么样的。

# 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位置。

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

# 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看了下路径。不看不知道,看了下就更不对劲了。

# 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

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下面的路径不一致啊。我就问了下开发是不是他们又装了一个mysql。果不其然,他们大方说原先的版本太低。于是就升级了一个版本。此时的我就明白一大半了。

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

# 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的环境变量,效果立马见效。

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 :有大神知道下面这个问题还请指教,感谢。

localhost kernel: iTCO_wdt: Unexpected close, not stopping watchdog!
时间: 2024-10-09 08:37:17

MySQL学习之路:多实例无法启动排错的相关文章

Android开发学习之路--Activity之四种启动模式

后天终于可以回家了,马上就要过年了,趁着年底打酱油的模式,就多学习学习,然后记录记录吧.关于Activity已经学习了七七八八了,还有就是Activity的四种启动模式了,它们分别为,standard,singleTop,singleTask,singleInstance,根据名字也差不多可以理解这四种模式了: 1.standard:标准启动模式,默认情况下就是这个模式了,这个模式下启动的Activity会被多次实例化. 2.singleTop:这个模式下启动Activity的话,如果栈顶也是同

MySQL学习之路(五)MySQL高级查询

MySQL统计函数 count():统计数量: max():统计最大值: min():统计最小值: avg():统计平均数: sum():统计和: Select count(*) from student; MySQL排序 group by: order by: 默认是升序排序: Select * from student group by sid asc;--升序排序 Select * from student group by sid DESC;--降序排序 Select * from st

MySql 学习之路-高级2

  目录: 1.约束 2.ALTER TABLE 3.VIEW 1.约束 说明:SQL约束用于规定表中的数据规则,如果存在违反约束的数据行为,行为会被约束终止,约束可以在建表是规定,也可以在建表后规定,通过ALTER TABLE 实现. 语法: CREATE TABLE TABLENAME ( COLUMN_NAME1 DATA_TYPE(SIZE) CONSTRAINT_NAME, COLUMN_NAME2 DATA_TYPE(SIZE) CONSTRAINT_NAME, COLUMN_NAM

mysql学习之路

                Mysql php阶段将数据库分为三个阶 基础阶段: mysql数据库的基本操作(增删改查),以及一些高级操作(视图,触发器,函数,存储过程等),PHP操作没有sql数据库. 优化阶段: 如何提高数据库效率,如索引,分表等. 部署阶段: 如何搭建真实的系统环境,如服务集群,负载均衡. 数据库基础 什么是数据库: 数据库:database ,存储数据的仓库(高效的存储和处理数据库的介质如磁盘.内存) 数据库分类: 1,关系型数据库:(sql型) 2,非关系型数据库(

mysql学习之路_高级数据操作

关系 将实体与实体的关系,反应到最终数据表的设计上来,将关系分为三种,一对多,多对多,多对多. 所有关系都是表与表之间的关系. 一对一: 一张表的一条记录一定只对应另外一张表的一条记录,反之亦然. 例 Id 姓名 性别 年龄 电话号码 1 张三 男 23 13320848263 一对多 一张表中有一条记录,对应另一张表多条记录但是反过来,另一张表的一条记录只能对应这张表的一条记录. 例母亲与孩子的关系 多对多 一张表中的一条记录对应另外一张表的多条记录,同时另一张表的一条记录对应另外一张表的多条

mysql学习之路_外键

回顾4 连接查询: 连接多张表到一起,不管记录数如何,字段数一定会增加. 分类:内连接,外连接.自然连接,交叉连接, 交叉连接:cross join (笛卡尔积) 内连接:inner join,左右两张表有连接条件匹配(不匹配自动忽略) 外连接:left/right join 主表的一条记录一定会存在匹配保留副表数据,否则置空 自然连接:natural join 自动匹配(相同字段名) PHP操作:mysql Php充当客户端,开启mysql扩展 连接认证:mysql_connect;执行sql

MySQL学习之路(二) MySQL基础操作

进入数据库 use 库名: 创建表结构 语法:create table 库名.表名( 字段名 数据类型 约束, 字段名 数据类型 约束 ) create table text.t_user( id int(10), t_name varchar(10) --最后一行不需要逗号 ) 查看所有表 show tables; 查看表中字段属性 desc t_user; describe t_user; show columns from t_user; 重新命名表名 rename table t_use

MySQL学习之路(四) MySQL数据类型

整数型 tinyint:迷你整形,最多有256中状态:使用一个字节存储: smallint:小整形,最多有6556种状态:使用两个字节存储: mediumint:中整形:使用三个字节存储: int:标准整形:使用四个字节存储: bigint:大整形:使用八个字节存储: 浮点型 float(M,D):单精度:占用四个字节:精度范围在7位左右: double*M,D:双精度:占用八个字节:精度在15位左右: M:代表整数长度,D:代表小数个数: 超出小数长度会自发四舍五入: 日期型 datetime

MySQL数据库学习之路

MySQL学习之路 目录 MySQL学习之路[第一篇]:MySQL单双实例安装 MySQL学习之路[第二篇]:MySQL登陆关闭.密码修改破解 MySQL学习之路[第三篇]:MySQL增删改查.用户权授.系统函数.字段修改 MySQL学习之路[第四篇]:MySQL进程连接.交互.变量 MySQL学习之路[第五篇]:MySQL主健和索引 MySQL学习之路[第六篇]:MySQL存储引擎.事务.锁 MySQL学习之路[第七篇]:MySQL日志管理 MySQL学习之路[第八篇]:MySQL备份恢复 M