在centOs7上面会出现这个问题,不是cenOs7可以跳过。
最近通过docker外部挂载文件的方式安装percona5.7.23,能够正常的创建容器,但是percona不能启动起来,网上找了很久解决,下面给出我的方法
拉取镜像:
docker pull percona:5.7.23
创建文件并给写入配置文件
#创建目录
mkdir /data/mysql/master01 -p
cd /data/mysql/master01
mkdir conf data
chmod 777 * -R
#创建配置文件
cd /data/mysql/master01/conf
vim my.cnf
#输入如下内容
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #服务id,不可重复
以上是正确的步骤
下面是错误的演示,(不想看原因的,直接到下面的正确操作)
#创建容器
docker create --name percona-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
代码的意思如下
# -v /data/mysql/master01/data:/var/lib/mysql 数据挂载;对应刚刚创建的目录
# -v /data/mysql/master01/conf:/etc/my.cnf.d 指定配置文件;对应刚刚创建的目录
# -p 3306:3306 端口映射
# -e MYSQL_ROOT_PASSWORD=root 指定root用户的密码
启动刚刚创建的容器
docker start percona-master01
然后在这里发现这个容器不能启动起来
查看日志:
docker logs -f percona-master01
错误信息:
ERROR: mysqld failed while attempting to check config
command was: "mysqld --verbose --help"
mysqld: Can't read dir of '/etc/my.cnf.d/' (Errcode: 13 - Permission denied)
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
大概意思就是权限被拒绝,不能读取到'/etc/my.conf.d/'这个下面的文件
在这里我尝试了给予my.conf.d目录最大的权限,依然不能解决。
最终找到是CentOs7的权限问题
因为Centos7安全Selinux禁止了一些安全权限,导致mysql和percona在进行挂载目录-的时候会出现这个异常。
解决办法:
在docker run中加入 –privileged=true 给容器加上特定权限。
正确的操作:
通过docker run 在创建容器的时候加上 –privileged=true 挂载文件目录,并启动容器
# 这里的 --privileged=true 必须是在挂载目录 的前面,否则出错
docker run --privileged=true --name percona-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/my.cnf.d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
通过这个命令,percona就可以启动起来了,
测试连接