A instalação inicial do MySQL 5.7 na instância do RHEL falha ao iniciar

2

Eu fiz uma instalação padrão do MySQL com o Chef em um AMI na AWS. Aqui está a receita:

mysql_service 'default' do
  bind_address '0.0.0.0'
  port '3306'
  version '5.7'
  initial_root_password 'hunter2'
  action [:create, :start]
end

mysql_config 'default' do
  source 'mysite.cnf.erb'
  notifies :restart, 'mysql_service[default]'
  action :create
end

Depois de corrigir algumas feridas auto-infligidas (não atualizei o Yum antes de instalar), a receita agora funciona corretamente até certo ponto. Na última etapa, onde o MySQL deve iniciar, ele falha. Parece ser um erro do Chef, como eu posso execute o seguinte fora do Chef:

 sudo /usr/bin/mysqld_safe    

Aqui está a saída deste sudo systemctl status mysql-default.service -l:

[ec2-user@ip-250-250-250-250 ~]$ sudo systemctl status mysql-default.service -l
mysql-default.service - mysql_service[mysql-default]
   Loaded: loaded (/usr/lib/systemd/system/mysql-default.service; enabled)
   Active: failed (Result: exit-code) since Sun 2014-12-21 17:36:01 EST; 21min ago
  Process: 26423 ExecStartPost=/usr/libexec/mysql-default-wait-ready $MAINPID (code=exited, status=1/FAILURE)
  Process: 26422 ExecStart=/usr/bin/mysqld_safe --defaults-file=/etc/mysql-default/my.cnf --basedir=/usr (code=exited, status=0/SUCCESS)
 Main PID: 26422 (code=exited, status=0/SUCCESS)

Dec 21 17:36:00 ip-250-250-250-250.us-west-2.compute.internal mysqld_safe[26422]: /usr/bin/mysqld_safe: line 542: /var/lib/mysql-default/mysqld_safe.pid: Permission denied
Dec 21 17:36:00 ip-250-250-250-250.us-west-2.compute.internal mysqld_safe[26422]: awk: (FILENAME=- FNR=2) warning: error writing standard output (Broken pipe)
Dec 21 17:36:00 ip-250-250-250-250.us-west-2.compute.internal mysqld_safe[26422]: 141221 17:36:00 mysqld_safe Logging to '/var/log/mysql-default/error.log'.
Dec 21 17:36:00 ip-250-250-250-250.us-west-2.compute.internal mysqld_safe[26422]: 141221 17:36:00 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql-default
Dec 21 17:36:00 ip-250-250-250-250.us-west-2.compute.internal mysqld_safe[26422]: 141221 17:36:00 mysqld_safe mysqld from pid file /var/run/mysql-default/mysqld.pid ended
Dec 21 17:36:01 ip-250-250-250-250.us-west-2.compute.internal systemd[1]: mysql-default.service: control process exited, code=exited status=1
Dec 21 17:36:01 ip-250-250-250-250.us-west-2.compute.internal systemd[1]: Failed to start mysql_service[mysql-default].
Dec 21 17:36:01 ip-250-250-250-250.us-west-2.compute.internal systemd[1]: Unit mysql-default.service entered failed state.

Parece bastante claro que é algum tipo de problema de permissões, em / var / lib / mysql-default, mas eu estou rodando como sudo então não tenho certeza qual seria o problema. Aqui está a saída do diretório:

[...]
drwxr-xr-x.  2 mysql   mysql      6 Sep 18 10:07 mysql
drwxr-x---.  4 mysql   mysql   4096 Dec 21 17:36 mysql-default
[...]

o $DATADIR é /var/lib/mysql-default. As linhas relevantes em /usr/bin/mysql_safe está:

safe_pid="$DATADIR/mysqld_safe.pid"

[ ... bunch of error checking ...]

# Insert pid properly into the pid file.
ps -e | grep  [m]ysqld_safe | awk '{print $1}' | sed -n 1p > $safe_pid

Alguma ideia?

aronchick
fonte

Respostas:

0

/ usr / bin / mysqld_safe: linha 542: /var/lib/mysql-default/mysqld_safe.pid: permissão negada

Você está certo, o processo falha porque não pode gravar no arquivo pid.

Embora você esteja executando o script de inicialização com sudo, o processo do servidor é provavelmente iniciado com o usuário mysql. Na configuração padrão, deve haver uma linha como esta em mysqld_safe:

user = 'mysql'

Verifique o proprietário e as permissões de /var/lib/mysql-default com:

ls -ld /var/lib/mysql-default

Normalmente, deve pertencer ao mesmo usuário do arquivo de configuração, com permissão 755.

janos
fonte
Interessante - bom ponto. Aqui está a saída: [ec2-user @ ip-250-250-250-250 ~] $ ls -ld / var / lib / mysql-default drwxr-x ---. 4 mysql mysql 4096 21 de dezembro 18:24 / var / lib / mysql-default
aronchick
Isso parece correto. Tente isto: torne-se o mysql usuário com sudo su - mysql e tente criar um arquivo nesse diretório. Pode?
janos