关于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也可关闭脚本开启的服务。
关于Docker官方CentOS镜像无法启动mysqld的总结的更多相关文章
- Docker的centos镜像内无法使用systemctl命令的解决办法
在Docker官方的centos镜像内无法使用systemctl命令的解决办法, 使用该命令docker报错 Failed to get D-Bus connection: Operation not ...
- 【URLOS开发入门】docker官方系统镜像——Alpine入门教程
我们在进行URLOS应用开发时,经常会用到一些基础系统镜像,如:ubuntu.CentOS.Debian等,我们可以通过docker pull命令直接拉取官方镜像. root@ubuntu:~# do ...
- Docker自制CentOS镜像
系统环境:CentOS 7.3 将yum源切换到阿里源 可以直接写成一个脚本 #!/bin/sh mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos ...
- aws查看官方centos镜像imageid
aws ec2 describe-images --owners aws-marketplace --filters Name=product-code,Values=aw0evgkw8e5c1q41 ...
- 2.docker下centos镜像
1.下载并运行 # 交互模式下载并运行centos容器 $ docker run -it centos:latest /bin/bash 1.1 配置centos的环境别名 $ vi /etc/bas ...
- CentOS7安装Docker,运行Nginx镜像、Centos镜像
摘要 总体思路:yum命令直接安装Docker,下载想要的镜像并启动 1.环境,CentOS7 Minimal 64位,Docker必须要64位的系统 2.通过yum命令直接安装,yum instal ...
- 转:Docker创建centos的LNMP镜像
转自:http://www.vckai.com/p/29 1. 安装docker 这个就不说了,不会的可以看下我之前的文章<Docker介绍及安装>. 1)启动docker # serv ...
- Docker创建centos的LNMP镜像
前段时间重装了系统,今天刚好有时间,就用docker安装一个lnmp开发环境,下面是我的安装笔记. 1. 安装docker 这个就不说了,不会的可以看下我之前的文章<Docker介绍及安装> ...
- 『现学现忘』Docker基础 — 35、实战:自定义CentOS镜像
目录 1.前提说明 2.编写Dockerfile文件 3.构建镜像 4.运行镜像 5.列出镜像的变更历史 1)目标:自定义镜像wokong_centos. 2)所用到的保留字指令: FROM:基础镜像 ...
随机推荐
- 关于Android中res目录strings.xml文件中的转义字符之笔录
res目录strings.xml文件中的转义字符: ------------------> 代表着一个汉字的位置: ---- ...
- vector、list、deque三者比较
1.vector是一段连续的内存块,而deque是多个连续的内存块,list是所有数据元素分开保存,可以是任何两个元素都没有连续. 2.vector的查询性能最好,并且的末端增加数据也很好,除非它重新 ...
- C/C++_date&time
在标准C/C++中与日期和时间相关的数据结构 注意:年份是实际年份与 1900 的差值 我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下: #ifndef _TM_DEFIN ...
- Tempdb initial size和dbcc shrinkfile
在使用sql server时您可能遇到过下面的情况,tempdb的数据文件初始大小为3mb, 随着对tempdb的使用,tempdb文件逐渐变得很大(例如30GB),导致了磁盘空间不足. 此时您需要立 ...
- 深入NSQ 之旅[转载]
介绍 NSQ是一个实时的分布式消息平台.它的设计目标是为在多台计算机上运行的松散服务提供一个现代化的基础设施骨架.这篇文章介绍了 基于go语言的NSQ的内部架构,它能够为高吞吐量的网络服务器带来 性能 ...
- Code First开发系列之数据库迁移
返回<8天掌握EF的Code First开发>总目录 本篇目录 开启并运行迁移 使用迁移API 应用迁移 给已存在的数据库添加迁移 EF的其他功能 本章小结 自我测试 本系列的源码本人已托 ...
- mysql字符串处理例子
项目中用到的,要判断表中某个字段的某几位,若为某个值则替换,用到了几个典型的字符串操作,记录备注实现方案如下: 备注:如果替代字符串是唯一的话,可以用replace,这里用的是concat拼接. DE ...
- 我的面板我做主 -- 淘宝UWP中自定义Panel的实现
在Windows10 UWP开发平台上内置的XMAL布局面板包括RelativePanel.StackPanel.Grid.VariableSizedWrapGrid 和 Canvas.在开发淘宝UW ...
- Kruskal 最小生成树算法
对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...
- MySQL 远程连接(federated存储引擎)
标签:federated存储引擎 概述 本文主要介绍通过federated存储引擎建立远程连接表 测试环境:mysql 5.6.21 步骤 开启federated存储引擎 先查看federated存储 ...