Percona-time time out on /etc/init.d/mysql start

6

Toda vez que eu inicio o mysql, usando /etc/init.d/mysql start ou service mysql start, sempre expira.

 * Starting MySQL (Percona Server) database server mysqld                   [fail] 

No entanto, posso entrar no mysql. Só queria saber se há um problema com a instalação, porque isso acontece o tempo todo, não um erro.

mysql-error.log mostra:

121214 11:25:56 mysqld_safe Starting mysqld daemon with databases from /data/mysql/
121214 11:25:56 [Note] Plugin 'FEDERATED' is disabled.
121214 11:25:56 InnoDB: The InnoDB memory heap is disabled
121214 11:25:56 InnoDB: Mutexes and rw_locks use GCC atomic builtins
121214 11:25:56 InnoDB: Compressed tables use zlib 1.2.3
121214 11:25:56 InnoDB: Using Linux native AIO
121214 11:25:56 InnoDB: Initializing buffer pool, size = 14.0G
121214 11:25:58 InnoDB: Completed initialization of buffer pool
121214 11:26:01  InnoDB: Waiting for the background threads to start
121214 11:26:02 Percona XtraDB (http://www.percona.com) 1.1.8-rel29.2 started; log sequence number 9333955393950
121214 11:26:02 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
121214 11:26:02 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
121214 11:26:02 [Note] Server socket created on IP: '0.0.0.0'.
121214 11:26:02 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.005163' at position 624540946, relay log '/data/mysql/mysql-relay-bin.000043' position: 624541092
121214 11:26:02 [Note] Slave I/O thread: connected to master '[email protected]:3306',replication started in log 'mysql-bin.005180' at position 823447620
121214 11:26:02 [Note] Event Scheduler: Loaded 0 events
121214 11:26:02 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.28-29.2-log'  socket: '/data/mysql/mysql.sock'  port: 3306  Percona Server (GPL), Release 29.2
    
por ks_1010 14.12.2012 / 20:28

4 respostas

3

A exibição do log de erros parece bastante normal

O arquivo de soquete foi criado Replicação do MySQL começou bem /usr/sbin/mysqld: ready for connections. aparece

Em particular, desde que você veja /usr/sbin/mysqld: ready for connections. , você deve ser capaz de se conectar ao mysql que você acabou de afirmar que você pode.

Seu processo mysqld está bem.

O erro pode estar vindo de /etc/init.d/mysql , mas não antes de o mysqld ter feito tudo o que precisava fazer.

Se você olhar dentro de /etc/init.d/mysql , há duas linhas

[root@***** init.d]$ cat mysql | grep -n "&" | grep "pid-file"
313:      $manager --user=$user --pid-file=$pid_file >/dev/null 2>&1 &
327:      $bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 &

Se /etc/init.d/mysql expirou, isso ocorreu após essas duas linhas.

Aqui está o código que verifica o arquivo pid

wait_for_pid () {
  verb="$1"
  manager_pid="$2"  # process ID of the program operating on the pid-file
  i=0
  avoid_race_condition="by checking again"
  while test $i -ne $service_startup_timeout ; do

    case "$verb" in
      'created')
        # wait for a PID-file to pop into existence.
        test -s $pid_file && i='' && break
        ;;
      'removed')
        # wait for this PID-file to disappear
        test ! -s $pid_file && i='' && break
        ;;
      *)
        echo "wait_for_pid () usage: wait_for_pid created|removed manager_pid"
        exit 1
        ;;
    esac

    # if manager isn't running, then pid-file will never be updated
    if test -n "$manager_pid"; then
      if kill -0 "$manager_pid" 2>/dev/null; then
        :  # the manager still runs
      else
        # The manager may have exited between the last pid-file check and now.
        if test -n "$avoid_race_condition"; then
          avoid_race_condition=""
          continue  # Check again.
        fi

        # there's nothing that will affect the file.
        log_failure_msg "Manager of pid-file quit without updating file."
        return 1  # not waiting any more.
      fi
    fi

    echo $echo_n ".$echo_c"
    i='expr $i + 1'
    sleep 1
  done

  if test -z "$i" ; then
    log_success_msg
    return 0
  else
    log_failure_msg
    return 1
  fi
}

wait_for_pid() é chamado após o lançamento do mysqld_safe

  # Give extra arguments to mysqld with the my.cnf file. This script
  # may be overwritten at next upgrade.
  pid_file=$server_pid_file
  $bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 &
  wait_for_pid created $!; return_value=$?

No pior dos casos, o mysqld está rodando sem um arquivo pid. Em vista disso, service mysql stop e /etc/init.d/mysql stop podem não funcionar corretamente, pois verifica se o arquivo pid sabe o id do processo do mysqld.

Sem um arquivo pid, o jeito certo de desligar o mysqld é

# mysqladmin -uroot -h127.0.0.1 --protocol=tcp -p shutdown

CAVEAT

Este não é aquele local de um fenômeno. Eu vi isso acontecer com binários padrão do MySQL também.

    
por 14.12.2012 / 21:11
3

Parece que o script de inicialização verifica se há um servidor MySQL / Percona em execução no Ubuntu usando mysqladmin --defaults-file=/etc/mysql/debian.cnf ping (consulte as linhas 27 e 77 de /etc/init.d/mysql do neste caso percona-server-server-5.5 package version 5.5.28-rel29.2-360.precise ). Isso funciona em uma nova instalação padrão, mas ao copiar arquivos de dados na configuração da replicação de outra máquina, o usuário configurado em debian.cnf não corresponde mais.

Como resultado, o comando mysqladmin falhará e o script de inicialização irá relatar o serviço falhou, mas é executado corretamente, como você pode ver nos registros.

Uma solução é recriar o usuário do MySQL que os scripts init esperam. No mestre, basta adicionar o usuário assim (parece ter todos os privilégios por padrão ?!):

GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES,
CREATE USER, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, FILE, INDEX, INSERT,
LOCK TABLES, PROCESS, REFERENCES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE,
SELECT, SHOW DATABASES, SHOW VIEW, SHUTDOWN, SUPER, TRIGGER, UPDATE
ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY PASSWORD 
*replacethiswithaknownhash' WITH GRANT OPTION;

e crie / modifique o arquivo /etc/mysql/debian.cnf :

[client]
host     = localhost
user     = debian-sys-maint
password = yourpass
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = yourpass
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

Pode ser necessário aguardar até que o processo de replicação seja recuperado e tente reiniciar.

    
por 14.12.2012 / 22:27
0

Teve exatamente o mesmo problema no debian. O servidor, na verdade, inicia, mas o script de inicialização diz que ele falha:

/etc/mysql/debian.cnf has the mysql socket set at /var/run/mysqld/mysqld.sock

considerando que o my.cnf provavelmente está definido para

/var/lib/mysql/mysql.sock

Certifique-se de que o caminho do socket e do pid em my.cnf esteja apontando para o que está definido em

/etc/mysql/debian.cnf

Certifique-se também de apontar para o mysqld não mysql

    
por 23.05.2014 / 15:57
0

Eu sei que isso é um pouco antigo, mas é 30/4/2015 e nós tivemos o mesmo problema com o Percona 5.6.

A função /etc/init.d/mysql 'start' tem o seguinte (iniciando ln: 112):

#wait 10sec before start checking if pid file created or server is dead
if [ $dead_check_counter -lt 10 ]; then
   dead_check_counter=$(( dead_check_counter + 1 ))
else
  if mysqld_status check_dead warn; then break; fi
fi

Nosso servidor normalmente requer cerca de 40-70 segundos para iniciar (a inicialização de um buffer pool de innodb de 97GB leva apenas 35 segundos), então naturalmente 'start' informa que está 'morto' já que o arquivo de soquete ainda não foi criado. / p>

Acabei de aumentar o valor "10" e isso funcionou bem para mim.

Felicidades

    
por 29.04.2015 / 23:24

Tags