今天准备新启一个MySQL实例,结果竟然无法初始化,内容如下:

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[root@hadoop-node-2 ~]# cat /etc/issue
CentOS release 6.4 (Final)

[root@hadoop-node-2 ~]# mysql --version
./bin/mysql  Ver 14.14 Distrib 5.6.24, for linux-glibc2.5 (x86_64) using  EditLine wrapper

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

报错如下:

[root@hadoop-node-2 mysql56]# ./scripts/mysql_install_db  --defaults-file=/data/db/mysql/3310/my.cnf

Installing MySQL system tables...2016-04-28 11:07:37 0 [Warning] Ignoring user change to 'root' because the user was set to 'mysql' earlier on the command line

2016-04-28 11:07:37 0 [Warning] Using unique option prefix host instead of host_cache_size is deprecated and will be removed in a future release. Please use the full name instead.

Unknown suffix '.' used for variable 'host_cache_size' (value '127.0.0.1')

2016-04-28 11:07:37 0 [ERROR] ./bin/mysqld: Error while setting value '127.0.0.1' to 'host_cache_size'

2016-04-28 11:07:37 0 [ERROR] Aborting

换种方法初始化,继续报错:

[root@hadoop-node-2 mysql56]# ./scripts/mysql_install_db --no-defaults --datadir=/data/db/mysql/3310 --basedir=/data/mysql56 --user=mysql --skip_host_cache

Installing MySQL system tables...2016-04-28 15:55:24 0 [Warning] Using unique option prefix host instead of host_cache_size is deprecated and will be removed in a future release. Please use the full name instead.
Unknown suffix '.' used for variable 'host_cache_size' (value '127.0.0.1')
2016-04-28 15:55:24 0 [ERROR] /data/mysql56/bin/mysqld: Error while setting value '127.0.0.1' to 'host_cache_size'
2016-04-28 15:55:24 0 [ERROR] Aborting

2016-04-28 15:55:24 0 [Note] Binlog end

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

这种报错一般是加载了非法的配置文件导致的

用strace跟踪一下mysql_install_db

[root@hadoop-node-2 mysql56]# strace ./scripts/mysql_install_db  --defaults-file=/data/db/mysql/3310/my.cnf  没发现问题

接着发现mysqld竟然无法启动了,接着跟踪mysqld启动

[root@hadoop-node-2 mysql56]# strace ./bin/mysqld  --defaults-file=/data/db/mysql/3310/my.cnf

发现其中有这样一段:

stat("/root/.mylogin.cnf", {st_mode=S_IFREG|0600, st_size=176, ...}) = 0
open("/root/.mylogin.cnf", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0600, st_size=176, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd8d4a72000
lseek(3, 0, SEEK_CUR) = 0
lseek(3, 0, SEEK_SET) = 0
read(3, "\0\0\0\0", 4) = 4
read(3, "\6\f\30\36\35\21\5\34\22\24\16\r\37\22\16\5\r\34\27\6\20\0\0\0\301\335\346\23d\375\255\344"..., 4096) = 172
read(3, "", 4096) = 0
close(3) = 0

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

处理方法:

删除文件/root/.mylogin.cnf,再次尝试数据库初始化,成功!(!!!删除前记得确认想删的文件是不是可以随便删)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

为什么该文件会阻止初始化呢?初步了解一下:

1. 这个文件哪来的?

在mysql5.6中新增了一个密码安全工具:mysql_config_edit ,该工具的官方定义是:

The mysql_config_editor utility enables you to store authentication credentials in an encrypted login path file named .mylogin.cnf, The file can be read later by MySQL client programs to obtain authentication credentials for connecting to MySQL Server。

翻译一下:mysql_config_editor允许用户将登陆信息存储在一个名为.mylogin.cnf的加密文件中,这个文件中的加密信息可以被MySQL读取去连接MySQL数据库(加一句:具体被哪个路径读取可以通过login-path来指定)

涉及到的文件就是我们的罪魁祸首:.mylogin.cnf

2. 为什么该文件会阻止初始化,阻止mysqld?

先来看一下这个文件中的内容(想看.mylogin.cnf里的内容需要用以下命令):

[root@hadoop-node-2 mysql]# mysql_config_editor print --all

[mysqld]
user = localuser
password = *****
host = 127.0.0.1

两个原因:(1)mysql_config_editor工具有一个参数--login-path,该参数可以设置调用.mylogin.cnf中内容的路径,在上面的故障中,很不幸,login-path=mysqld,在初始化进程中调用mysqld时候,mysqld                        就很听话的去调取了该文件中的信息

(2)mysql的参数名称有个特性就是书写可以比较随意,比如上面的参数host_cache_size,可以写作host-cache-size、host_cache,甚至host

结合这两个原因可以知道,初始化进程调用了mysqld,mysqld加载了.mylogin.cnf中的信息,.mylogin.cnf中的host=127.0.0.1,mysqld就把值127.0.0.1赋予了参数host-cache-size,而host-cache-size的值是一个数值,这时候赋值不匹配出现了,最后进程受阻,把我们坑了

以后需要注意:

(1).mylogin.cnf中的login-path默认是client,所以set时候就不要加这个参数了,用默认就好

(2)strace是个好工具

另附故障重现:

[root@hadoop-node-2 mysql56]# ps -ef|grep mysqld|grep 3310

设一个login-path=mysqld的.mylogin.cnf文件:

[root@hadoop-node-2 mysql56]# mysql_config_editor set --login-path=mysqld --host=127.0.0.1 --user=localuser --password

Enter password: enter password "localpass" here

[root@hadoop-node-2 mysql]# mysql_config_editor print --all

[mysqld]
user = localuser
password = *****
host = 127.0.0.1

启动失败:

[root@hadoop-node-2 mysql56]#/data/mysql56/bin/mysqld --defaults-file=/data/db/mysql/3310/my.cnf&

Installing MySQL system tables...2016-04-29 9:07:37 0 [Warning] Ignoring user change to 'root' because the user was set to 'mysql' earlier on the command line

2016-04-29 9:07:37 0 [Warning] Using unique option prefix host instead of host_cache_size is deprecated and will be removed in a future release. Please use the full name instead.

Unknown suffix '.' used for variable 'host_cache_size' (value '127.0.0.1')

2016-04-29 9:07:37 0 [ERROR] ./bin/mysqld: Error while setting value '127.0.0.1' to 'host_cache_size'

2016-04-29 9:07:37 0 [ERROR] Aborting

删掉文件:

[root@hadoop-node-2 mysql56]#rm -f /root/.mylogin.cnf

重新启动,成功

[root@hadoop-node-2 mysql56]#/data/mysql56/bin/mysqld --defaults-file=/data/db/mysql/3310/my.cnf&

......

[root@hadoop-node-2 mysql56]# ps -ef|grep mysqld|grep 3310
mysql 46532 5163 20 10:09 pts/2 00:00:03 /data/mysql56/bin/mysqld --defaults-file=/data/db/mysql/3310/my.cnf

杀掉进程,再测试下login-path=client的情况:

[root@hadoop-node-2 mysql56]# kill 46532

[root@hadoop-node-2 mysql56]# ps -ef|grep mysqld|grep 3310

[root@hadoop-node-2 mysql56]# mysql_config_editor set --login-path=client  --host=127.0.0.1 --user=localuser --password

Enter password: enter password "localpass" here

[root@hadoop-node-2 mysql]# mysql_config_editor print --all

[client]
user = localuser
password = *****
host = 127.0.0.1

可以成功启动实例:

[root@hadoop-node-2 mysql56]#/data/mysql56/bin/mysqld --defaults-file=/data/db/mysql/3310/my.cnf&

......

[root@hadoop-node-2 mysql56]# ps -ef|grep mysqld|grep 3310
mysql 47574 5163 18 10:15 pts/2 00:00:03 /data/mysql56/bin/mysqld --defaults-file=/data/db/mysql/3310/my.cnf

MySQL初始化故障-----mysql_config_editor中的坑的更多相关文章

  1. MySQL 主从同步架构中你不知道的“坑”

    以下操作征对指定不同步库 binlog-format=ROW模式 1 查看主从的binlog模式 mysql> show slave status\G ********************* ...

  2. MySQL 主从同步架构中你不知道的“坑”(2)

    指定同步库情况 1.binlog_format= ROW模式‍ mysql> use testdb; Database changed mysql> show tables; +----- ...

  3. Mysql系列八:Mycat和Sharding-jdbc的区别、Mycat分片join、Mycat分页中的坑、Mycat注解、Catlet使用

    一.Mycat和Sharding-jdbc的区别 1)mycat是一个中间件的第三方应用,sharding-jdbc是一个jar包 2)使用mycat时不需要改代码,而使用sharding-jdbc时 ...

  4. VS2017 + EF + MySQL 我使用过程中遇到的坑

    原文:VS2017 + EF + MySQL 我使用过程中遇到的坑 写在前面: 第一次使用MySQL连接VS的时候本着最新版的应该就是最好的,在MySQL官网下载了最新版的MySQL没有并且安装完成之 ...

  5. Golang中的坑二

    Golang中的坑二 for ...range 最近两周用Golang做项目,编写web服务,两周时间写了大概五千行代码(业务代码加单元测试用例代码).用Go的感觉很爽,编码效率高,运行效率也不错,用 ...

  6. keepalive配置mysql自动故障转移

    keepalive配置mysql自动故障转移 原创 2016年02月29日 02:16:52 2640 本文先配置了一个双master环境,互为主从,然后通过Keepalive配置了一个虚拟IP,客户 ...

  7. Java技术开发中的坑

    1.(2014/05/28)struts2中使用eclipse自动获取getter和setter方法的坑 今天着实被eclipse坑了一把,平时遇到get和set方法时,我都是通过eclipse自动生 ...

  8. (4.1)mysql备份还原——mysql常见故障

    (4.1)mysql备份还原——mysql常见故障 1.常见故障类型 在数据库环境中,常见故障类型: 语句失败,用户进程失败,用户错误 实例失败,介质故障,网络故障 其中最严重的故障主要是用户错误和介 ...

  9. MySQL初始化以及客户端工具的使用

    MySQL初始化以及客户端工具的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是关系型数据库 关系型数据库通常是把所有的数据都组织成二维关系.之所以称为关系型数据库是 ...

随机推荐

  1. #292 (div.2) D.Drazil and Tiles (贪心+bfs)

    Description Drazil created a following problem about putting  ×  tiles into an n × m grid: "The ...

  2. Java连接各类数据库

    几种常用数据库的连接,以及Dao层的实现. 1.加载JDBC驱动: 1 加载JDBC驱动,并将其注册到DriverManager中: 2 //MySQL数据库 3 Class.forName(&quo ...

  3. DeNA/上海纵游通过使用AWS大量缩短新款游戏和服务的上线时间

    关于DeNA/上海纵游 DeNA 创立于1999年,是世界率先的网络服务公司,业务涵盖社交游戏.电子商务等领域.DeNA总部设于东京,现已于京证券交易所上市(交易代码:2432),在中国.美国.新加坡 ...

  4. Elasticlunr.js 简单介绍

    Elasticlunr.js 项目地址:http://elasticlunr.com/ 代码地址:https://github.com/weixsong/elasticlunr.js 文档地址:htt ...

  5. SSCTF Final PWN

    比赛过去了两个月了,抽出时间,将当时的PWN给总结一下. 和线上塞的题的背景一样,只不过洞不一样了.Checksec一样,发现各种防护措施都开了. 程序模拟了简单的堆的管理,以及cookie的保护机制 ...

  6. AliCTF 2016

    上上周参加了阿里的CTF,靠着最后绝杀队伍有幸拿到了国内第一名,也顺利进入了XCTF Final.把自己做的几个题简单写了下,发出来也算个总结吧. PWN-FB 经典的null byte overfl ...

  7. log4.net 日志工具使用

    1. 在应用程序的相同目录下建立: winform :    程序名.exe.config          .(log4net程序,就log4net.exe.config) web:         ...

  8. .net 链接oracle

    虽然EF6都快要出来了,但是对于Oracle数据库,仍然只能用DB first和Model First来编程,不能用Code First真是一个很大的遗憾啊. 好了,废话少说,我们来看看EF中是如何用 ...

  9. Java 面向对象(转)

    转自:http://blog.sina.com.cn/s/blog_83c5190f01010ate.html 1.我们可以把JAVA中的类分为以下三种: 类:使用class定义且不含有抽象方法的类. ...

  10. thinkPHP入门 一

    简介 ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开 ...