Bug #81443 | mysqld --initialize-insecure silently fails with --user flag | ||
---|---|---|---|
Submitted: | 16 May 2016 22:28 | Modified: | 16 Jun 2016 13:24 |
Reporter: | Scott Buchanan | Email Updates: | |
Status: | Duplicate | Impact on me: | |
Category: | MySQL Server: Installing | Severity: | S2 (Serious) |
Version: | 5.7.12 | OS: | CentOS (6.7) |
Assigned to: | Terje Røsten | CPU Architecture: | Any |
[16 May 2016 22:28]
Scott Buchanan
[17 May 2016 9:21]
Terje Røsten
Hi! I am not able to reproduce. Some questions: Can you post your /etc/my.cnf file? Is SELinux enabled? (check with sestatus) Is data directory empty? Does the mysql user exists (check with getent passwd mysql) You are running this command as root user?
[17 May 2016 15:55]
Scott Buchanan
See below session to answer your questions (edited only to remove irrelevant command output) and to demonstrate steps to reproduce. -- scott-buchanan-ripen-mac:workspace scottbuchanan$ mkdir centos-mysql-test && cd centos-mysql-test scott-buchanan-ripen-mac:centos-mysql-test scottbuchanan$ vagrant init bento/centos-6.7 scott-buchanan-ripen-mac:centos-mysql-test scottbuchanan$ vagrant up scott-buchanan-ripen-mac:centos-mysql-test scottbuchanan$ vagrant ssh [vagrant@localhost ~]$ su [root@localhost vagrant]# yum install http://dev.mysql.com/get/mysql57-community-release-el6-8.noarch.rpm [root@localhost vagrant]# yum install mysql-server [root@localhost vagrant]# getent passwd mysql mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false [root@localhost vagrant]# sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: permissive Mode from config file: permissive Policy version: 24 Policy from config file: targeted [root@localhost vagrant]# ls -aZ /var/lib/mysql drwxr-x--x. mysql mysql system_u:object_r:mysqld_db_t:s0 . drwxr-xr-x. root root system_u:object_r:var_lib_t:s0 .. [root@localhost vagrant]# cat /etc/my.cnf # for clarity of output, I've removed blank lines & comments [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [root@localhost vagrant]# mysqld --initialize-insecure --user=mysql # immediately returns with no output [root@localhost vagrant]# echo $? 1 [root@localhost vagrant]# ls -l /var/lib/mysql total 0 [root@localhost vagrant]# file /var/log/mysqld.log /var/log/mysqld.log: empty
[17 May 2016 16:54]
Terje Røsten
Thanks, can you strace the failing process? Might need to install strace first) and then: strace mysqld --initialize-insecure --user=mysql and post last 5-10 lines of output. Any SELinux AVC messages i dmesg output? Can you disable selinux by $ setenforce 0 just to check if that helps?
[17 May 2016 18:11]
Scott Buchanan
Turning off selinux doesn't help. Also, no relevant messages in dmesg. The strace is revealing: open("/var/log/mysqld.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = -1 EACCES (Permission denied) close(1) = 0 open("/var/log/mysqld.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = -1 EACCES (Permission denied) open("/var/log/mysqld.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = -1 EACCES (Permission denied) open("/var/log/mysqld.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = -1 EACCES (Permission denied) open("/var/log/mysqld.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = -1 EACCES (Permission denied) open("/var/log/mysqld.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = -1 EACCES (Permission denied) gettimeofday({1463507870, 466380}, NULL) = 0 munmap(0x7f7d416d2000, 1036288) = 0 tgkill(2761, 2762, SIGRT_3) = 0 futex(0x7f7d3fa0b9d0, FUTEX_WAIT, 2762, NULL) = 0 open("/dev/dtrace/helper", O_RDWR|O_CLOEXEC) = -1 ENOENT (No such file or directory) exit_group(1) = ? +++ exited with 1 +++ Noting the permission-denied error, I checked the permissions of /var/log/mysqld.log, and sure enough, mysql has no rights to it: [root@localhost vagrant]# ls -l /var/log/mysqld.log -rw-r--r--. 1 root root 0 May 17 17:56 /var/log/mysqld.log After changing the log file to be owned by mysql:mysql, the --initialize-insecure proceeds without any issues. So perhaps there are two issues here: 1) The log file is getting created by the RPM with the wrong ownership 2) The server crashes ungracefully when it can't write to the log
[17 May 2016 18:57]
Terje Røsten
Thanks for your report. I think I understand the issue now. Post install scripts does: /bin/touch /var/log/mysqld.log >/dev/null 2>&1 || : However, no chown calls are done. Initscript /etc/init.d/mysqld (and ditto for systemd scripts in el7), will correct this by running chown mysql:mysql on log file. Running init outside initscripts (as you do) don't get this fix and things break. We will fix this in upcoming packages, in the meantime just do $ chown mysql:mysql /var/log/mysqld.log before init. Thanks again for help in resolving this issue!
[16 Jun 2016 13:24]
Terje Røsten
Bug is duplicate of Bug#78512, which was resolved: Noted in 5.5.51, 5.6.32, 5.7.13 changelogs. Installing MySQL from a yum or zypper repository resulted in /var/log/mysqld.log being created with incorrect user and group permissions.