Mysql e apache não iniciam

Estou com problema de conexão no xampp. Acabei de instalar o xampp, no meu deepin, e ele não conecta, nem o apache e nem o mysql, para que eu possa usar o workbenck. Tentei abrir ele pelo terminal para ver se apresentava e algum erro. Então surgiu esse no apache:

XAMPP: Starting Apache…fail.
XAMPP: Starting diagnose…
XAMPP: Sorry, I’ve no idea what’s going wrong.
XAMPP: Please contact our forum http://www.apachefriends.org/f/
Last 10 lines of “/opt/lampp/logs/error_log”:
tail: não foi possível abrir ‘/opt/lampp/logs/error.log’ para leitura: Arquivo ou diretório não encontrado

E no mysql:

/opt/lampp/bin/mysql.server: 264: kill: No such process

Alguém pode me ajudar?

Recomendo o uso desses softwares independentes, ñ há necessidade do xampp, o gerenciamento deles no Linux é melhor com a versão da sua distro.

1 curtida

Olá @moisesjr4

Eu vi que você tem algumas perguntas aqui no forum sobre desenvolvimento com PHP.

Este semestre estou vendo PHP, então vou postar o que funcionou pra mim.

Nas aulas é comum ver os professores utilizando XAMPP, LAMP e afins.

Contudo eu não queira instalar esses serviços todos (servidores) na minha máquina e eu não queria perder muito tempo configurando, liberando portas, definindo quais hosts terão acesso e tudo mais.

Então para fazer o desenvolvimento com PHP + MySQL acabei utilizando contêineres (Docker).

Como você está no Deepin acredito que os passos são os mesmos do Debian. Achei na internet este tutorial, porém não testei.

Com o Docker testado e funcionado eu precisei gerar uma imagem que possua o plugin PDO do PHP. Para isso crie um arquivo chamado Dockerfile (somente esse nome e sem extensão), o mesmo ficou com o seguinte código:

# Dockerfile.

# Imagem que será utilizada como base.
FROM php:7.3.3-apache-stretch

# Instalando o plugin do MySQL.
RUN docker-php-ext-install pdo_mysql

Para criar a imagem contendo o plugin pode-se utilizar o seguinte comando:

docker build -t php-pdo-mysql:v1 .

OBS: Repare que estou executando o comando sem sudo, isso porque adicionei o meu usuário ao grupo docker. Ex: sudo usermod -aG docker $USER. Depois do comando pode ser necessário sair da sessão e entrar novamente (ou reiniciar).

Com a imagem criada eu dei preferencia por utilizar o docker-compose para criar os serviços.

Para ver como instalar o docker-compose clique aqui.

O meu docker-compose ficou assim:

# docker-compose.yml
version: "3"

# Criando os serviços
services:
  db:
    # Imagem oficial do MySQL
    image: mysql:5.7.24
    container_name: MySQL
    # Container será reiniciado somente se falhar.
    restart: on-failure
    # Porta onde o serviço estará disponível, onde
    # porta da sua máquina : porta do container.
    ports:
      - "3306:3306"
    # Não está sendo utilizanda percistencia dos dados.
    # Quando o container é desligado os dados somem!
    volumes:
      # Mapeado a pasta de data e hora do host (minha máquina)
      # para o container, assim ambos ficam com a mesma data e hora.
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      # Utilizando um volume para salvar os dados do MySQL.
      # - mysql-data:/var/lib/mysql
      # Salvando os dados do MySQL localmente.
      # - ./data/db:/var/lib/mysql
    # Configurando usuário, senha e database.
    environment:
      MYSQL_USER: NomeDoUsuario
      MYSQL_PASSWORD: 123456
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: NomeDoDB
    # Rede onde os containers se comunicam entre si.
    networks:
      - NomeDaRede
  web:
    # Utilizando imagem criada pelo Dockerfile.
    image: php-pdo-mysql:v1
    container_name: Apache
    restart: on-failure
    ports:
      - 8080:80
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      # Montando o diretório html (local) dentro do container.
      # Isso permite que se edite os arquivos localmente
      # e se veja o resultado em tempo real.
      - ./html:/var/www/html
    depends_on:
      - db
    networks:
      - NomeDaRede
# Rede para comunicação entre os containers.
networks:
  NomeDaRede:

A minha estrutura de projeto é a seguinte:

Meus arquivos PHP e todo o código ficaram dentro da pasta html que será a pasta mapeada para dentro do contêiner PHP + Apache.

Para executar o docker-compose pode-se utilizar:

docker-compose up

No comando a cima o terminal ficará preso com o log dos contêineres.

Para acessar digite no navegador http://localhost:8080/:

  • 8080 porque definimos essa porta no docker-compose.
  • localhost ou ip da sua maquina.

Para parar os contêineres utilize Ctrl + c e depois:

docker-compose down

O docker-compose down irá remover a rede, volumes e contêineres que foram criado.

Caso não queira deixar o terminal preso com o log pode-se utilizar:

docker-compose up -d

E para parar os contêineres utilize novamente:

docker-compose down

Para acessar os contêineres que estão em execução você pode utilizar:

docker exec -it Apache bash

ou

docker exec -it MySQL bash

Com isso a minha string de conexão do PDO ficou:

PDO("mysql:host=MySQL;dbname=NomeDoDB;port=3306", "NomeDoUsuario", "123456");

Essa foi a solução que encontrei para o meu caso e claro eu já havia utilizado Docker antes.

OBS: Vale notar que estou executando o Docker localmente no caso de se utilizar Virtualbox ou outro virtualizador eu acredito que configurações adicionais tenham que ser feitas nos arquivos .htaccess, apache2.conf, etc.

2 curtidas

Eu pessoalmente prefiro montar o xampp manualmente, e depois colocar scripts de inicialização e jogar na área de trabalho, no meu caso fica literalmente um clique para subir, reiniciar e parar o servidor kkkkkk

2 curtidas

@natorsc Cara não funfou! Da uns erros ao instalar a docker. Vou ter que troca de SO. Volta para o mint.