Posts com Tag ‘mysql’

1. Saber qual SO
$ cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="8.5 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.5"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.5 (Ootpa)"

$ uname -a ; saber qual versão do kernel do Linux
Linux proddf0544 4.18.0-348.20.1.el8_5.x86_64 #1 SMP Tue Mar 8 12:56:54 EST 2022 x86_64 x86_64 x86_64 GNU/Linux

$ cat /proc/version ; informações mais detalhadas do kernel do Linux
Linux version 4.18.0-348.20.1.el8_5.x86_64 (mockbuild@x86-vm-07.build.eng.bos.redhat.com) (gcc version 8.5.0 20210514 (Red Hat 8.5.0-4) (GCC)) #1 SMP Tue Mar 8 12:56:54 EST 2022

$ cat /etc/hostname
proddf0544

 

2. Como copiar textos entre janelas windows e PuTTY
a) Copiar texto do windows para o PuTTY
– Marcar o texto na janela windows (botão esquerdo do mouse);
– Ctrl-C para copiar texto do Windows;
– Shift+Insert para colar o texto na janela do PuTTY.

b) Copiar texto da janela PuTTY para o Windows
– Marcar o texto na janela PuTTY (botão esquerdo do mouse);
– Usar botão direito do mouse;
– Ctrl-V na janela Windows.
 

3. Atualizar pacotes
# yum update

4. Instalar pacote
# yum install <pacote-1> <pacote-2> <pacote-n>
 

5. Verificar se existe assinatura do Red Hat Enterprise Linux Server anexada:
# subscription-manager list --installed
+-------------------------------------------+
Estado de Produtos Instalados
+-------------------------------------------+
Nome do Produto: Red Hat Enterprise Linux for x86_64
ID do Produto: 479
Versão: 8.5
Arq: x86_64
Estado: Desconhecido
Detalhes de Status:
Inicia:
Finaliza:

Obs: se houvesse assinatura, deveria mostrar “Server” no Nome do Produto e “Subscribed” como o Estado.
 

6. Repositórios
/etc/yum.conf – arquivo com as informações de configuração para yum e utilidades relacionadas;

a) Para adicionar um repositório ao sistema e habilitá-lo:
# yum-config-manager --add-repo repository_URL
 

7. Instalar LAMP
# dnf update
# dnf install httpd mariadb-server
# dnf install php php-mysqlnd php-mbstring php-opcache php-gd php-xml php-zip php-pear php-json
# systemctl enable httpd.service mariadb.service
; Ligar os servidores Apache e MariDB no momento da inicialização.
# mysql_secure_installation ; configurar senha do usuário root do banco de dados; proteger o servidor MariaDB
# systemctl start httpd ; iniciar o servidor Apache

Definir o fuso horário do PHP no arquivo /etc/php.ini:
date.timezone = America/Sao_Paulo

Visualizar as propriedades da instalação do PHP:
$ php -i
$ php -i | grep "\.ini"

 

8. Configurar o Mariadb
# mkdir /var/lib/mysql
# chown mysql:mysql /var/lib/mysql
# systemctl start mariadb
; iniciar o servidor mariadb
# mysql ; login no servidor mariadb

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.28-MariaDB MariaDB Server

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.000 sec)

 
# ps -A | grep mysql

35970 ? 00:00:00 mysqld

 

Finalmente, deve-se proteger a instalação do MariaDB. Com o comando abaixo, serão feitas algumas perguntas sobre a instalação do MariaDB de forma a se poder alterar a senha do usuário root do banco de dados, desabilitar o banco de dados de teste, desabilitar usuários anônimos e desabilitar o login root remotamente:
# mysql_secure_installation

Verificar usuários habilitados a fazer login no MariaDB:

MariaDB [(none)]>  SELECT User, Host, Password FROM mysql.user;
+------+-----------+-------------------------------------------+
| User | Host      | Password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *BCD148177BEE4C4AF62537365050FC2DCE9B7BFF |
| root | 127.0.0.1 | *BCD148177BEE4C4AF62537365050FC2DCE9B7BFF |
| root | ::1       | *BCD148177BEE4C4AF62537365050FC2DCE9B7BFF |
+------+-----------+-------------------------------------------+
3 rows in set (0.001 sec)

No caso mostrado temos apenas o usuário root com direito de acesso ao MariaBD, e a partir da própria máquina em que está o MySQL. Seja utilizando o nome do host como localhost, ou o endereço IP 127.0.0.1.

Agora, só será possível fazer login no MariaDB através de senha:
$ mysql -u root -p

Se necessitar alterar configurações do MariaDB, utilizar do arquivo /etc/my.cnf.d/mariadb-server.cnf.
Pastas importantes:
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid

 

9. Abrir porta 80
Por default, firewall mo RHEL 8 bloqueia acesso para HTTP TCP na porta 80. Para abrir HTTP na porta 80, executar:
# firewall-cmd --permanent --add-service=http --zone=public
# firewall-cmd --reload
# firewall-cmd --list-services --zone=public

 

10. Instalar o phpMyAdmin
# dnf install wget
$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz
$ tar xvf phpMyAdmin-5.2.1-all-languages.tar.gz
# mv phpMyAdmin-5.2.1-all-languages/ /usr/share/phpmyadmin
# chown -R root:root /usr/share/phpmyadmin/
# mkdir -p /var/lib/phpmyadmin/tmp ; Criar pasta para arquivos temporários do phpMyAdmin.
# chown -R apache:apache /var/lib/phpmyadmin
# mkdir /etc/phpmyadmin/
; Criar uma pasta para os arquivos de configuração do phpMyAdmin.
# cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php ; Criar o arquivo de configuração do phpMyAdmin.

Editar o arquivo /usr/share/phpmyadmin/config.inc.php definindo uma senha secreta de 32 caracteres e o diretório temporário:
$cfg['blowfish_secret'] = 'H2OxcGXxflSd8JwrwVlh6KW6s2rER63i';
$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
$cfg['Servers'][$i]['pmadb'] = 'bdmyadmin';

Observações:

  • o valor para “pmadb” a ser escolhido deve corresponder ao nome da base de dados que vamos criar mais adiante neste script.
  • a sequência de 32 caracteres não é uma senha que precise ser lembrada, a qual será apenas utilizada internamente pelo algoritmo AES.
  • caso a sequência inserida contiver menos de 32 caracteres, ocasionará cookies criptografados menos seguros. Mais de 32 caracteres não causará nenhum dano.

Configurar o servidor web Apache, criando o arquivo de configuração Apache do phpMyAdmin
(em /etc/httpd/conf.d/phpmyadmin.conf):

# Apache configuration for phpMyAdmin
Alias /phpMyAdmin /usr/share/phpmyadmin/
Alias /phpmyadmin /usr/share/phpmyadmin/

<Directory /usr/share/phpmyadmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require all granted
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

Validar a configuração do Apache:
$ apachectl configtest
Syntax OK
# systemctl restart httpd
; Reiniciar o serviço httpd para carregar a nova configuração.

Acessar com o navegador http://IP_ou_dominio/phpmyadmin/ para obter a tela de login:

Tela inicical do phpmyadmin

Criar usuário do phpMyAdmin no banco de dados MySQL:
# mysql -u root
MariaDB [(none)]> SELECT user,password FROM mysql.user;
MariaDB [(none)]> CREATE USER usuario_myadmin@localhost IDENTIFIED BY 'senha_usuario';
MariaDB [(none)]> CREATE DATABASE bdmyadmin CHARACTER SET utf8mb4 COLLATE utf8mb4_swedish_ci;
MariaDB [(none)]> GRANT ALL PRIVILEGES on bdmyadmin.* to 'usuario_myadmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> quit;

Observações:

  • o nome da base (aqui escolhido como bdmyadmin) e o nome do usuário (aqui escolhido como usuario_myadmin) são meros exemplos. Mas deve corresponder ao que fora definido antes na configuração do arquivo /usr/share/phpmyadmin/config.inc.php.
  • Ao fazer a autenticação no aplicativo, o acesso a base de dados bdmyadmin já estará disponível. Se o usuário tiver acesso a outras bases de dados, estas também estarão disponíveis simultaneamente.
  • Para fazer a autenticação no aplicativo, utilize as credenciais escolhidas:
    usuario: usuario_myadmin
    senha: senha_usuario

 

11. Sobre o Apache
a) Configuração do Apache
/etc/httpd/ – Pasta principal de configuração do Apache.
/etc/httpd/conf/httpd.conf – Arquivo principal de configuração do Apache.
/var/log/httpd/ – Pasta com arquivos de erro e de acesso.
/etc/httpd/conf.modules.d – Pasta de configuração dos módulos Apache (tais como o proxy, php e outros).

 
b) Comandos para iniciar/parar/reiniciar o Apache
# systemctl start httpd.service ## <- Start Apache ##
# systemctl stop httpd.service ## <- Stop Apache ##
# systemctl restart httpd.service ## <- Restart Apache ##
# systemctl reload httpd.service ## <- Reload Apache ##
# systemctl status httpd.service ## <- Get status of Apache ##
# systemctl enable httpd.service ## <- Start Apache at boot time ##
 

12. Comandos úteis
a) Verificar IP do servidor:
$ ip a
b) Para buscar e instalar módulos adicionais PHP:
$ dnf search php-
$ dnf search php- | grep -i mysql

c) Verificar se porta 80 está aberta:
$ sudo ss -tulpn | grep :80
d) Informações sobre alguns módulos PHP isntalados:
$ dnf info php-mbstring
$ dnf info php-gd

e) Lista de Repositórios:
$ dnf repolist
f) Tornar comando “locate” disponível:
# dnf install mlocate
g) Listar módulos PHP instalados:
$ php -m
h) Visualizar as propriedades da instalação do PHP:
$ php -i
$ php -i | grep "\.ini"

 
Referências:
1- How To Install phpMyAdmin on CentOS 8 / RHEL 8
2- Instalar phpMyadmin numa máquina com Debian
3- Tutorial MySQL ( instalar em ambiente Linux – Debian )

1)Ambiente inicial (que iremos alterar)
$ apt-cache policy mysql-server
mysql-server:
Instalado: 8.0.32-0ubuntu0.22.04.2

$ php -v
PHP 8.1.2-1ubuntu2.11 (cli) (built: Feb 22 2023 22:56:18) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies

$ apachectl -v
Server version: Apache/2.4.52 (Ubuntu)

2) Selecionar a língua default para o sistema (pt_BR.UTF-8)
$ echo $LANG
# apt-get install locales
# dpkg-reconfigure locales
…selecionando pt_BR.UTF-8 UTF-8

3) Atualizar data e hora do servidor
# dpkg-reconfigure tzdata

Para verificar:
# date
Dom Set 17 13:14:05 -03 2017

4) Instalar complementos do PHP
# php -v
PHP 8.1.2-1ubuntu2.11 (cli) (built: Feb 22 2023 22:56:18) (NTS)
# apt install php-mbstring php-gd php-zip php-cgi php-xml php-intl

5) Definir parâmetros do PHP
# vim /etc/php/8.1/apache2/php.ini
memory_limit 128M
session.auto_start = 0
session.use_trans_sid = 0
date.timezone = America/Sao_Paulo

6) Preparar base de dados
mysql> create database nome_base;
mysql> CREATE USER nome_usuario@localhost IDENTIFIED BY 'senha_escolhida';
mysql> GRANT ALL PRIVILEGES on nome_base.* to 'nome_usuario'@'localhost';
mysql> FLUSH PRIVILEGES;

7)Baixar o pacote e já desempacotá-lo a partir da pasta raiz do virtualhost
https://sourceforge.net/projects/dotproject/ (dotProject-2.2.0.zip)

8) Criar um HostVirtual para a aplicação: /etc/apache2/sistes-available/dotproject.conf


<VirtualHost *:80>
   ServerAdmin info@exercicio.com.br
   DocumentRoot /var/www/html/project/
   ServerName dotproject
   ServerAlias www.dotproject.exercicio.com.br
   <Directory /var/www/project/>
      Options FollowSymLinks
      AllowOverride All
   </Directory>
</VirtualHost>

# a2ensite dotproject.conf
# /etc/init.d/apache2 restart

9) Instalar PHP7.4
Obs: no momento deste post o dotProject estava incompatível com o PHP8. Vamos usar o php7.4
# add-apt-repository ppa:ondrej/php && sudo apt update
# apt-get install php7.4 php7.4-mysql libapache2-mod-php7.4 php7.4-mbstring php7.4-gd php7.4-zip php7.4-xml php7.4-intl
# update-alternatives --set php /usr/bin/php7.4
# a2dismod php*
# a2enmod php7.4
# systemctl restart apache2
# update-alternatives --set php /usr/bin/php7.4
# php -v
PHP 7.4.33 (cli) (built: Feb 14 2023 18:31:54) ( NTS )
# apt show php7.4 -a
add-apt-repository ppa:ondrej/php --remove

Obs: de forma alternativa, para listar as alternativas de versões PHP instaladas e poder fazer a escolha desejada, utilize o comando update-alternativas acima da seguinte forma:
# update-alternatives --config php

10) Instalar módulo português do dotProject (na pasta “locales” da instalação do dotProject)
No momento da publicação deste post, baixar o arquivo dotProject-2.2.0.zip disponível em https://sourceforge.net/projects/dotmods/files/
Obs: a instalação deve gerar a pasta locales/pt_br, com os arquivos necessários dentro desta pasta.

11) Acertar os privilégios das pastas e dos arquivos
a) Fazer todos os diretórios terem modo 755
find . -type d -exec chmod 755 {} \;

b) Fazer todos os arquivos terem modo 644
find . -type f -exec chmod 644 {} \;

12) Acessar a url do projeto e fazer a instalação/configuração da aplicação
http://endereco/project

Tela inicial de Instalação do dotProject

13) Fornecer as Informações de configuração da base de dados

Configuração da base de dados do dotProject

14) Remover pasta de instalação do dotProject (por segurança)
Após instalação ser bem sucedida, remover pasta de instalação:
# rm -R install

15) Aplicar patches
a) Modificar o código em modules/files/index_table.php na linha 172:
DE
$q2->addGroup('f.file_version_id DESC');

PARA
$q2->addGroup('f.file_version_id');
$q2->addOrder('f.file_version_id DESC');

b) modules/tasks/todo.php linha 137:
$q->addWhere( "ta.task_start_date is not null AND ta.task_start_date != '0000-00-00 00:00:00'" );

c) modules/tasks/tasks.php line 232: "AND (task_percent_complete < 100 OR task_end_date is null) "
e linha 240 "AND (task_percent_complete < 100 OR task_end_date is null) "

d) No arquivo baixado do locale português faltou o seguinte arquivo: lang.php
Se ele não existir na pasta locales/pt_br, crie o arquivo com o seguinte conteúdo:

<?php
$dir = basename(dirname(__FILE__));
$LANGUAGES["pt_br"] = array ($dir, "Português", "Português", "pt_br");
?>

e) No arquivo baixado do locale português faltou o seguinte arquivo: locales.php
Se ele não existir na pasta locales/pt_br, crie o arquivo com o seguinte conteúdo:

<?php
//$locale_char_set = 'iso-8859-1';
$locale_char_set = 'utf-8';
// 0 = sunday, 1 = monday
define('LOCALE_FIRST_DAY', 0);
define('LOCALE_TIME_FORMAT', '%I:%M %p');
?>

 

16) Configurar para o português
Em System Admin -> System Configuration, mudar a caixa “Host Locale” para pt_br, conforme figura abaixo.

Configurar dotProject para locale pt_br

 

Depois fazer System Admin -> Default User Preferences, e mudar a caixa “Locale” para Português, conforme figura abaixo.

Configurar opção de idioma para o português.

 
Pronto. Fazer logout e quando fizer novamente login o dotProject já estará no idioma Português.

17) Complementação da tradução para o português
Algumas mensagens continuaram em língua inglesa mesmo após da utilização dos arquivos de traduções. Abaixo uma lista de outras mensagens que necessitaram de serem inseridas nos arquivos de tradução:
a) No arquivo locales/pt_br/system.inc:
"Add a new Custom Field to this Module"=>"Adicionar um novo Campo personalizado a este Módulo",
"Billing Code Table"=>"Tabela de códigos de cobrança",
"custom fields"=>"campos personalizados",
"Custom Field Editor"=>"Editor de campo personalizado",
"Custom field editor"=>"Editor de campo personalizado",
"Custom Fields - Add/Edit"=>"Campos Personalizados - Adicionar/Editar",
"default user preferences"=>"Preferências Padrões do Usuário",
"Default User Preferences"=>"Preferências Padrões do Usuário",
"Field Description"=>"Descrição do Campo",
"Field Display Type"=>"Tipo do campo",
"Field Name/Identifier"=>"Nome/Identificador do Campo",
"HTML Tag Options"=>"Opções de Tags HTML",
"Import Contacts"=>"Importar Contatos",
"List of Options"=>"Lista de Opções",
"New Custom Field In"=>"Novo Campo Personalizado no",
"System Configuration"=>"Configuração do Sistema",
"system configuration"=>"Configuração do Sistema",
"(No Spaces)"=>"(Sem Espaços)",
"Checkbox"=>"Caixa de Selecao",
"Select List"=>"Lista Escolha",
"Separator"=>"Separador",
"Text Input"=>"Entrada de Texto",
"Text Area"=>"Area de texto",

b) No arquivo locales/pt_br/common.inc
"End"=>"Fim",
"no departments"=>"Não há departamentos",
"Search"=>"Procurar ",
"Start"=>"Início",

c) No arquivo locales/pt_br/projects.inc
"All Projects"=>"Todos Projetos",
"All Users"=>"Todos Usuarios",
"All w/o in progress"=>"Todos w/o em progresso",
"Assigned Users"=>"Usuarios Atribuidos",
"Attach a file"=>"Anexe um arquivo",
"Collapse"=>"Recolher",
"Comments"=>"Comentarios",
"Cost Code Filter"=>"Filtro de codigo de custo",
"Division"=>"Divisao",
"Done"=>"Feita",
"Events"=>"Eventos",
"Expand"=>"Expandir",
"Future Task"=>"Tarefa Futura",
"Go"=>"Executar",
"Hide 100% Complete"=>"Ocultar 100% Completa",
"Hide Inactive"=>"Ocultar Inativa",
"Incomplete Tasks Only"=>"Apenas Tarefas Incompletas",
"Internal Company"=>"Empresa Interna",
"Key"=>"Filtro",
"Move to Folder"=>"Mover para a Pasta",
"Move to Project"=>"Mover para o Projeto",
"My projects"=>"Meus Projetos",
"new event"=>"novo evento",
"new file"=>"novo arquivo",
"new forum"=>"novo forum",
"New Log"=>"Novo Log",
"No Project Association"=>"Nenhuma Associacao a Projeto",
"One Level"=>"Um Nivel",
"organize tasks"=>"organizar tarefas",
"Overdue"=>"Atrasada",
"Priority"=>"Prioridade",
"Project Hours"=>"Horas do Projeto",
"Scheduled Hours"=>"Horas Programadas",
"Should have started"=>"Deveria ter iniciado",
"show all"=>"Mostrar Tudo",
"Show Archived"=>"Mostrar Arquivado",
"Show captions"=>"Mostrar legendas",
"Show Tasks"=>"Mostrar Tarefas",
"Show work instead of duration"=>"Mostrar trabalho em vez da duracao",
"Sort by Task Name"=>"Classificar por Nome da Tarefa",
"Sort Tasks By Name"=>"Classificar Tarefas Por Nome",
"Started and on time"=>"Iniciadas e Em Dia",
"Task Logs"=>"Logs de Tarefas",
"Task Owner"=>"Dono da Tarefa",
"Template"=>"Modelo",
"User Filter"=>"Filtro de Usuario",

d) No arquivo locales/pt_br/companies.inc
"Owner filter"=>"Filtro de proprietario",
"Reset search"=>"Redefinir pesquisa",

e) No arquivo locales/pt_br/tasks.inc
"Additional Email Comments"=>"Comentários Adicionais por e-mail",
"Daily Working Hours"=>"Horas Diárias de Trabalho",
"Dates"=>"Datas",
"Dependencies"=>"Dependencias",
"Dependency Tracking"=>"Rastreamento de Dependência",
"Done"=>"Completa",
"Do not track this task"=>"Não rastreie esta tarefa",
"Human Resources"=>"Recursos Humanos",
"my pinned tasks"=>"minhas tarefas fixadas",
"Set task start date based on dependency"=>"Defina a data de início da tarefa com base na dependência",
"Should have started"=>"Deveriam ter iniciadas",
"Task Owner"=>"Dono da Tarefa",
"Tasks depending on this Task"=>"Tarefas que depende desta Tarefa",
"tasks per user"=>"tarefas por usuario",
"Task Type"=>"Tipo da Tarefa",
"Working Days"=>"Dias Úteis",

f) No arquivo locales/pt_br/calendar.inc
"Event Filter"=>"Filtro de Evento",
"All Events"=>"Todos Eventos",
"Dynamic Tasks"=>"Tarefas Dinamicas",
"Empty Dates"=>"Datas Em Aberto",
"Events I Created"=>"Eventos Eu Criei",
"My Tasks"=>"Minhas Tarefas",
"Pinned Only"=>"Fixado Apenas",
"Projects on Hold"=>"Projetos em Espera",
"Selection"=>"Selecionar",
"Show Events for"=>"Mostrar Eventos para",
"Show Todo for:"=>"Mostrar Tarefas para: ",
"Sun"=>"Dom",
"Mon"=>"Seg",
"Tue"=>"Ter",
"Wed"=>"Qua",
"Thu"=>"Qui",
"Fri"=>"Sex",
"Sat"=>"Sab",
"Sunday"=>"Domingo",
"Monday"=>"Segunda-feira",
"Tuesday"=>"Terça-feira",
"Wednesday"=>"Quarta-feira",
"Thursday"=>"Quinta-feira",
"Friday"=>"Sexta-feira",
"Saturday"=>"Sábado",
"March"=>"Março",
"April"=>"Abril",
"May"=>"Maio",
"June"=>"Junho",
"July"=>"Julho",
"August"=>"Agosto",

g) No arquivo locales/pt_br/files.inc
"All Files"=>"Todos Arquivos",
"Application"=>"Aplicação",
"Category"=>"Categoria",
"Document"=>"Documento",
"Folder"=>"Pasta",
"Folder Explorer"=>"Explorar Pastas",
"Move to Folder"=>"Mover para a Pasta",
"Move to Project"=>"Mover para o Projeto",
"new folder"=>"Nova Pasta",
"No Project Association"=>"Nenhuma Associacao a Projeto",
"No Result(s)"=>"Sem Resultado(s)",
"Task Name"=>"Nome da Tarefa",
"Unknown"=>"Desconhecido",
"Versions"=>"Versoes",

h) No arquivo locales/pt_br/admin.inc
"back"=>"Voltar",
"Confirm Password"=>"Confirme a Senha",
"Company"=>"Empresa",
"Inform new user of their account details?"=>"Informar o novo usuário sobre os detalhes da conta?",
"User Role"=>"Papel do Usuário",
"Password"=>"Senha",
"Required Fields"=>"Campos Obrigatórios",
"select dept"=>"Selecione Dept.",
"show all"=>"Mostrar todos",
"show this month"=>"Mostrar este mês",
"sort by"=>"ordenar por",
"submit"=>"Enviar",

i) No arquivo locales/pt_br/ticketsmith.inc
"Open Ticket Report"=>"Relatorio de Chamado Aberto",
"Open Tickets"=>"Chamados Abertos",
"Report as PDF"=>"Relatório em PDF",

Referências:
1- Correções no locales pt_br

Dicas Mysql

Publicado: 16/04/2023 em Linux, Programação
Tags:

1- Guia prático de MySQL — Do Manual de referência do MySQL.
2- MySQL at Wikibooks

3- Manuais de referência de MySQL. — Disponível em muitas línguas diferentes.
4- MariaDB Base de Conhecimento (Knowledge Base).
5- Convenções para código de base de dados na comunidade MediaWiki.
6- Acessando o Banco de Dados

7- Como se tornar um hacker do MediaWiki

1. Criar tabela

USUARIO="nome_usuario"
SENHA="senha"
NOMEBASE="nome_base_dados"

sql="CREATE TABLE tabela1 (id_usuario int not null auto_increment, username varchar(10) NOT NULL, senha varchar(42) NOT NULL, nome_usuario varchar(40) NOT NULL, primary key (id_usuario));"

mysql -u $USUARIO -p$SENHA -b $NOMEBASE -e " $sql"
if [ $? -ne 0 ]; then
echo "erro no acesso a base de dados"
exit
fi

sql="ALTER TABLE tabela1 comment='Contém a identificação dos usuários';"
mysql -u $USUARIO -p$SENHA -b $NOMEBASE -e " $sql"
if [ $? -ne 0 ]; then
echo "erro no acesso a base de dados"
exit
fi

2. Executar comandos SQL, os quais estão em um outro arquivo

USUARIO="nome_usuario"
SENHA="senha"
NOMEBASE="nome_base_dados"
ARQUIVO_COMANDOSSQL="meu_arquivo.sql"

mysql -u $CPBASEUSER -p$CPBASEPASSW -b $CPBASE < "$ARQUIVO_COMANDOSSQL"
if [ $? -ne 0 ]; then
echo "erro no acesso a base de dados"
exit
fi

3. Loop entre arquivos de planilhas CSV e inserir seus conteúdos na base de dados
Explicando a situação: na pasta atual do script existem alguns arquivos CSV, em que cada coluna das planilhas são separadas por vírgula, e cada conteúdo está entre aspas. Na primeira linha de cada planilha contém um cabeçalho, em que cada coluna tem nesta linha exatamente o nome do campo da base de dados onde estes conteúdos deverão ser inseridos.

USUARIO="nome_usuario"
SENHA="senha"
NOMEBASE="nome_base_dados"
arquivo="NOME_ARQUIVO"
tabela="NOME_TABELA"
nomes_col=$(head -1 $arquivo)

oldIFS=$IFS
IFS=',' # altera para vírgula a variável (de sistema IFS) separadora de campo de entrada
jj=0
sql="LOAD DATA LOCAL INFILE '$arquivo' INTO TABLE $tabela FIELDS TERMINATED by ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES ("
for i in $nomes_col

do
campos[jj]=$(echo "$i" | sed 's/\"//g') # retira as aspas que rodeia os conteúdos de cada célula do arquivo csv
if [ $jj -ne 0 ]; then
sql=$sql, # insere uma vírgula entre os campos
fi
sql=$sql${campos[jj]} # insere o nome do campo na montagem do comando sql
((++jj))
done

IFS=$oldIFS
sql="$sql"")"

mysql -u $USUARIO -p$SENHA -b $NOMEBASE -e "$sql"
if [ $? -ne 0 ]; then
echo "Erro no acesso a base de dados"
exit
fi

A instalação do phpMyadmin descrita neste post foi testada numa máquina com Debian 10 (buster).

1. Instalar pacotes recomendados
# apt update
# apt-get install php7.3-cgi php7.3-gd php7.3-zip php7.3-mbstring libapache2-mod-php7.3 php7.3-common php-pear mariadb-server php7.3-mysql

2. Baixar o phpMyadmin
Os releases do phpMyAdmin estão disponíveis para download em sua página oficial. Baixar a versão mais recente, que no momento deste post foi realizado através da seguinte maneira:
$ wget https://files.phpmyadmin.net/phpMyAdmin/5.1.3/phpMyAdmin-5.1.3-all-languages.tar.gz

3. Extrair o arquivo baixado
$ tar xvf phpMyAdmin-5.1.3-all-languages.tar.gz

4. Mover o resultado para a pasta /usr/share/phpmyadmin
O camando abaixo moverá todos os arquivos e subdiretórios para o destino:
# mv phpMyAdmin-*/ /usr/share/phpmyadmin

5. Criar a pasta para arquivos temporários do phpMyAdmin
# mkdir -p /var/lib/phpmyadmin/tmp
# chown -R www-data:www-data /var/lib/phpmyadmin

6. Criar a pasta os arquivos de configuração do phpMyAdmin
# mkdir /etc/phpmyadmin/

7. Criar o arquivo de configuração phpMyAdmin
# cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

8. Editar o arquivo de configuração /usr/share/phpmyadmin/config.inc.php

$cfg['blowfish_secret'] = 'H2OxcGXxflSd8JwrwVlh6KW6s2rER63i';
$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
$cfg['Servers'][$i]['pmadb'] = 'bdmyadmin';

observações:

  • o valor para pmadb a ser escolhido deve corresponder ao nome da base de dados que vamos criar mais adiante neste script.
  • a sequência de 32 caracteres não é uma senha que precise ser lembrada, a qual será apenas utilizada internamente pelo algoritmo AES.
  • caso a sequência inserida contiver menos de 32 caracteres, ocasionará cookies criptografados menos seguros. Mais de 32 caracteres não causará nenhum dano.

9. Configurar Apache web Server
Criar o seguinte arquivo em /etc/apache2/conf-available/phpmyadmin.conf


Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
   Options SymLinksIfOwnerMatch
   DirectoryIndex index.php

   <IfModule mod_php5.c>
      <IfModule mod_mime.c>
         AddType application/x-httpd-php .php
      </IfModule>
      <FilesMatch ".+\.php$">
         SetHandler application/x-httpd-php
      </FilesMatch>

      php_value include_path .
      php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
      php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
      php_admin_value mbstring.func_overload 0
   </IfModule>
   <IfModule mod_php.c>
      <IfModule mod_mime.c>
         AddType application/x-httpd-php .php
      </IfModule>
      <FilesMatch ".+\.php$">
         SetHandler application/x-httpd-php
      </FilesMatch>

      php_value include_path .
      php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
      php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
      php_admin_value mbstring.func_overload 0
   </IfModule>
</Directory>

# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
   <IfModule mod_authz_core.c>
      <IfModule mod_authn_file.c>
         AuthType Basic
         AuthName "phpMyAdmin Setup"
         AuthUserFile /etc/phpmyadmin/htpasswd.setup
      </IfModule>
      Require valid-user
   </IfModule>
</Directory>

# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/templates>
   Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
   Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
   Require all denied
</Directory>

 

Deve ter sido criado o seguinte link simbólico em /etc/apache2/conf-enabled:
phpmyadmin.conf -> ../conf-available/phpmyadmin.conf

Em seguida, usar os seguintes comandos:
# a2enconf phpmyadmin.conf
# systemctl reload apache2

10. Visitar a interface web phpMyAdmin
Com o navegador, acessar a interface web do phpMyAdmin em http://localhost/phpmyadmin
A seguinte página deve ser obtida:

Página inicial do phpmyadmin

11. Criar usuário no banco de dados MySQL

# mysql -u root
MariaDB [(none)]> SELECT user,password FROM mysql.user;
MariaDB [(none)]> CREATE USER usuario_myadmin@localhost IDENTIFIED BY 'senha_usuario';
MariaDB [(none)]> CREATE DATABASE bdmyadmin CHARACTER SET utf8mb4 COLLATE utf8mb4_swedish_ci;
MariaDB [(none)]> GRANT ALL PRIVILEGES on bdmyadmin.* to 'usuario_myadmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> quit;

Observações:

  • o nome da base (aqui escolhido como bdmyadmin) e o nome do usuário (aqui escolhido como usuario_myadmin) são meros exemplos. Mas deve corresponder ao que fora definido antes na configuração do arquivo /usr/share/phpmyadmin/config.inc.php.
  • Ao fazer a autenticação no aplicativo, o acesso a base de dados bdmyadmin já estará disponível. Se o usuário tiver acesso a outras bases de dados, estas também estarão disponíveis simultaneamente.
  • Para fazer a autenticação no aplicativo, utilize as credenciais escolhidas:
    • usuario: usuario_myadmin
    • senha: senha_usuario

Neste caso, a página inicial após fazer autenticação estará da seguinte forma (cujas bases de dados de trabalho estarão sendo mostradas à esquerda):
Página do phpMyadmin após login

Referências:
1- How To Install phpMyAdmin on Debian 11/Debian 10
2- Como instalar o phpMyAdmin no Debian 10

Etherpad é um editor colaborativo em tempo real baseado em Node.js. No momento deste post, a configuração que tinha era a seguinte:
Debian 10 (buster)
PHP 7.4.27 (cli)
Apache/2.4.38 (Debian)
10.3.31-MariaDB-0+deb10u1 Debian 10
Nodejs v16.14.0

Seguiremos os seguintes passos:
1) Criar um banco de dados para a aplicação
2) Criar um usuário no sistema
3) Instalar algumas dependências
4) Instalar o node.js
5) Instalar o código etherpad
6) Fazer um primeiro teste de funcionalidade
7) Configurar o etherpad
8) Configurar Etherpad como um serviço
9) Segurança
10) Links administrativos
11) Um pouco de explicação sobre deamons

1. Criar o banco de dados para a aplicação etherpad
Consideraremos que o SGBD mariadb já esteja instalado:
MariaDB [(none)]> CREATE USER nome_usuario@localhost IDENTIFIED BY 'senha_escolhida';
MariaDB [(none)]> CREATE DATABASE nome_base;
MariaDB [(none)]> GRANT ALL PRIVILEGES on nome_base.* to 'nome_usuario'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;

2. Criar um usuário no sistema
# adduser --home /var/www/html/etherpad etherpad
No caso, nossa aplicação irá funcionar na pasta /var/www/html/etherpad

3. Instalar dependências
# apt-get install gzip git curl python libssl-dev pkg-config gcc g++ make build-essential

4. Instalar Node.js
Node.js é um ambiente de execução Javascript server-side. Devido a existência de muitos tutoriais na internet sobre o assunto, não vamos detalhar aqui esse processo.
No entanto, deve-se verificar se a instalação recebeu o nome ‘node.js’ ou simplesmente ‘node’. Isso será importante para mais adiante. A pasta padrão de instalação do código do node.js é /usr/bin

Para evitar qualquer problema, caso a instalação deu o nome curto ‘node’, crie um link simbólio de node.js para node:
/user/bin# ln -s /usr/bin/node /usr/bin/nodejs

Para verficicar a versão do node.js instalado, fazer:
$ nodejs --version

5. Instalar o código etherpad
Para isto basta clonar o repositório etherpad do girhub:


eterpad@:/var/www/html/etherpad$ git config --global url."https://".insteadOf git://
eterpad@:/var/www/html/etherpad$ git clone git://github.com/ether/etherpad-lite.git

Será criada a pasta /var/www/html/etherpad/etherpad-lite com todo o código da aplicação etherpad.

6. Fazer um primeiro teste de funcionalidade
Ir para a pasta ‘etherpad-lite /’ e executar o script bash para iniciar o etherpad:

$ cd etherpad-lite/
etherpad@:/var/www/html/etherpad/etherpad-lite$ bin/run.sh

O resultado deverá ser algo parecido conforme abaixo:

Starting Etherpad…
[2022-02-15 16:14:09.859] [INFO] settings – All relative paths will be interpreted relative to the identified Etherpad base dir: /var/www/html/etherpad/etherpad-lite
[2022-02-15 16:14:09.915] [INFO] settings – settings loaded from: /var/www/html/etherpad/etherpad-lite/settings.json
[2022-02-15 16:14:09.916] [INFO] settings – No credentials file found in /var/www/html/etherpad/etherpad-lite/credentials.json. Ignoring.
[2022-02-15 16:14:09.917] [INFO] settings – Using skin “colibris” in dir: /var/www/html/etherpad/etherpad-lite/src/static/skins/colibris
[2022-02-15 16:14:09.917] [INFO] settings – Session key file “/var/www/html/etherpad/etherpad-lite/SESSIONKEY.txt” not found. Creating with random contents.
[2022-02-15 16:14:09.918] [WARN] settings – DirtyDB is used. This is not recommended for production. File location: /var/www/html/etherpad/etherpad-lite/var/dirty.db
[2022-02-15 16:14:09.918] [INFO] settings – Random string used for versioning assets: 91f7d9a3
[2022-02-15 16:14:10.618] [INFO] server – Starting Etherpad…
[2022-02-15 16:14:10.626] [INFO] plugins – Running npm to get a list of installed plugins…
[2022-02-15 16:14:10.829] [INFO] plugins – npm –version: 6.14.15
[2022-02-15 16:14:13.437] [INFO] plugins – Loading plugin ep_etherpad-lite…
[2022-02-15 16:14:13.439] [INFO] plugins – Loaded 1 plugins
[2022-02-15 16:14:14.351] [INFO] APIHandler – Api key file “/var/www/html/etherpad/etherpad-lite/APIKEY.txt” not found. Creating with random contents.
[2022-02-15 16:14:14.520] [INFO] server – Installed plugins:
[2022-02-15 16:14:14.533] [INFO] console – Report bugs at https://github.com/ether/etherpad-lite/issues
[2022-02-15 16:14:14.560] [INFO] console – Your Etherpad version is 1.9.0 (a27b400)
[2022-02-15 16:14:16.725] [INFO] http – HTTP server listening for connections
[2022-02-15 16:14:16.726] [INFO] console – You can access your Etherpad instance at http://0.0.0.0:9001/
[2022-02-15 16:14:16.726] [WARN] console – Admin username and password not set in settings.json. To access admin please uncomment and edit “users” in settings.json
[2022-02-15 16:14:16.726] [WARN] console – Etherpad is running in Development mode. This mode is slower for users and less secure than production mode. You should set the NODE_ENV environment variable to production by using: export NODE_ENV=production
[2022-02-15 16:14:16.726] [INFO] server – Etherpad is running

Deve ser possivel já visualizar a página inicial da instância do etherpad através do navegador em http://ip-servidor:9001

7. Configurar o etherpad
O arquivo padrão de configuração do etherpad é ‘etherpad-lite/settings.json’. Fazendo as duas tarefas a seguir teremos a realizado a configuração básica necessária para este momento:

a) Desabilitar o banco de dados ‘sujo’ padrão
Para isso, adicionar o comentário ‘/ *…. * /’ para a configuração do banco ‘sujo’, e fazer a configuração do banco de dados MySQL que criamos anteriormente:

/*
"dbType" : "dirty",
"dbSettings" : {
"filename" : "var/dirty.db"
},
*/

Configuração do banco de dados MySQL anteriormente criado:

"dbType" : "mysql",
"dbSettings" : {
"user" : "nome_usuario",
"host" : "localhost",
"port" : 3306,
"password": "senha_escolhida",
"database": "nome_base",
"charset" : "utf8mb4"
},

b) Ativar os usuários
Para isso, remover o comentário dessas linhas e alterar seus valores:

"users": {
"admin": {
"password": "escolha uma senha",
"is_admin": true
},
"user": {
"password": "faça a escolha da senha",
"is_admin": false
}
},

c) Outras configurações
"lang": "pt-br"
"defaultPadText" : "Bem-vindo ao Etherpad!\n\nQue seja uma atividade divertida http:\/\/meudominio.org.br\n",
"title": "Etherpad-Minha Organização",
"skinVariants": "light-toolbar super-dark-background super-light-editor",
"showSettingsInAdminPage": false,
"loglevel": "WARN",

8. Configurar Etherpad como um serviço
Agora vamos configurar o etherpad como um serviço. Na pasta /lib/systemd/system/ criar um novo arquivo de serviço, que chamaremos ‘etherpad.service’, com o seguinte conteúdo:

[Unit]
Description=Etherpad-lite, the collaborative editor.
After=syslog.target network.target
[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/var/www/html/etherpad/etherpad-lite
Environment=NODE_ENV=production
ExecStart=/usr/bin/node /var/www/html/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
Restart=always
[Install]
WantedBy=multi-user.target

Agora, colocar um link simbólico da pasta /etc/systemd/system para o correspondente arquivo de serviço, e em seguida recarregar as listas de serviços do systemd:
/etc/systemd/system# ln -s /lib/systemd/system/etherpad.service etherpad.service

Ative o novo serviço e verifique se o mesmo está ativado:

# systemctl daemon-reload
$ systemctl list-unit-files | grep etherpad
  etherpad.service                       enabled

Fazer verificações adicionais confirmando que o etherpad está rodando como serviço:

$ systemctl | grep etherpad
  etherpad.service           loaded active   running     Etherpad-lite, the collaborative editor.

$ systemctl status etherpad
● etherpad.service - Etherpad-lite, the collaborative editor.
   Loaded: loaded (/lib/systemd/system/etherpad.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2022-02-16 18:55:15 -03; 20h ago
 Main PID: 422 (node)
    Tasks: 13 (limit: 4915)
   Memory: 151.6M
   CGroup: /system.slice/etherpad.service
           └─422 /usr/bin/node /var/www/html/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js

$ pgrep -a -u etherpad
422 /usr/bin/node /var/www/html/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js

$ ps axl | grep etherpad
  F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
  4  1011   422     1  20   0 1449800 141036 -    Ssl  ?          2:14 /usr/bin/node /var/www/html/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
   onde o código de status significa:
   S -> "Sleeping". Esperando um evento ocorrer, tal como um sinal ou uma entrada para se tornar "available".
   s -> "process in a session leader".
   l -> processo é "multithreaded".

Comandos adicionais úteis nesta fase:

# systemctl stop etherpad         # parar o serviço etherpad
# systemctl start etherpad        # (re)iniciar o serviço etherpad
# systemctl restart etherpad      # reiniciar o serviço etherpad
# systemctl status etherpad       # status do serviço etherpad
# pgrep -a -u etherpad            # listar processos com base no nome
/var/log# tail -f syslog          # acompanhar o log relativo ao etherpad

9. Segurança
eterpad@:/var/www/html/etherpad/etherpad-lite$ chmod 640 settings.json

Se desejar autenticação de todos usuários, fazer (em etherpad-lite/settings.json):
"requireAuthentication": true,
E claro, crie os usuários e suas senhas na seção “users” de settings.json.

10. Links administrativos

http://meu-site:9001/stats
http://meu-site:9001/admin

11. Um pouco de explicação sobre daemons

Serviços de sistema, ou processos servidores, ou daemons, veja algumas definições e características:

  • Daemons são programas que ficam residentes respondendo a requisições. São vários destes serviços (deamons), como o postfix, samba, cron, init e apache.
  • Daemons são processos servidores executados quando o linux é inicializado ou iniciados quando preciso, permanecendo em execução enquanto forem úteis. Podem ficar esperando em background (segundo plano) que algum outro processo solicite o seu serviço.
  • Um daemon é um processo em segundo plano que realiza uma função específica ou tarefa relacionada ao sistema. Os daemons são programas em vez de partes do kernel.
  • Existem diversos daemons pois o número de serviços no Linux pode ser muito grande, porém muitos destes serviços são solicitados de forma esporádica. Para controlá-los existe um superdaemon chamado inetd (e sua versão mais recente xinetd – extended internet daemon. O padrão Debian e Suse é o inetd – internet daemon). O inetd tem a responsabilidade de iniciar outros daemons à medida que forem necessários.
  • O inetd é o daemon que controla outros daemons. Ele inicia os seus daemons-cliente quando houver trabalho para eles e permite que se extinguam graciosamente assim que suas tarefas tiverem sido completadas.
  • Inetd (também chamado de “Internet super-server”) é um servidor de servidores. Ele executa servidores sob demanda, para que eles não tenham que rodar continuamente.

Para tarefa de iniciar, parar e reiniciar estes serviços, alguns daemons são automatizados através de um conjunto de scripts localizados na pasta /etc/init.d. Por exemplo:
# /etc/init.d/apache2 start | stop | reload | restart | status

Os processos possuem atributos: PID, PPID, UID, GID e outros. Veja o exemplo relativo a esta instalação do etherpad:

$ ps aux | grep node
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
etherpad   422  0.2  2.3 1449800 140472 ?      Ssl  Feb16   1:48 /usr/bin/node /var/www/html/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js

Referências:
1- Etherpad Manual & Documentation
2- Manual install
3- Como instalar o Etherpad Editor em tempo real colaborativo no Ubuntu 18.04
4- Install Etherpad on debian
5- O super servidor inetd
6- Debian systemd
7- How To Use Systemctl to Manage Systemd Services and Units

1) Introdução
Testamos este post na versão 7 do Debian (“wheezy”), e Mediawiki versão 1.19.20.

2)Instalar o MediaWiki (parte-1)

#apt-get install mediawiki

Esse comando instalará:
– apache2;
– mysql;
– php5;
– mediawiki,

e seus conjuntos de arquivos associados. Quando da instalação, será formulada a pergunta de qual a senha desejada para ser definida para o administrador do banco de dados MySQL (atenção: não tem nada haver com usuário root do S.O.; este usuário administrador do banco de dados será criado automaticamente na tabela mysql.user.). Veja abaixo:

Pedido de senha para usuario root MySQL

Após a execução do comando acima, o mediawiki estará disponível nas seguintes pastas (e subpastas):

  • /etc/mediawiki
  • /var/lib/mediawiki/ : contém, basicamente, links simbólicos para /usr/share/mediawiki
  • /usr/share/mediawiki/ : principal pasta. Onde estão os arquivos com o código do mediawiki

3) Uma primeira mensagem de alerta do Apache
Logo após a instalação do Apache, quando da execução do comando de recarregar a configuração do Apache (# /etc/init.d/apache2 reload) ou comando de reiniciar (# /etc/init.d/apache2 restart), uma primeira mensagem de alerta aparece:

Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

Isso normalmente pode ser ignorado, pois não impede o bom funcionamento do Apache. Mas aquela mensagem significa que o daemon do Apache (httpd) não conseguiu obter um nome de host totalmente qualificado, fazendo uma pesquisa inversa no seu servidor de endereço IP. Uma alternativa simples para evitar estas mensagens é especificar “ServerName 127.0.0.1” no contexto do servidor global da configuração. Por exemplo, criando o arquivo /etc/apache2/conf.d/servername.local , tendo como conteúdo:

ServerName 127.0.0.1

4) Verificações básicas
a) verificar se o Apache está funcionando
Verificar se o servidor de páginas Apache está ativo, na forma exemplificada abaixo:
# ps -A | grep apache2
7561 ? 00:00:00 apache2
7706 ? 00:00:00 apache2
7707 ? 00:00:00 apache2
7708 ? 00:00:00 apache2
7709 ? 00:00:00 apache2
7710 ? 00:00:00 apache2

Acessar também a url http://localhost/ , onde uma página muito simples deverá ser mostrada no navegador, como esta abaixo (referente ao código em /var/www/index.html):
Tela inicial do Apache quando instalado

Dicas:
– para acompanhar as mensagens de erro do Apache, normalmente estas se encontram no arquivo /var/log/apache2/erro.log (quem define qual arquivo de erro é a variável ErrorLog, definida em /etc/apache2/apache2.conf).

– se desejar uma cópia local do manual da versão em uso do servidor de páginas Apache, fazer:
#apt-get install apache2-doc
Com isso, ao acessar a url http://localhost/manual/ teremos a documentação do Apache mostrada, como abaixo ilustrado:
Tela inicial do Manual do Apache

b) verificar se o PHP está funcionando
Criar o arquivo /var/www/index.php com o seguinte conteúdo:

<?php
phpinfo();
?>

Reiniciar o Apache:
# /etc/init.d/apache2 restart

Agora, acessar o endereço http://localhost/index.php . Se as informações de configuração do PHP aparecerem, isto significará que o Apache e o interpretador PHP foram instalados corretamente e estão funcionando. Veja um exemplo de um pedacinho da página que deverá ser mostrada:

Tela de teste do funcionamento do interpretador PHP

c) verificar se o MySQL está funcionando.
Verificar se o processo MySQL server foi iniciado e está “ativo”:

$ ps -A | grep mysql
7391 ?        00:00:00 mysqld_safe
7720 ?        00:00:13 mysqld

Para ter acesso ao banco do MySQL, utilizar o seguinte comando:
$ mysql -u root -p
Este comando é destinado a fazer a autenticação no banco de dados MySQL. Será solicitado a senha do usuário “root” (que neste momento é o usuário administrador do MySQL) de acesso ao banco que fora definida anteriormente na instalação. Forneça a senha, conforme definida naquele momento da instalação.

Dicas:
– verificar se o servidor MySQL está instalado e qual a sua versão: $ apt-cache policy mysql-server
– verificar se o client MySQL está instalado e qual a sua versão: $ apt-cache policy mysql-client
– estando autenticando do servidor MySQL, são úteis os seguintes comandos básicos:
* status do banco: mysql> status;
* base de dados existentes: mysql> show databases;
* selecionar uma base de dados (exemplo: a BD mysql): mysql> use mysql;
* listar as tabelas de uma BD (que fora anteriormente selecionada): mysql> show tables;
* verificar os usuários existentes:


mysql> SELECT User, Host, Password FROM mysql.user;
+------------------+-----------+-------------------------------------------+
| User             | Host      | Password                                  |
+------------------+-----------+-------------------------------------------+
| root             | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root             | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root             | ::1       | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| debian-sys-maint | localhost | *BEB671E4F154411B71BEEDA86385600449ED3346 |
+------------------+-----------+-------------------------------------------+

Neste caso, fora o próprio sistema operacional, apenas usuário do BD chamado “root” pode ter acesso, fornecendo senha, e partindo do própria máquina.
* para outros comandos do BD MySQL veja o post Tutorial MySQL.

5) Instalar o MediaWiki (parte-2)
5.1 Liberar acesso inicial para parametrizar o mediawiki
Editar o arquivo da configuração do Apache em /etc/mediawiki/apache.conf e remover o sinal de comentário ‘#’ presente na sua terceira linha, ficando desta forma:
Alias /mediawiki /var/lib/mediawiki
Reiniciar o Apache:
# /etc/init.d/apache2 restart

Obs: observar que existe o arquivo /etc/apache2/conf-available/mediawiki.conf com as diretivas de configuração para o Apache achar o mediawiki.

Nesse momento, já é possível acessar a página inicial do Mediawiki para iniciar seu processo de configuração. Ao acessar a url http://localhost/mediawiki/ a seguinte página deverá ser mostrada:
Tela inicial do Midiawiki, para iniciar sua configuração

5.2 Iniciar a parametrização do mediawiki
Clicar no link mostrado na figura anterior e iniciar a parametrização do Mediawiki. Algumas dicas úteis:
– nome do utilizador da base de dados: informar o nome do usuário já criado na BD do MySQL que será usado para ter acesso à BD durante o processo de instalação. Este usuário não é o do MediaWiki, e sim de um usuário da base de dados.
– conta de administrador, seu nome: o seu nome, por exemplo, “Joao Beltrao”. Este é o nome que irá utilizar para entrar na wiki.
– sobre o arquivo LocalSettings.php: automaticamente será gerado um arquivo de configuração que será disponibilizado ao usuário que está instalando o mediawiki. Salve este arquivo e coloque-o na mesma pasta do arquivo index.php do mediawiki (no caso deste post, esta pasta após iniciar os dois links simbólicos é a /etc/mediawiki/ .

Pronto, acesse a url http://localhost/mediawiki/ e observe que o Mediawiki estará funcionando normalmente. Faça o login através do usuário que fora criado (no caso, “Joao Beltrao”). Bom uso.

5.3 Parametrizações do arquivo LocalSettings.php
Este arquivo permite um grande número de parametrizações. Algumas dicas (no caso, acrescentar ao final do arquivo as seguintes linhas:
$wgGroupPermissions['*']['edit'] = false;
$wgLocalTZoffset = -180;
$wgGroupPermissions['*']['createaccount'] = false;

A primeira linha acima serve para evitar que usuários anônimos possam modificar o conteúdo do Wiki; a segunda linha para que o Wiki utilize o mesmo fuso horário do usuário no momento de uma edição (horário brasileiro: -3 horas = -180 minutos); a terceira linha desabilita a criação de novos usuários pelos próprios internautas, tarefa que será feita exclusivamente pelo administrador do wiki.

Se desejar, fazer:
$wgGroupPermissions['*']['read'] = false;
Com isso, só é permitido a leitura do wiki por usuários logados no wiki.

Obs: o logo do wiki é definido pela variável “$wgLogo” que por padrão está apontando para /usr/share/mediawiki/skins/common/images/wiki.png. Recomenda-se que se utilize uma figura com fundo transparente de 135×135 pixels. Uma rápida modificação dessa imagem visualizada nesta instalação, apenas altere o valor da variável “$wglogo” que está apontando para a imagem “wiki.png”, deixando-a apontando para a imagem “mediawiki.png” (que está na mesma pasta).

5.4 Dica de segurança
Caso o mediawiki for instalado em uma área pública, cuidado deve-se ter quanto a proibição do acesso de usuários ao arquivo de configuração. Assim, quando for esse o caso, a alteração da permissão do arquivo /etc/mediawiki/LocalSettings.php seria recomendável:

# chmod 600 LocalSettings.php
# chown www-data:www-data LocalSettings.php

Isto fará com que este arquivo não fique visível a outros usuários. É uma medida de segurança.
Se a configuração de segurança fora feita com sucesso, ao acessar a url http://localhost/mediawiki/LocalSettings.php uma página em branco ou uma página de erro deve ser mostrada.

5.5 Uma verificação da base de dados após mediawiki estar instalado
Para isso, faça a autenticação na base de dados. Assim:
a) verificar as bases de dados
Caso o nome da base de dados escolhida na instalação do wiki tenha sido “my_wiki”, tem-se:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_wiki            |
| mysql              |
| performance_schema |
+--------------------+

b) verificar as tabelas criadas para o wiki
Após chavear para a base de dados “my_wiki”, e durante a instalação do wiki escolheu-se “prefixo” para o nome dos prefixos das tabelas relativas as bases de dados do wiki, tem-se:

mysql> show tables;
+---------------------------+
| Tables_in_my_wiki         |
+---------------------------+
| prefixoarchive            |
| prefixocategory           |
| prefixocategorylinks      |
| prefixochange_tag         |
          .
          .
          .

5.6 Testar o funcionamento do mediawiki como um todo
Agora que o mediawiki está instalado, é hora de testar os passos executados. Pelo menos, teste as seguintes facilidades:

– edição de página;
– criação de página;
– criação de usuário.

5.7 Acessar o Mediawiki de outras máquinas
Para isto, basta alterar o valor da variável wgServer do arquivo LocalSettings.php: em vez de localhost (que é o default), coloque o IP de sua máquina. Exemplo:
$wgServer ="http://192.167.34.25";

6) Dicas adicionais para aqueles que desejam criar um domínio próprio para o wiki
A partir desse ponto, são dicas adicionais e não há obrigatoriedade de seguir para deixar o Mediawiki funcionando.

Copiar os apontadores do Mediawiki (e mais algumas pastas adicionais) para o diretório raiz do Apache

# cp -a /var/lib/mediawiki/ /var/www/wiki

6.1) Preparar o ambiente antes de continuar a instalação do Mediawiki

6.1.1) escolher um nome de domínio para acessar o mediawiki. Por exemplo: http://www.meuwiki.com
6.1.2) criar uma entrada no Apache para o novo domínio meuwiki
a) Criar um arquivo em /etc/apache/sites-available, por exemplo de nome ‘meuwiki’, com o seguinte conteúdo:

<VirtualHost *:80>
ServerName http://www.meuwiki.com
DocumentRoot /var/www/wiki
</VirtualHost>

obs: para facilitar, faça uma cópia do arquivo ‘default’ para o ‘meuwiki’, e edite suas diretivas.

b) Habilitar o dominio virtual

#a2ensite meuwiki

c) caso o novo domínio esteja hospedado na mesma máquina que o usuário esteja usando, crie uma entrada em /etc/hosts:

127.0.0.1 http://www.meuwiki.com

6.2) Recarregar o Apache com as novas configurações

# /etc/init.d/apache2 reload

6.3) Complementar a instalação do Mediawiki pelo navegador
Na caixa de endereços de URL do navegador, digitar o endereço do Mediawiki e complementar sua instalação. O acesso ao Mediawiki deve ser pelo nome do domínio escolhido (isso é MUITO IMPORTANTE!!!, para que a instalação fique correta e o Mediawiki acessível de qualquer máquina da rede):

http://www.meuwiki.com

A tela mostrada é para iniciar a configuração do Mediawiki, pois ainda o arquivo de configuração LocalSettings.php ainda não fora criado na pasta /etc/mediawiki/. Este arquivo será criado quando for terminado o processo de complementação da instalação do mediawiki, realizado pelo usuário com o navegador clicando no hiperlink “Set up the wiki” (conforme figura anterior).

6.4) Setup do Wiki
Um exemplo de setup do wiki:

Wiki name: “Meuwiki”
Admin username: “wikiadmin”
Password: <senha_do_wikiadmin>
Databasehost: “10.200.70.5:3306” ou “localhost” (se base dados em outra máquina ou na mesma em que fora instalado o wiki, respectivamente)
DB name: “db_meuwiki”
DB username: “adm_wiki”
DB password: <senha do DB admin>
Database table prefix: “meuwiki_”
Storage Engine: “InnoDB”
Database character set: “MySQL4.1/5.0 UTF-8”

Após executar este “setup”, será criado o banco de dados “db_meuwiki“, e a tabela “mysql.user” terão os seguintes usuários criados:

User Host Password
adm_wiki % *07C2A823749F8D68A9758F74DDDC945DE57873F6
adm_wiki localhost *07C2A823749F8D68A9758F74DDDC945DE57873F6
adm_wiki localhost.localdomain *07C2A823749F8D68A9758F74DDDC945DE57873F6

 

6.5) Disponibilizar o arquivo LocalSettings.php gerado na sua pasta definitiva
Após ter clicado no link “set up the wiki”, conforme mostrado na figura acima, respondido as questões apresentadas pelo aplicativo e, ao final, ter obtido uma mensagem de sucesso, complemente a instalação do Mediawiki disponibilizando este arquivo na sua pasta definida (a mesma que contém o arquivo com o código inicial do midiawiki – “index.php”). Na instalação exemplificada neste post, a pasta seria /var/lib/mediawiki:

# mv LocalSettings.php /var/lib/LocalSettings.php

Agora, garanta a segurança necessária ao ambiente:
# chmod 600 /var/lib/LocalSettings.php
# chown root:root /var/lib/LocalSettings.php

Links uteis:
1- Instalação do MediaWiki em sites pessoais em WebHostings
2- Instalação do MediaWiki no Debian Etch
3- Instalação do MediaWiki em sites pessoais em WebHostings
4- Instalando Apache+PHP+MySQL no Linux/Debian
5- Tutorial MySQL ( instalar em ambiente Linux – Debian )
6- Configurar domínios virtuais do Apache em máquina Linux/Debian
7- Instalar e configurar Módulos do Apache2 no Debian

1. Instalação
a) Verificar qual a versão do pacote do servidor de Banco de Dados (BD) MySQL disponível no repositório:
$ apt-cache policy mysql-server

mysql-server:
Instalado: (nenhum)
Candidato: 5.5.31+dfsg-0+wheezy1

Pela resposta do sistema vemos que o servidor BD MySQL ainda não está instalado, onde o pacote candidato à instalação é a versão 5.5.31

b) Verificar qual a versão do pacote cliente MySQL (linha de comando) disponível no repositório:
$ apt-cache policy mysql-client

mysql-client:
Instalado: (nenhum)
Candidato: 5.5.31+dfsg-0+wheezy1

Pela resposta do sistema vemos que o cliente MySQL ainda não está instalado, onde o pacote candidato à instalação é a versão 5.5.31

c) Para fazer a instalação do servidor de BD MySQL e de seu pacote client:

# apt-get install mysql-server
Neste procedimento será solicitado a senha para o usuário root do MySQL (atenção: não tem nada haver com usuário root do S.O. !!), usuário este que será criado automaticamente na tabela mysql.user. Ao final da instalação o S.O. tentará iniciar o MySQL server.

Observações:

  • com este comando serão instalados simultaneamente o servidor de Banco de Dados MySQL e seu cliente (que oferece uma interface através de linha de comando para o usuário);
  • o arquivo de configuração do MySQL está em /etc/mysql/my.cnf ;
  • são criadas as bases de dados “information_schema” e “mysql” que armazenam várias informações de controle do funcionamento do servidor MySQL, incluindo informações sobre os usuários e sobre as demais bases de dados;
  • O pacote Debian do MySql-server cria o usuário “debian-sys-maint” que é utilizado nos scripts de start-stop e cron. Este usuário não deve ser deletado!
  • o MySQL tem um usuário padrão “root” que tem acesso a todas as bases de dados e privilégios especiais para tarefas de manutenção;
  • Duas tabelas são especialmente importantes:
    • mysql.user: tabela de concessões (“grant table”) que define os usuários do MySQL e seus privilégios de acessos.
    • mysql.db:
  • é recomendado que seja instalado o phpMyAdmin para facilitar o gerenciamento do banco.

d) Para fazer a instalação apenas do pacote MySQL client:
# apt-get install mysql-client

1.1 Verificação da instalação
a) Verificação 1: verificar se o MySQL está instalado corretamente na máquina
mysql> STATUS;
Se estiver corretamente instalado, uma resposta deve ocorrer semelhante a transcrição abaixo:

mysql Ver 14.14 Distrib 5.1.73, for debian-linux-gnu (x86_64) using readline 6.1

Connection id: 1939
Current database:
Current user: jose@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Server version: 5.5.31-1 (Debian)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 2 days 21 hours 22 min 35 sec

Threads: 1 Questions: 17075 Slow queries: 0 Opens: 639 Flush tables: 2 Open tables: 58 Queries per second avg: 0.68
————–

b) Verificação 2: verificar as variáveis do MySQL
mysql> SHOW VARIABLES;
Para visualizar os nomes das variáveis do sistema e seus valores.

c) Verificação 3: se processo do MySQL server foi iniciado e está “ativo”
$ ps -A
3535 ? 00:00:00 mysqld_safe
3660 ? 00:00:50 mysqld

d) Verificação 4: tentando acesso ao MySQL de forma indevida
Mostramos a seguir duas tentativas de acesso ao MySQL sem senha, cuja resposta (corretamente) foi de negação:
joao$ mysql
ERROR 1045 (28000): Access denied for user 'joao'@'localhost' (using password: NO)

joao$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Caso tenha ocorrido a conexão com sucesso ao servidor de banco de dados sem a solicitação de uma senha, existe fragilidade de segurança que deve ser corrigida. O procedimento correto seria na linha de comando informar que será fornecido um password. Quando informado o password correto, o usuário terá acesso ao prompt do MySQL. Por exemplo, para tentar acessar o MySQL utilizando o usuário root o comando seria:
joao$ mysql -u root -p

e) Verificação 5: olhando diretamente a tabela de usuários do MySQL

mysql> SELECT User, Host, Password FROM mysql.user;
+------------------+-----------------------+--------------------------------------------------------------------+
| User                | Host                       | Password                                                                         |
+------------------+-----------------------+--------------------------------------------------------------------+
| root                  | localhost               |                                                                                           |
| root                  | 127.0.0.1              | *FE23015365952A341A576684A19831B890F9DC45 |
+------------------+-----------------------+--------------------------------------------------------------------+
2 rows in set (0.00 sec)

No caso acima temos uma falha de segurança: qualquer usuário da máquina ou aplicação hospedada nesta poderá ter acesso ao prompt do MySQL utilizando usuário root, sem necessitar informar a senha. Por exemplo, este acesso poderá se dar através do simples comando abaixo:
$ mysql -u root

Algumas verificações quanto a segurança são necessárias de serem feitas logo que se instala o servidor MySQL. Uma boa explanação sobre isto pode ser conseguida no manual do MySQL na sessão Securing the Initial MySQL Accounts. Explicando um pouco mais: a tabela de concessão mysql.user define as contas dos usuários do MySQL e seus privilégios de acesso:

mysql> SELECT User, Host, Password FROM mysql.user;
+------------------+-----------------------+-------------------------------------------+
| User                | Host                       | Password                                       |
+------------------+-----------------------+-------------------------------------------+
| root                  | localhost               | *FE23015365952A341A576684A19831B890F9DC45 |
| root                  | euve34849           | *FE23015365952A341A576684A19831B890F9DC45 |
| root                  | 127.0.0.1              | *FE23015365952A341A576684A19831B890F9DC45 |
| rita                   | %                            | *3459015365952A341A576684A19831B890F97A5E |
+------------------+-----------------------+-------------------------------------------+
3 rows in set (0.00 sec)

No caso acima temos o usuário root com acesso ao BD a partir da própria máquina em que está o MySQL. Seja utilizando o nome do host como localhost, o endereço IP 127.0.0.1 ou ainda utilizando o nome da máquina local. Ainda se tem a usuária rita que tem o caractere curinga ‘%’ para a parte do host, então ela pode se conectar de qualquer host.

f) Verificação 6: teste com telnet
Este teste tem por objetivo verificar se o servidor MySQL está permitindo conexões remotas ou não. A instalação padrão não permite conexões externas, o que é mais seguro. A configuração do MySQL pode ser alterada através do seu arquivo de configuração /etc/mysql/my.cnf como será detalhado mais adiante.

De uma máquina qualquer da rede, tentar acessar a porta padrão utilizada pelo MySQL (porta 3306):
$ telnet endereço_máquina 3306
Deve-se obter uma resposta do tipo:

Trying ip_maquina…
telnet: Unable to connect to remote host: Connection refused

Caso contrário, onde tenha ocorrido uma conexão ao banco de dados ou o envio de um conjunto de caracteres (sem sentido lógico), a porta está aberta e o servidor MySQL aceita conexões remotas. Se o que se deseja é se permitir apenas conexões locais ao servidor MySQL (situação que é mais segura), deve-se fechar esta possibilidade de conexão através do seu arquivo de configuração.

2. Liberar o servidor MySql para aceitar conexões externas
O MySQL por padrão ao ser instalado está configurado para NÃO permitir acesso remoto, somente local (localhost). Se for necessário ter de habilitar conexões remotas ao servidor MySQL (partindo de outros hosts que não seja o localhost), deve-se:


shell# mcedit /etc/mysql/my.cnf

E substituir o valor do parâmetro “bind-address”, que contém 127.0.0.1, pelo IP da máquina em que está instalado o servidor MySQL.
Reiniciar o MySQL:
shell# /etc/init.d/mysql restart

Agora o servidor MySQL permitirá acessos de outras máquinas da rede.

O seguinte comando ilustra como acessar um servidor MySQL remoto:
shell$ mysql -h ip-maquina -u jose -p
Fornecendo a senha correta do usuário jose e se este estiver cadastrado na tabela mysql.user com permissão de conexão remota, o prompt da linha de comando do MySQL-client será fornecido ao usuário.

OBS: ressaltando, o usuário que fará o acesso remoto deve estar cadastrado na tabela de acesso do MySQL (mysql.user) e ter permissão para conexão a partir de um host externo (coluna “Host”=% referente a este usuário nesta tabela).

2.1 Limitando as conexões externas
É possível limitar as conexões externas a apenas alguns endereços IPs. Para isto deve-se lançar mão de políticas restritivas através de firewalls, como iptables. A seguir exemplificamos restrições que podem ser feitas através do iptables:
-A INPUT -i eth0 -s 197.160.2.13 -p tcp --destination-port 3306 -j ACCEPT
-A INPUT -i eth0 -s 197.160.2.0/24 -p tcp --destination-port 3306 -j ACCEPT

3. Alguns comandos bastante utilizados
Vamos listar alguns comandos do MySQL que consideramos bastante utilizados, agrupando-os em grupos lógicos. Esse agrupamento não é oficial, mas me tem sido útil em diversas situações.
OBS: os comandos dados dentro do prompt do client MySQL NÃO são case sensitive.

3.1 Comandos de caráter Geral (em muitas ocasiões, os mais importantes…)

Comando Comentário

  • shell# /etc/init.d/mysql start
  • shell# /etc/init.d/mysql restart
  • shell# /etc/init.d/mysql stop

Comandos para iniciar, reiniciar e parar o MySQL
shell$ mysql -p
shell$ mysql -u jose -p
Login para linha de comando do MySQL, para o usuário corrente.
Login para linha de comando do MySQL, para o usuário jose.
mysql> STATUS; Informações da atual sessão do cliente MySQL, com versão e status do banco de dados.

  • mysql> SHOW databases;
  • mysql> SHOW tables;

Mostra listas de banco de dados e de tabelas disponíveis, respectivamente.
mysql> USE database Usa um banco de dados específico.
mysql> DESCRIBE table Descreve as colunas de uma tabela
mysql> SOURCE filename Executa comandos de um arquivo como script.
mysql> QUIT Sai do cliente MySQL (linha de comando)

3.2 Comandos de administração de Banco de Dados
Para acompanhar a administração de usuários, em especial, visualizar duas tabelas: mysql.user e mysql.db.

Comando Comentário
mysql> SELECT User, Host, Password FROM mysql.user; Visualizar tabela mysql.user, que armazena identificação dos usuários do MySQL e seus privilégios.
shell$ mysqladmin -u root password nova_senha -p Definir nova senha o usuário root do MySQL.
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd') WHERE User = 'root'; Atualiza de uma única vez todas as senhas referente ao usuário root.
mysql> FLUSH PRIVILEGES; Declaração FLUSH causa no servidor a releitura das tabelas de permissões. Sem ele, a alteração da senha permaneceria despercebida pelo servidor até que este fosse reiniciado.
mysql> SET PASSWORD FOR 'jose'@'localhost' = PASSWORD('senha_para_jose'); Altera senha de usuário já existente jose@localhost

  • mysql> CREATE USER maria@localhost IDENTIFIED BY 'minha_senha';
  • mysql> CREATE USER 'luiza'@'localhost' IDENTIFIED BY 'senha_para_luiza';
  • mysql> CREATE USER jose IDENTIFIED BY 'minha_senha'

Comandos de criar usuários com senha criptografada.
Para todos os exemplos NENHUM PRIVILÉGIO é atribuído aos usuários criados. Nem mesmo o de select. Isto pode ser verificado através da tabela mysql.user
mysql> INSERT INTO mysql.user (Host,User,Password,Select_priv) VALUES('localhost','jose', PASSWORD('minha_senha'), 'Y');
mysql> FLUSH PRIVILEGES;
Cria novo usuário jose@localhost, com senha criptografada, sendo atribuído o privilégio do mesmo de fazer SELECT. O comando FLUSH PRIVILEGES faz com que o servidor faça a releitura das tabelas de permissões.
mysql> GRANT ALL ON banco1.* TO 'jose'@'%' identified by 'secret'; Cria usuario jose, para conexão externa ao MySQL, com a senha que será guardada criptografada “secret”. Este usuário terá todos os privilégios limitado ao banco de dados banco1.
Se usuário já existir, apenas atualizará a sua senha e privilégios. Para verificar os privilégios do usuário jose, usar (como administrador do MySQL) os comandos select * from mysql.user where User='jose';, bem como select * from mysql.db where User='jose';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE on banco2.* to marcos@'%' identified by 'secret'; Cria usuário marcos, para conexão externa ao MySQL. Este usuário terá os privilégios de SELECT, INSERT, UPDATE, DELETE sobre o banco de dados “banco2”. Os demais privilégios serão negados.
mysql> REVOKE ALL ON banco1.* FROM 'jose'@'%'; Remover as permissões de acesso remoto do usuario jose a base de dados base1. Este usuario continuará existindo no MySQL e poderá acessar outras bases de dados a que tenha acesso.

mysql> DROP USER maria@localhost;
mysql> DROP USER joana;
mysql> DROP USER 'clara'@'%';
mysql> DROP USER 'patricia'@'201.132.12.13';
Excluir as usuárias: maria (para acesso localhost), joana e clara (para acessos remotos, quaisquer hosts) e usuária patricia (a partir do host 201.132.12.13), respectivamente.
Em todos os casos, as tabelas mysql.user e mysql.db serão afetadas.

OBS:
Ao tentar se conectar ao MySQL e uma das situações ocorrer:
– errar a senha;
– não fornecer a senha;
– usuario inexistente;
– sem permissão de acesso (por exemplo, tentando fazer uma conexão remota sem permissão para isto),

uma mensagem semelhante a abaixo será mostrada:

ERROR 1045: Access denied for user: ‘user@ip-maquina’ (Using password: NO|YES)

4. Criar base de dados
Vamos criar a base de dados ‘test’. Após fazer a conexão com o MySQL (mysqladmin -u root password xxxx), usa-se o comando:

mysql> create database test;

E obtem-se a seguinte resposta:

Query OK, 1 row affected

Verifique agora se realmente a base dados ‘test’ fora criada:

mysql> show databases;

e o MySQL informará as bases de dados existentes.

5. Exemplos de linhas de comandos MySQL diversos

use bd_discoteca;
describe tb_discos;
SELECT * FROM tb_discos;
SELECT * FROM tb_discos where disco_id >= 0 LIMIT $12;
select * FROM tb_discos where titulo = "Vai chover";
SELECT * FROM tb_musicas where titulo like "%lua%";
SELECT tb_discos.titulo FROM discos,musicas WHERE 
	tb_musicas.interprete = 'luiz gonzaga' AND tb_discos.disco_id := tb_musicas.disco_orig;
SELECT * FROM tb_discos where titulo LIKE 'NELSON%';
SELECT * FROM tb_discos where titulo LIKE '$titulo';

INSERT INTO tb_musicas (numero_disco,faixa,titulo,interprete,autor,ritmo) VALUE (1600,10,"AQUELAS MAOS","NELSON GONCALVES","LOURO,A-RODRIGUE",7);
INSERT INTO tb_musicas (numero_disco,faixa,titulo,interprete,autor,ritmo) VALUE (
           '$num_disco','$num_faixanovo','$titulonovo','$interpretenovo','$autornovo','$ritmonovo');
INSERT INTO tb_usuarios (username,senha) VALUE ("maria","secret");

UPDATE tb_discos SET ritmoprincipal = "ciranda" WHERE id_discos = "3";
UPDATE tb_usuarios SET perfil = 2 WHERE id_usuario = 2;
UPDATE tb_musicas SET titulo = '$titulonovo',interprete='$interpretenovo',
    faixa='$num_faixanovo', autor='$autornovo',ritmo='$ritmonovo'  where
    numero_disco='$num_disco' AND  faixa='$num_faixa';

CREATE INDEX xmusica ON tb_musicas (numero_disco,faixa);
ALTER TABLE tb_musica_temp RENAME musicas;  // renomeando uma tabela.
ALTER TABLE tb_discos drop disco_id;
ALTER TABLE tb_discos CHANGE gravadora gravadora_velha varchar(30); // alterando nome da linha
ALTER TABLE tb_gravadoras ADD (PRIMARY KEY (codigo_gravadora));
ALTER TABLE tb_musicas ADD (PRIMARY KEY (numero_disco,faixa));
ALTER TABLE tb_discos ADD COLUMN disco_id int auto_increment PRIMARY KEY FIRST;
ALTER TABLE tb_discos ADD COLUMN anoproducao smallint AFTER ritmoprincipal;
ALTER TABLE tb_discos ADD COLUMN anoproducao year AFTER ritmoprincipal;
ALTER TABLE tb_discos ADD COLUMN id_discos SMALLINT auto_increment PRIMARY KEY FIRST;
ALTER TABLE tb_discos MODIFY titulo  char (40) NOT NULL;
ALTER TABLE tb_ritmos MODIFY codigo_ritmo smallint unsigned not null PRIMARY KEY;
ALTER TABLE tb_discos ADD index (titulo(10));

DELETE FROM tb_discos where disco_id=0;
DELETE FROM tb_discos;

LOAD DATA INFILE '/home/programando/discoteca/nome_disco.txt' INTO TABLE tb_discos (titulo);
LOAD DATA INFILE '/home/programando/discoteca/nome_discwq.txt' INTO TABLE tb_discos FIELDS TERMINATED BY '\t' (disco_id,titulo, ritmoprincipal, gravadora);

$mysqldump -u root -p --no-data bd_discoteca tb_usuarios > estrutura_usuarios.sql // cópia vazia da estrutura da tabela usuarios do BD discoteca.
$mysqldump -u root -p --no-data bd_discoteca > estrutura_usuarios.sql // cópia vazia da estrutura do BD discoteca.

6. Recuperar senha do administrador do MySQL
Pode acontecer do usuário root perder a senha de administração do MySQL. Esta não pode ser recuperada, mas é possível criar uma nova senha para este usuário.
Vejamos o procedimento.

6.1 Matar os processos mysqld e reiniciar o MySQL em modo seguro (safe mode)
shell# killall mysqld
shell# mysqld_safe --skip-grant-tables &

6.2 Definir a nova senha para o usuário root do MySQL

shell# mysql
mysql> update mysql.user set password = password('nova_senha') where user='root' and host='localhost';
mysql> flush privileges;
mysql> quit;

6.3 Desligar o modo de segurança do MySQL e iniciar o MySQL com a nova senha de root

shell# /etc/init.d/mysql stop
shell# /etc/init.d/mysql start

Conectar-se normalmente ao mysql utilizando a nova senha:
shell$ mysql -u root -p

7. Desinstalar o MySQL
Pode haver necessidade de desinstalar o MySQL (e até mesmo, após isso, fazer sua reinstalação). Seguir os passos abaixo:
a) Parar o MySQL
# killall -9 mysql
# killall -9 mysqld

b) Remover o MySQL
# apt-get remove --purge mysql\*
# apt-get clean /* limpar o cache de pacotes*/

c) Listar todos os pacotes mysql instalados
# dpkg -l | grep -i mysql

ou ainda….
# updatedb
# locate mysql

Veja também:
1- Tutorial MySQL Tizag
2- MySQL on Linux Tutorial
3- Securing the Initial MySQL Accounts
4- Assigning Account Passwords
5- MySQL 5.1 Reference Manual
6- Manual MySQL em português
7- mysqld_safe — MySQL Server Startup Script
8- Instalar servidor LAMP (Linux + Apache + PHP + MySQL) no Debian

1- Camada de Abstração
A abstração de banco de dados é um recurso que permite que a aplicação seja portável entre diferenres SGBDs (Sistema de Gerência de Banco de Dados). É uma camada intermediária entre a aplicação e o banco de dados. As bibliotecas de abstração de banco de dados traduzem os comandos fornecidos para os comandos nativos dos SGBDs.

Abstração de banco de dados

Existem muitas bibliotecas de abstração de banco de dados disponíveis para o PHP. Estas bibliotecas (classes) representam uma conecção entre o PHP e um servidor de base de dados. Podemos citar algumas destas bibliotecas:

  • dbx
  • DBA
  • ODBC
  • PEAR::MDB2
  • PDO

1.1- Extensão dbx:
– disponível na biblioteca de extensões PECL (ver adiante) e precisa ser instalada separadamente. Suporta diversos bancos de dados como o MySQL, PostgreSQL, SQL Server, ODBC, Sybase, Oracle e SQLite. Em ambiente com servidores Linux, a dbx necessita ser instalada separadamente fazendo seu download dos arquivos fonte da biblioteca em http://pecl.php.net/package/dbx

1.2- Classe PEAR::MDB2
– trata-se de uma classe externa disponível para download no PEAR (repositório de extensões e aplicações do PHP, ver adiante). Suporta grande variedade de SGBDs, tais como dBase, Interbase, Informix, mSQL, MySQL, ODBC, PostgreSQL, Sybase, Oracle e outros.

1.3- PDO
A extensão “PHP Data Objects” (PDO) define uma interface leve e consistente para acessar bancos de dados em PHP. Cada driver de banco de dados (PDO_SQLITE, PDO_MYSQL e outros conforme listado abaixo) que implementa a interface PDO pode dispor de facilidades específicas da respectiva base de dados como extensão de funções regulares. Note que deve-se usar um driver específico PDO para acessar um determinado servidor de banco de dados.

PDO fornece uma camada de abstração de acesso a dados, o que significa que, independentemente de qual banco de dados se esteja usando, se utiliza das mesmas funções para emitir consultas e buscas de dados. A grande utilidade do PDO é quando se escreve um sistema já pensando na possibilidade dele ser portado para outros bancos de dados ou quando da necessidade de se trabalhar com mais de um tipo de banco. É uma interface de acesso a banco de dados (ao contrário de uma camada de abstração total, esta extensão não gera SQL automaticamente nem emula características faltantes). É uma extensão que tem como objetivo padronizar o acesso a banco de dados usando as mesmas funções independentemente do SGBD.

PDO está empacotado com PHP 5.1, e está disponível como uma extensão PECL (veja abaixo) para PHP 5.0; não funciona com versões anteriores ao PHP 5. PDO e o driver PDO_SQLITE já estão habilitados por default desde o PHP 5.1.0. No entanto, é necessário habilitar o driver PDO para outros SGBD.

Os seguintes drivers estão disponíveis para implementarem interfaces PDO:

  • PDO_FIREBIRD Firebird/Interbase 6
  • PDO_IBM IBM DB2
  • PDO_INFORMIX IBM Informix Dynamic Server
  • PDO_MYSQL MySQL 3.x/4.x/5.x
  • PDO_OCI Oracle Call Interface
  • PDO_ODBC ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
  • PDO_PGSQL PostgreSQL
  • PDO_SQLITE SQLite 2 e SQLite 3
  • PDO_SQLSRV Microsoft SQL Server / SQL Azure

Como instalar os drivers PDO no Debian?
Para o driver PDO_MYSQL:
# apt-get install php5-mysql
O pacote php5-mysql provê um módulo para conexões de banco de dados MySQL diretamente a partir de scripts PHP. Também inclui o módulo pdo_mysql para uso com a extensão PDO.

Para o driver PDO_PGSQL:
# apt-get install php5-pgsql
O pacote php5-pgsql provê um módulo para conexões de banco de dados PostgreSQL diretamente a partir de scripts PHP. Também inclui o módulo pdo_pgsql para uso com a extensão PDO.

Para o driver PDO_SQLITE:
# apt-get install php5-sqlite

2- PEAR
Pear (PHP Extension and Application Repository) oferece o seguinte:
+ uma biblioteca estruturada de código fonte aberto para programadores PHP;
+ sistema de distribuição de código e gerência de pacote
+ estilo de código padronizado desenvolvido em PHP
+ uma biblioteca de extensões para o PHP (PECL)

PEAR é um sistema de estrutura e distribuição para componentes PHP reutilizáveis, criando uma coleção de funcionalidades de adição para o desenvolvimento de PHP. Cada pacote de código PEAR segue um padrão. Existem muitos pacotes PEAR disponíveis que lidam com finalidades diversas: de gerenciamento de seções até funcionalidades de carrinho de compras. Abaixo lista-se algumas categorias de módulos PEAR:

  •   autenticação;
  •   banco de dados;
  •   data/hora;
  •   encriptação;
  •   internacionalização;
  •   correio;
  •   streams;
  •   e muitas outras. A lista completa de módulos pode ser encontrada em http://pear.php.net/packages.php

O PEAR possui um gerenciador de pacotes chamado “PEAR package manager”, que permite a instalação de de novos pacotes, gerenciamento de pacotes já instalados e verificação de dependência entre eles. Esse gerenciador tem sua funcionalidade semelhante ao “apt-get” do Debian Linux. Este pacote “PEAR package manager” contém as classes base PEAR para o PHP, bem como o instalador PEAR. Muitas classes PEAR já estão empacotados para o Debian, e pode ser facilmente identificados por nomes que começam com “php”, como php-db e php-auth.

Para verificar se o PEAR está instalado no seu sistema, verifique a resposta do sistema ao seginte comando:
$ pear
O programa ‘pear’ não está instalado no momento. Você pode instalá-lo digitando: apt-get install php-pear

No caso acima, o sistema informou que o “PEAR package manager” não está instalado. Proceda a instalação com o seguinte comando:
# apt-get install php-pear

Com a instalação do “PEAR package manager”, pode-se utilizá-lo para instalar os pacotes desejados. Por exemplo, para instalar o pacote MDB2:
# pear install MDB2

No caso acima, o instalador denominado pear abre uma conexão HTTP com o servidor de pacotes do PEAR, obtém o pacote MDB2 e o instala no diretório apropriado. No caso do Debian, o arquivo principal dessa classe estará em: /usr/share/php/MDB2.php , e a documentação correspondente em /usr/share/doc/php5-common/PEAR/MDB2/docs/

Para saber quais os pacotes instalados, utilize o seguinte comando conforme demonstrado no exemplo abaixo:
$ pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.7 stable
Console_Getopt 1.3.0 stable
MDB2 2.4.1 stable
PEAR 1.9.4 stable
Structures_Graph 1.0.4 stable
XML_Util 1.2.1 stable

3- PECL
PECL (PHP Extension Community Library) é um projeto que distribui extensões PHP (códigos compilados escritos em C) para compilação com o PHP. PECL inclui módulos para muitas finalidades. Extensões PECL são distribuídos como pacotes e podem ser instalados utilizando o instalador PEAR com o comando “pecl”.

O repositório PECL pode ser encontrado em http://pecl.php.net/
A lista de extensões PHP pode ser visualizada em http://pecl.php.net/packages.php

Links:
1- Driver PDO_SQLITE
2- Instalações PECL

A configuração descrita abaixo foram realizadas no Debian-6 (Squeeze).

Para o WordPress executar corretamente (Instalação WordPress básico + Supercache), é preciso :
a) habilitar o módulo suPHP do Apache;
b) habilitar o módulo rewrite do Apache;
c) habilitar a diretiva “AllowOverride All” relativo a pasta raiz do site.

Vejamos os procedimentos.

1. Instalar o Apache, PHP e MySQL (LAMP)
Veja aqui um tutorial para esta instalação.

2. Preparar os dominios virtuais no Apache
A configuração pode ser conseguida seguindo este tutorial. Atentar para habilitar a permissão de reescrita.

3. Certificar-se dos pacotes Apache necessários
Para isto, use a maneira mais fácil é que através do Synaptic. Devem ser deixados instalados e funcionando os seguintes pacotes:

apache2
apache2-mpm-worker
apache2-utils
apache2.2-bin
apache2.2-common
libapache2-mod-suphp

4. Habilitar o módulo rewriter do Apache

# a2enmod rewrite

OBS: para entender o funcionamento do módulo de reescrita do Apache, veja o post Configuração .htacces do Apache2.

5. Configurar o módulo suPHP
Primeiro, instalar o módulo:
# apt-get install libapache2-mod-suphp

Editar o arquivo /etc/suphp/suphp.conf , para fixar as seguintes configurações na sua sessão de segurança:
; Security options
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=true
allow_directory_others_writeable=false

Também deve ser matéria de atenção três outros aspectos:
(a) a configuração de “docroot” neste arquivo. Se todos os domínios existentes no servidor tiver sua pasta inicial em /home/nome_usuario/public_html, esta variável deve ser do tipo:
docroot=${HOME}/public_html
(b)Mudar a configuração da UMASK (“user mask”) para 0022, de forma a se ter as criações do arquivos com permissões 644 e para DIRETÓRIOS 755:
umask=0022, em vez do valor default que é “0077”.
(c) Para evitar que o arquivo de log cresça muito, utilize:
loglevel=warn, em vez do valor default que é “info”.

6. Habilitar o módulo suPHP


# a2dismod php5
# a2enmod suphp

O primeiro comando acima é necessário caso esteja o Apache2 instalado com o PHP como um módulo. Neste caso, o módulo PHP deve ser desabilitado pelo fato do suPHP usar a versão CGI do PHP para funcionar.
OBS: para uma descrição mais completa da instalação do módulo suPHP, veja o post Instalar e configurar Módulos do Apache2 no Debian.

Comandos úteis:
$ ls -la /etc/apache2/mods-enabled
O primeiro comando lista os módulos habilitados.

7. Reiniciar o Apache

# /etc/init.d/apache2 restart

8. Criar um usuário para receber o WordPress
Utilize o comando adduser, criando um novo usuário conforme exemplo abaixo

# adduser governanca

Faça login neste novo usuário e crie uma pasta para servir como diretorio raiz para o novo dominio virtual a ser criado. Como exemplo, iremos criar a pasta public_html:

governanca$ mkdir public_html

9. Criar um domínio virtual tendo como pasta raiz public_html
a) Criar o arquivo /etc/apache2/sites-available/governanca copiado a partir do arquivo “default”, devendo o mesmo ser editado e ter as seguintes configurações nos locais apropriados:
Servername www.governanca.org
DocumentRoot /home/governanca/public_html

Para maiores detalhes, veja o post Configurar domínios virtuais do Apache em máquina Linux/Debian.

b) Habilitar o novo dominio, através dos seguintes comandos

# a2ensite governanca
# /etc/init.d/apache2 reload

10. Testar o funcionamento do novo domínio
Copie para a pasta criada public_html dois arquivos exemplos, index.html e index.php, e acesse via navegador para testar o funcionamento do Apache e do PHP (www.governanca.org e http://www.governanca.org/index.php). Deverá ser mostrado na tela do navegador os conteúdos destes dois arquivos. Assim, asseguramos o funcionamento do Apache e do PHP.

11. Baixar o WordPress e descompactá-lo
Para facilitar, faça estas ações já na pasta public_html do usuário que será proprietário da aplicação:


governanca/public_html$ wget -c http://br.wordpress.org/
governanca/public_html$ unzip wordpress-3.3.1-pt_BR.zip

Com estes comandos, será criado uma pasta governanca/public_html/wordpress contendo todo o conteúdo da aplicação já de forma descompactada.

12. Criar base de dados para o WordPress

governanca$ mysql -u root -p

mysql> CREATE DATABASE wordpress;
mysql> GRANT ALL ON wordpress.* TO wordpress IDENTIFIED BY '2nMaqPvg';
mysql> FLUSH PRIVILEGES;

13. Ajustar a configuração do WordPress

a) Renomear o arquivo “wp-config-sample.php” para “wp-config.php”:

governanca/public_html/wordpress$ cp wp-config-sample.php wp-config.php

b) Editar o arquivo wp-config.php com configurações de conectorização ao banco de dados

// ** MySQL settings ** //
define('DB_NAME', 'wordpress'); // The name of the database
define('DB_USER', 'wordpress'); // Your MySQL username
define('DB_PASSWORD', '2nMaqPvg'); // ...and password
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

OBS: Em caso de se utilizar servidores separados para a função de servidor web e banco de dados, DB_HOST deve indicar o IP do servidor de banco de dados. Usa-se “localhost” ou o “127.0.0.1” quando o servidor MySQL estiver instalado na mesma máquina do servidor web.

14. Configurar o WordPress
Acesse pelo navegador a página de configuração do WordPress em http://www.governanca.org.br/wordpress/wp-admin/install.php. Abaixo uma parte da tela que deve ser mostrada.
Tela para configuração inicial do WordPress
Prossiga informando o que é solicitado:
Título do site: Governança
Nome do usuário: admin
Senha: minhasenha

Se tudo estiver funcionando bem, uma tela de sucesso de instalação deve ser mostrada conforme o exemplo abaixo.

Tela informando sucesso na instalação do WordPress.

15. Para acessar o novo sitio com WordPress
Acesso aos posts: http://www.governanca.org.br/wordpress/
Acesso ao login administrativo: http://www.governanca.org.br/wordpress/wp-login.php

Referências:
1- Instalando o WordPress
2- Apache2 usando o módulo Suphp
3- Installing suPHP
4- Manual Apache: suporte suEXEC
5- Instalar servidor LAMP (Linux + Apache + PHP + MySQL) no Debian
6- Configurar domínios virtuais do Apache em máquina Linux/Debian
7- Instalar e configurar Módulos do Apache2 no Debian
8- Configuração .htacces do Apache2
9- Download do WordPress
10- Instalando o WordPress
11- Calculando valores de UMASK
12- SuPHP HomePage