关于Docker官方CentOS镜像无法启动mysqld的总结

很多童鞋反映,在Docker官方CentOS镜像中安装了Mysql server后,无法正常启动。

无法正常启动表现为两种情况:

1> 初始完数据库后,mysqld启动报错

2> systemctl start mysqld或者service mysqld start报错

首先重现一下现场。

第一种情况

一、启动CentOS镜像,安装Mysql Server

注意,Docker官方CentOS镜像latest版本是7.1。CentOS 7 yum源中默认没有Mysql Server的。

关于如何在CentOS 7中安装Mysql Server,可参考这篇博客 CentOS 7中如何安装mysql server

二、初始化数据库

[root@e80a5553b647 ~]# mysql_install_db

三、启动Mysqld服务

[root@e80a5553b647 ~]# mysqld
2015-09-25 03:46:43 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2015-09-25 03:46:43 0 [Note] mysqld (mysqld 5.6.26) starting as process 775 ...
2015-09-25 03:46:43 775 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
2015-09-25 03:46:43 775 [ERROR] Aborting
2015-09-25 03:46:43 775 [Note] Binlog end
2015-09-25 03:46:43 775 [Note] mysqld: Shutdown complete

报以上错误。很多童鞋到这一步就不知所措了,怎么会启动失败呢?但细心的童鞋看到报错信息,就知道失败的原因在于mysqld命令是用roor身份执行的。

四、尝试以mysql身份启动Mysqld服务

[root@e80a5553b647 ~]# mysqld --user=mysql
2015-09-25 02:56:43 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2015-09-25 02:56:43 0 [Note] mysqld (mysqld 5.6.26) starting as process 167 ...
2015-09-25 02:56:43 167 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2015-09-25 02:56:43 167 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
2015-09-25 02:56:43 167 [Note] InnoDB: Using atomics to ref count buffer pool pages
2015-09-25 02:56:43 167 [Note] InnoDB: The InnoDB memory heap is disabled
2015-09-25 02:56:43 167 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2015-09-25 02:56:43 167 [Note] InnoDB: Memory barrier is not used
2015-09-25 02:56:43 167 [Note] InnoDB: Compressed tables use zlib 1.2.3
2015-09-25 02:56:43 167 [Note] InnoDB: Using Linux native AIO
2015-09-25 02:56:43 167 [Note] InnoDB: Using CPU crc32 instructions
2015-09-25 02:56:43 167 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2015-09-25 02:56:43 167 [Note] InnoDB: Completed initialization of buffer pool
2015-09-25 02:56:43 167 [ERROR] InnoDB: ./ibdata1 can't be opened in read-write mode
2015-09-25 02:56:43 167 [ERROR] InnoDB: The system tablespace must be writable!
2015-09-25 02:56:43 167 [ERROR] Plugin 'InnoDB' init function returned error.
2015-09-25 02:56:43 167 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2015-09-25 02:56:43 167 [ERROR] Unknown/unsupported storage engine: InnoDB
2015-09-25 02:56:43 167 [ERROR] Aborting
。。。。。

还是启动失败。

第二种情况

以systemctl启动,

[root@e80a5553b647 ~]# systemctl start mysqld
Failed to get D-Bus connection: No connection to service manager.
[root@e80a5553b647 ~]# service mysqld start
Starting mysqld (via systemctl):  Failed to get D-Bus connection: No connection to service manager.[FAILED]

报“Failed to get D-Bus connection: No connection to service manager.”错误,在网上找了好久,原因在于该CentOS镜像为精简版,有很多包再制作的过程中没有安装。故导致systemctl命令无法启动。

基于第二种情况,很多童鞋就认为CentOS镜像不完善,导致mysql服务无法启动。

失败原因:

深究下去,第一种方式失败的原因在于第二步初始化数据库的时候是用的ROOT账户运行的。这样,会导致数据库的datadir(即/var/lib/mysql)目录的属主为root。

[root@e80a5553b647 ~]# ll /var/lib/mysql/
total 110600
-rw-rw---- 1 root root 50331648 Sep 25 04:46 ib_logfile0
-rw-rw---- 1 root root 50331648 Sep 25 04:46 ib_logfile1
-rw-rw---- 1 root root 12582912 Sep 25 04:46 ibdata1
drwx------ 2 root root     4096 Sep 25 04:46 mysql
drwx------ 2 root root     4096 Sep 25 04:46 performance_schema

因为mysqld在以ROOT账户执行时会出错,这个与数据库初始化无关,而是数据库基于安全的考虑,不推荐使用ROOT账户启动数据库 !!!

而此时,如果指定mysql用户运行mysqld命令,因为var/lib/mysql目录的属主为root,必然报出“mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)”错误。

正确的启动方式:

主要有以下两种:

1> 初始化数据库时指定以mysql用户运行,即 mysql_install_db  --user=mysql

     启动mysql服务,同样有两种方式:

     (1)  mysqld --user=mysql

     (2)  mysqld_safe 

2> 以 /etc/init.d/mysqld start 方式启动

总结:

1> 如果第一次以mysql_install_db初始化数据库,mysqld --user=mysql启动mysql服务失败后,再次用mysql_install_db  --user=mysql初始化数据库,还是会启动失败,其实看看来看看/var/lib/mysql/的属主就知道了,

[root@e80a5553b647 /]# ll /var/lib/mysql/
total 110600
-rw-rw---- 1 root  root  12582912 Sep 25 05:57 ibdata1
-rw-rw---- 1 root  root  50331648 Sep 25 05:57 ib_logfile0
-rw-rw---- 1 root  root  50331648 Sep 25 05:57 ib_logfile1
drwx------ 2 mysql mysql     4096 Sep 25 05:57 mysql
drwx------ 2 root  root      4096 Sep 25 05:57 performance_schema

只有mysql目录的属主变为mysql了,其它依旧是root,可通过chown -R mysql:mysql /var/lib/mysql重新设置目录的属性。

2> 启动mysql服务失败的原因还是在于对mysql不熟悉,建议看看mysql服务脚本,即/etc/init.d/mysqld。

3>  关于mysql的启动方式和停止方式(与docker无关)

启动方式主要有以下三种:

(1)使用service启动

        service mysqld start  在CentOS7中,相当于systemctl start mysqld  

(2)使用脚本启动

        /etc/inint.d/mysqld start

(3) 使用safe_mysqld或mysqld --user=mysql启动

关闭方式也有以下三种:

(1)使用service关闭

       service mysqld stop 在CentOS7中,相当于systemctl stop mysqld

(2)使用脚本关闭

       /etc/inint.d/mysqld stop

(3)mysqladmin shutdown

注意:使用safe_mysqld或mysqld --user=mysql启动的服务,只能通过mysqladmin shutdown关闭,不能通过service或脚本关闭。

        mysqladmin shutdown可关闭以上三种服务。脚本可关闭service开启的服务,同样service也可关闭脚本开启的服务。

转载于:https://www.cnblogs.com/ivictor/p/4837750.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle之数据处理之其他数据库对象练习

1. 创建序列dept_id_seq,开始值为200,每次增长10,最大值为10000 a) create sequence dept_id_seq b) start with 200 c) increment by 10 d) maxvalue 10000 2. 使用序列向表dept中插入数据 a) insert into dept01 b) values(dept_id_seq.nex…

android 刷rom,刷ROM是什么?刷ROM是什么意思?

刷ROM是什么意思首先,ROM是由英文Read only Memory的首字母构成的,意为只读存储器。顾名思义,就是这样的存储器只能读,不能像RAM一样可以随时读和写。它只允许在生产出来之后有一次写的机会,数据一旦写入则不可更改。它…

网站

Json解析:http://json.tongxiehui.net/ MD5破解:http://www.cmd5.com/转载于:https://www.cnblogs.com/Eazy/p/4840789.html

oracle之set运算符和练习

--创建表 create table emp01 as select * from employees where department_id in (70,80)-- --创建表 create table emp02 as select * from employees where department_id in (80,90) --查询 --并集 select * from employees where department_id in (70,80) union all se…

html自动加https,http自动跳转https的配置方法

IIs中实现Http自动转换到Https方法介绍 (403跳转对SEO有一定影响)1.下载安装URL重写模块:Microsoft URL Rewrite Module32位:http://download.microsoft.com/download/4/9/C/49CD28DB-4AA6-4A51-9437-AA001221F606/rewrite_x86_zh-CN.msi64位&#xff1a…

活动页面html设计,活动查看页面.html

活动查看页面$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resources/reload.html…

《程序员在第一季度追姐姐的书》——提升自己的形象气质

去年,许久没有联系我的高中女同学;突然给我发来了QQ消息。丝毫不犹豫的点击开她的QQ空间。这家伙都已经变成大美女了。。此处省去一万字..... 原来是找我给她p图来了。。一看她的QQ空间里面的说说,这才得知原来妹子已经恢复单身啦&#xff0c…

oracle之高级子查询1

--子查询 查询last_name为chen的manager信息select employee_id,last_name from employees where employee_id( select manager_id from employees where last_nameChen ) 运行结果 --查询 select employee_id,manager_id,department_id from employees where manager_id in( …

intp适合学计算机吗,⑨MBTI测试,分析INTP型人格的专业选择和职业选择

原标题:⑨MBTI测试,分析INTP型人格的专业选择和职业选择在MBTI职业性格测试中,INTP型人格,沉默、自主、思维敏捷、自主性强,对理论和科学有自己的追求。喜欢提出新主张,也爱用逻辑去分析问题,为…

STL学习笔记(仿函数)

仿函数(Functors) 仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。 例如我们定义一个类: class X{public:return-value operator()(arg…

郸城二高2021年高考成绩查询时间,河南高考最高分是谁,2021年河南高考状元名单分数学校...

每年的高考状元是广大考生、家长以及老师最关注的事情,2021年河南高考状元是谁,以下是小编整理的历年河南高考状元,仅供参考。一、2021年河南高考状元名单2021年河南高考状元暂未公布,小编会持续关注并及时更新。二、2020年河南高…

使用NuGet发布自己的类库包(Library Package)

http://www.cnblogs.com/daxnet/archive/2013/05/07/3064577.html 转载于:https://www.cnblogs.com/shiningrise/p/4842367.html

减少GC开销的5个编码技巧

在这篇文章中,我们来了解一下让代码变得高效的五种技巧,这些技巧可以使我们的垃圾收集器(GC)在分配内存以及释放内存上面,占用更少的CPU时间,减少GC的开销。当内存被回收的时候,GC处理很长时间经…

HTML5DOM红蓝盒子,DOM介绍以及使用方法(示例代码)

DOM的基本讲解一、DOM(Document Object Model)文档对象模型1、有属性有方法1 var person {2 name:‘派大星‘,3 fav:function(){4 }5 }2、js中对象分类三种(1)用户定义对象(2)内建对象 Array Date Math (内置)(3)宿主对象3、Model Map(地图)(1)把 DOM 看做一颗“树”(2)DOM 把文…

JavaBean为什么要实现Serializable接口

Java"对象序列化":是指将实现了Serializable接口的对象转换成一组byte,日后要用这个对象时候,可以根据byte数据恢复出来,并据此重新构建那个对象。 优点: 1、JavaBean类基本都要求实现了Serializable接口&…

html的post和get请求参数,HTTP 方法:GET 对比 POST | w3cschool菜鸟教程

HTTP 方法:GET 对比 POST两种最常用的 HTTP 方法是:GET 和 POST。什么是 HTTP ?超文本传输协议(HTTP)的设计目的是保证客户端与服务器之间的通信。HTTP 的工作方式是客户端与服务器之间的请求-应答协议。web 浏览器可能是客户端,而…