Como criar um Novo Usuário e Conceder Permissões no MySQL

 Banco de Dados, CentOS 7 / RHEL 7, Clusterweb, ClusterWeb, Debian, Leitura Recomendada, Linux, MySQL, Profissional de TI, Ubuntu  Comentários desativados em Como criar um Novo Usuário e Conceder Permissões no MySQL
set 132019
 

O que representa o Vermelho

As linhas que o usuário precisa digitar ou customizar estarão em vermelho neste tutorial! O restante pode na maior parte ser copiado e colado.

Sobre o MySQL

O MySQL é um sistema de gerenciamento de banco de dados open source que ajuda os usuários a armazenar, organizar, e posteriormente, recuperar dados. Ele possui uma variedade de opções para conceder a usuários específicos permissões diferenciadas dentro de tabelas e bases de dados – este tutorial vai lhe dar um breve resumo de algumas das muitas opções.

Continue reading »

cPanel Logs Access, Apache, Email, Error, FTP, MySQL, WHM

 Apache2, Banco de Dados, Clusterweb, ClusterWeb, Debian, Hospedagem, Leitura Recomendada, Linux, Profissional de TI  Comentários desativados em cPanel Logs Access, Apache, Email, Error, FTP, MySQL, WHM
ago 272019
 

cPanel logs

Access logs and user actions /usr/local/cpanel/logs/access_log
Account transfers and misc. logs /var/cpanel/logs
Auditing log (account creations, deletions, etc) /var/cpanel/accounting.log
Backup logs /usr/local/cpanel/logs/cpbackup
Brute force protection (cphulkd) log /usr/local/cpanel/logs/cphulkd.log
Cpanel dnsadmin dns clustering daemon /usr/local/cpanel/logs/dnsadmin_log
Cpanel taskqueue processing daemon /usr/local/cpanel/logs/queueprocd.log
DBmapping /usr/local/cpanel/logs/setupdbmap_log
EasyApache build logs /usr/local/cpanel/logs/easy/apache/
Error log /usr/local/cpanel/logs/error_log
Installation log /var/log/cpanel
License updates and errors /usr/local/cpanel/logs/license_log
Locale database modifications /usr/local/cpanel/logs/build_locale_database_log
Login errors (CPSRVD) /usr/local/cpanel/logs/login_log
Horde /var/cpanel/horde/log/
RoundCube /var/cpanel/roundcube/log/
SquirrelMail /var/cpanel/squirrelmail/
Panic log /usr/local/cpanel/logs/panic_log
Per account bandwidth history (Cached) /var/cpanel/bandwidth.cache/{USERNAME}
Per account bandwidth history (Human Readable) /var/cpanel/bandwidth/{USERNAME}
Service status logs /var/log/chkservd.log
Tailwatch driver tailwatchd log /usr/local/cpanel/logs/tailwatch_log
Update analysis reporting /usr/local/cpanel/logs/updated_analysis/{TIMESTAMP}.log
Update (UPCP) log /var/cpanel/updatelogs/updated.{TIMESTAMP}.log
WebDisk (CPDAVD) /usr/local/cpanel/logs/cpdavd_error_log
Website statistics log /usr/local/cpanel/logs/stats_log

Continue reading »

dez 092015
 

CONFIGURANDO O AMBIENTE

 

É fato que devemos ter backups íntegros das nossas aplicações e servidores. Um backup confiável pode ser a diferença entre você ter que trabalhar durante algumas horas ou alguns dias ou até mesmo a diferença entre o sucesso ou a falência de uma empresa. Nada é mais frustrante, desmotivante e caro do que ter que refazer todo um sistema por uma simples falha no seu backup.

Para que o nosso script consiga usar a API, precisamos instalar o curl. O curl é uma ferramenta de linha de comando open source que transfere dados para uma URL, suportando DICT, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMTP, SMTPS, Telnet e TFTP. Suporta certificados SSL, HTTP POST, HTTP PUT, upload FTP, proxies, HTTP/2, cookies, autenticação de usuário e senha (Basic, Plain, Digest, CRAM- MD5, NTLM, Negotiate e Kerberos) , tunneling proxy e muito mais.

Para instalá-lo, basta executar o comando:

# yum install curl

Você precisará do git para efetuar o download dos scripts. Para quem não conhece, o git é um sistema de controle de versão, gratuito e open source. Para você trabalhar com o GitHub ou BitBucket, você precisa ter o git instalado em sua máquina. Então vamos instalá-lo.

# yum install git

Com o curl e git instalados, precisamos configurar o nosso usuário de MySQL que fará os dumps dos nossos bancos via mysqldump. Omysqldump é um utilitário do MySQL que executa backups lógicos, produzindo um conjunto de instruções SQL que podem ser executadas para reproduzir as definições de objeto de banco de dados originais e os dados da tabela. Ele despeja um ou mais bancos de dados MySQL para backup. O comando mysqldump também pode gerar a saída em formato CSV, ou em formato XML.

A configuração do MySQL é rápida e o usuário terá apenas permissão de leitura. Lembrando que por motivos óbvios de segurança, devemos liberar o acesso apenas para localhost ou para o IP do servidor que se conectará e fará os backups.

mysql> GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, RELOAD, SUPER, FILE ON *.* TO backup@localhost IDENTIFIED BY ‘SUASENHA’;

Com o shell e o MySQL prontos para fazer o backup, vamos ao próximo passo, que é o Dropbox!

Continue reading »

out 072015
 

cPanel logs most activity that happens on a server to log files so you can go back and review log entries for problems, instead of having to be on the server at the time of them happening.

This guide will cover the locations of the log files for things such as access logs, Apache web server logs, email logs, error logs, ftp logs, MySQL logs, and WHM logs.

If you’d like to have a poster of the 2013 cPanel logs location reference, you can request them from cPanel directly.

You can also view a digitial copy of this poster directly online at go.cPanel.net/logposter.

Continue reading »

DNS Robusto e fácil com PowerDNS e MySQL

 Clusterweb  Comentários desativados em DNS Robusto e fácil com PowerDNS e MySQL
nov 232014
 

O PowerDNS é um dos muitos softwares de DNS, ele é muito poderoso, pode fazer milhares de resoluções por segundo, e o que mais me chamou atenção, pode-se comunicar com vários backends, includindo MySQL, PostgreSQL, LDAP, Oracle e outros.

Para se ter uma idéia, existem grandes implementações feitas com ele, incluindo register.com e tucows.com, e, segundo o site oficial, existem aproximadamente 4000 servidores em serviços secundários ativos na internet, que servem aproximadamente 10 milhões de zonas e um imenso núumero de domínios. Testes no primeiro nível do domínios .EU demonstraram que o PowerDNs pode prover 50.000 resoluções por segundo num único servidor, com um hardware simples. No GOOGLE encontrei relatos de testes feitos inclusive pelo registro.br para utilização do mesmo.

A única desvantagem evidente é que o PowerDNS ainda não prevê uma implementação completa do DNSSEC. (O que pra muitos é irrelevante, visto que poucos são aqueles que implementaram DNSSEC em seus servidores) Continue reading »

MySQL Backup: Table By Table Backup With Auto Rotation, For Easy Restoration Of Partial/Full Database

 Backup, Banco de Dados, Clusterweb, Leitura Recomendada, Linux, Shell Script  Comentários desativados em MySQL Backup: Table By Table Backup With Auto Rotation, For Easy Restoration Of Partial/Full Database
jun 182014
 

Here is a MySQL backup script which can take table by table backups (individual backup files of each table of each database) in a compressed format. It also provides an automatic rotation of old backup files.  The backup script handles innodb and myisam tables separately.

 You have to set the following variables prior to running the backup script.

 DB_USER

 The database user who has access to all databases and its tables. I used “root” for my deployment.

 DB_PASS

 Password of the above user, prefixed with “-p”. For example if the password is Secret, then you should write the password as “-pSecret”.

 BAKUP_LOG

 File to which the backup log will be written. It should be writable by the user who is running the script.

 BASE_BAK_FLDR

 The backup folder. It should be writable by the user who is running the script.

 RM_FLDR_DAYS

 Backup rotation period. +30 is 30 days. Continue reading »

MySQL Workbench no Slackware 14.0

 Clusterweb, Linux, Redes  Comentários desativados em MySQL Workbench no Slackware 14.0
fev 262013
 

Introdução

O MySQL Workbench é uma ferramenta visual unificada para arquitetos de banco de dados, desenvolvedores e DBAs. Ela oferece recursos para modelagem de dados, desenvolvimento de Scripts SQL, administração do servidor, entre outros.

Neste artigo, passarei um pouco da experiência e problemas que tive ao instalar e executar esta ferramenta no Slackware 14.0 (64 bits).

A instalação do MySQL Workbench no Slackware é totalmente manual, portanto, vamos ter que começar pelas suas dependências.

As dependências necessárias são:

  1. libsigc++-2.2.10;
  2. glibmm-2.32.1;
  3. cairomm-1.10.0;
  4. pangomm-2.28.4;
  5. atkmm-2.22.6;
  6. gtkmm-2.24.2;
  7. lua-5.1.5;
  8. ctemplate-2.2.

Todas as dependências acima foram baixadas do SlackBuilds, facilitando bastante o processo de instalação.

A instalação de um pacote do SlackBuilds é bastante simples, sendo necessário apenas baixar os scripts de instalação (SlackBuild) e o respectivo código fonte. Para exemplificar, vamos instalar, passo a passo, a primeira dependência da lista (libsigc++-2.2.10):

Passo 1: Baixar o SlackBuild “libsigc++.tar.gz” e o código fonte “libsigc++-2.2.10.tar.xz” em um diretório de sua preferência. No meu caso, os salvei em /usr/local/src.

Passo 2: Descompactar o pacote do SlackBuild:

# tar -zxvf libsigc++.tar.gz

Passo 3: Mover o código fonte do “libsigc++” para a pasta descompactada do SlackBuild:

# mv libsigc++-2.2.10.tar.xz libsigc++

Passo 4: Entrar na pasta do SlackBuild:

# cd libsigc++

Passo 5: Executar o script: “libsigc++.SlackBuild”

# ./libsigc++.SlackBuild

Ao final deste processo, o “libsigc++.SlackBuild” irá gerar um arquivo “.tgz” no diretório /tmp.

Passo 6: Entrar no diretório /tmp e instalar o pacote “.tgz” gerado:

# cd /tmp
# installpkg libsigc++-2.2.10-x86_64-1_SBo.tgz

* É importante ressaltar: O SlackBuild não resolve dependências, portanto, será necessário instalar as dependências na ordem nas quais foram colocadas acima, para evitarmos este tipo de problema.

Instalação do MySQL Workbench

Após instalar todas as dependências, vamos baixar e instalar o MySQL Workbench. Para baixá-lo, acesse:

Selecione a opção “Source Code” em “Select Platform”, e em seguida, a opção “Generic Linux“.

Salve o arquivo “mysql-workbench-gpl-5.2.46-src.tar.gz” em um diretório de sua preferência. No meu caso, o salvei em /usr/local/src.

A instalação do MySQL Workbench é muito simples, basta seguir o roteiro padrão (./configure, make, make install e make clean):

# tar -zxvf mysql-workbench-gpl-5.2.46-src.tar.gz
# cd mysql-workbench-gpl-5.2.46-src
# ./configure
# make

Neste momento, tive o primeiro problema ao compilar. Estava gerando um erro do tipo:

libtool: compile: cannot determine name of library object from `’: command not found

Caso você tenha este problema, basta executar o comando autoreconf e, em seguida, o comando de compilação novamente:

# autoreconf -fi
# make
# make install

O comando autoreconf -fi irá refazer todos os scripts de configuração, incluindo qualquer arquivo que esteja faltando no pacote.

Por padrão, o comando make install instala os pacotes de comando em /usr/local/bin, arquivos include em /usr/local/include etc.

Você poderá especificar outro local de instalação usando a opção –prefix=PREFIX na hora de executar o ./configure.

Por fim, para executar o MySQL Workbench:

# usr/local/bin/mysql-workbench

Com o MySQL Workbench aberto, selecione a opção “New Connection”, entre com o usuário e senha do MySQL e execute a opção “Test Connection”.

Aqui, tive um novo problema: Não conseguia estabelecer uma conexão SSH com o MySQL e no log do Workbench dizia que ele não conseguia importar o módulo paramiko.

Para resolver este problema, basta baixar e instalar os módulos “pycrypto-2.6” e “paramiko-1.7.7.1”, nesta ordem. Ambos podem ser baixados no SlackBuilds e instalados conforme orientação das dependências no começo deste artigo.

O “paramiko” é um módulo Python que implementa o protocolo SSH2 com o objetivo de garantir a segurança nas autenticações com máquinas remotas.

Consultas SQL pelo Terminal no Postgres, Mysql, SQL Server

 Clusterweb, Linux, Redes  Comentários desativados em Consultas SQL pelo Terminal no Postgres, Mysql, SQL Server
ago 092012
 

Introdução

No meu dia a dia, e de muitos que possam está lendo este artigo, tenho que fazer diversas consultar em tabelas, às vezes dispostas em Sistemas Gerenciadores de Banco de Dados (SGBD) diferentes. Para este tipo de situação, o Eclipse SQL Explorer funciona muito bem, mas muitas vezes, são consultas simples e abrir este software ou qualquer outro para fazer a consulta pode ser desnecessário…

Então pensei em fazer algo simples, porém útil, um script em PHP que faça a consulta e apresente na saída padrão ( no terminal ).

Poderia ter sido usado qualquer outra linguagem de programação, usei o PHP por sua conexão com diferentes SGBD ser bem fácil e no momento estou mais familiarizado com sua sintaxe.

Preparando o Ambiente

Caso não tenha o PHP instalado ainda:

$ sudo apt-get install php5

Para este artigo, preparei o ambiente para realizar consultar no Postgres, MySQL e MS SQL Server.

Instale os módulos necessários para o PHP realizar a conexão:

$ sudo apt-get install php5-pgsql php5-mysql php5-sybase

Obs.: O php5-sybase é um módulo usado tanto para o Sybase como para o MS SQL Server.

Com a ajuda de um terminal embutido, como Guake, você nem vai precisar ir até um terminal usando o menu, basta usar o atalho configurado.

Ao final desse artigo teremos a possibilidade de fazer algo como:

Linux: Consultar SQL pelo terminal
Linux: Consultar SQL pelo terminal

Mão na massa ( O script PHP )

Arquivo de conexão

Para realizar a conexão com o SGBD fiz a classe DataBase ler um arquivo “.ini”, onde o mesmo é nomeado com o nome do SGBD seguido pelo nome da base de dados, e dentro dele seguem os dados do servidor (host), usuário, senha e opcionalmente a porta.

Exemplo de arquivo de configuração para conexão:

host    = 192.168.0.100
user    = postgres
pass     = gnuxx22l1n1

Classe de conexão

Seque o código da classe de conexão com os SGBD:

<?php
/*
* classe DataBase
* Gerencia conexoes com bancos de dados através de arquivos de configuracao.
* Baseada em TConnection.class.php do livro: PHP Programando com Orientação a Objetos (Pablo Dall”Oglio)
*/

class DataBase
{
public static $conn;

private function __construct() {}

/*
* metodo open()
* recebe o nome do banco de dados e instancia o objeto PDO correspondente
* o arquivo segue o padrao: tipobanco_nomebase
*/
private function open( $arquivo )
{
// verifica se existe o arquivo
if ( file_exists( “{$arquivo}.ini”) )
{
// le o INI e retorna um array
$nome = explode(‘_’, $arquivo );
$tipoBanco = $nome[0];
$nomeBase = $nome[1];
$db = parse_ini_file(“{$arquivo}.ini”);
}
else
{
// se nao existir, lanca um erro
throw new Exception(“Arquivo ‘$arquivo’ nao encontrado”);
}

// le as informacoes contidas no arquivo
$usuario = isset($db[‘user’]) ? $db[‘user’] : NULL;
$senha = isset($db[‘pass’]) ? $db[‘pass’] : NULL;
$host = isset($db[‘host’]) ? $db[‘host’] : NULL;
$porta = isset($db[‘port’]) ? $db[‘port’] : NULL;

// descobre qual o tipo (driver) de banco de dados a ser utilizado
switch ( $tipoBanco )
{
case ‘pgsql’:
$porta = $porta ? $porta : ‘5432’;
$conn = new PDO(“pgsql:dbname={$nomeBase}; user={$usuario}; password={$senha};
host=$host;port={$porta}”);
break;
case ‘mysql’:
$porta = $porta ? $porta : ‘3306’;
$conn = new PDO(“mysql:host={$host};port={$porta};dbname={$nomeBase}”, $usuario, $senha);
break;
case ‘mssql’:
$conn = new PDO(“dblib:host={$host};dbname={$nomeBase};charset=UTF-8”, $usuario, $senha);
break;
}
// define para que o PDO lance excecoes na ocorrencia de erros
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// retorna o objeto instanciado.
return $conn;
}

/*
* Metodo que implementa o padrao Singleton
* O mesmo retorna a instancia de conexao de um banco caso ja exista
* Evitando a criacao de uma nova a cada solicitacao
*/

public static function getConn( $nomeArquivo ) {
if ( ! isset( self::$conn[$nomeArquivo] ) ) {
self::$conn[$nomeArquivo] = DataBase::open( $nomeArquivo );
}
return self::$conn[$nomeArquivo];
}
}
?>

Script de consulta (shellquery)

Agora o código do script PHP que realiza de fato a consulta no banco de dados, mediante parâmetros fornecidos via terminal.

#!/usr/bin/php
<?php
# uso: shellquery tipoBanco_nomeBase “comandoSQL”
include_once “DataBase.class.php”;
#———————————————-
$mostraNomeCampos = TRUE;
$banco = isset( $argv[1] ) ? $argv[1] : NULL;
$sql = isset( $argv[2] ) ? $argv[2] : NULL;
# se for passado um terceiro argumento, não exibe o nome dos campos
if ( isset( $argv[3] ) ) $mostraNomeCampos = FALSE;

if ( $banco == NULL || $sql == NULL ) {
echo “Sintaxe {$argv[0]} nomeArquivoConfiguracao comandoSQL\n”;
exit;
}

try {
$conn = DataBase::getConn( “$banco” );
$rs = $conn->query( $sql )->fetchAll();
} catch ( Exception $e ){
echo “Erro: {$e->getMessage()} :\nLinha: {$e->getLine()}\n”;
exit;
}

foreach ( $rs as $dados ) {
$ultimaCol = ( count( $dados ) / 2 ) – 1;

if ( $mostraNomeCampos == TRUE ) {
# obtem os nomes dos campos
$key = ( array_keys( $dados ) );
$x=0;
for ( $i=0; $i < count( $key ); $i++ ) {
if ( is_int( $key[$i] ) ) continue;
$campo[$x] = $key[$i];
$x++;
}

# exibe os nomes dos campos
for ( $i=0; $i < $ultimaCol; $i++ ) {
echo “{$campo[$i]}|”;
}
echo “{$campo[$ultimaCol]}\n”;
}
$mostraNomeCampos = FALSE;

# exibe os dados
for ( $i=0; $i < $ultimaCol; $i++ ) {
echo “{$dados[$i]}|”;
}
echo “{$dados[$ultimaCol]}\n”;
}
?>

Salve em um arquivo, como shellquery, dê permissão de execução:

$ chmod +x shellquery

E use à vontade.

Exemplo de uso

./shellquery pgsql_casa “SELECT * FROM disciplinas”

Resultado:

no_disciplina|id_disciplina
PORTUGUES|1
MATEMATICA|2
GEOGRAFIA|3
HISTORIA|4

Bom, a saída deixei bem simples, exibindo os registros um por linha, separados por “|”, assim poderá ser usado a seu gosto, para:

– Quantos registros foram retornados?:

$ ./shellquery pgsql_casa “SELECT * FROM disciplinas” QUALQUERCOISA | wc -l

Resultado:

4

– Criar um arquivo CSV com separdor “;” no lugar de “|”:

$ ./shellquery pgsql_casa “SELECT * FROM disciplinas” | tr ‘|’ ‘;’ > resultado.csv

Arquivo resultado.csv aberto no libreoffice:

Linux: Consultar SQL pelo terminal

Enfim, podem ser feitas as infinidades de modificações que o GNU/Linux permite via shell.

Espero que ajude e facilite a vida de vocês, pra mim é uma mão na roda, uso todos os dias!

Solucionando problemas com o charset

 Linux  Comentários desativados em Solucionando problemas com o charset
abr 232012
 

Um problema muito comum ao utilizar o Apache 2 sobre uma distribuição Linux recente é os caracteres acentuados das páginas hospedadas aparecerem trocados por interrogações, quadrados ou vírgulas em alguns navegadores, como nesse screenshot:

Isso acontece em situações onde os arquivos das páginas hospedadas no servidor foram salvos usando o charset ISO-8859-1 (ou outro dos charsets pré-unicode) e o servidor Apache está configurado para usar UTF-8, que é o default no Ubuntu e na maioria das distribuições atuais.

Para solucionar o impasse, você tem basicamente três opções. A primeira é especificar o charset correto no header de cada página do site, o que é feito adicionando uma tag “meta” dentro da seção “head” da página, como em:

<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
ou:
<meta http-equiv=”Content-Type” content=”text/html; charset=ISO-8859-1″ />

Algumas versões antigas do Internet Explorer entendem apenas a tag “http-equiv…”. Você pode adicioná-la também, de forma a manter compatibilidade com elas, como em:

<http-equiv=”Content-Type” content=”text/html; charset=utf-8″>

Continuando, a segunda opção é mudar a configuração do Apache para que ele passe a utilizar o ISO-8859-1 como charset padrão, em vez do UTF-8. Nas distribuições derivadas do Debian, isso é definido no arquivo “/etc/apache2/conf.d/charset“. Edite o arquivo, substituindo a linha:

AddDefaultCharset UTF-8

por:

AddDefaultCharset ISO-8859-1

Se, por acaso, o arquivo “/etc/apache2/conf.d/charset” não estiver disponível (ou a configuração não surtir efeito), edite o arquivo “/etc/apache2/apache2.conf“, descomentando (ou adicionando) a mesma linha.

No Fedora/CentOS a opção é incluída diretamente no arquivo “/etc/httpd/conf/httpd.conf” (perto do final do arquivo), basta substituir a linha “AddDefaultCharset UTF-8” por “AddDefaultCharset ISO-8859-1”, assim como no Debian.

Se o servidor hospeda páginas escritas em português, é recomendável editar também a linha:

LanguagePriority en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv tw

… no “/etc/apache2/apache2.conf”, mudando a ordem das linguagens, de forma que o pt-br e o pt fiquem no início:

LanguagePriority pt-br pt en da nl et fr de el it ja ko no pl ltz ca es sv tw

Para que a configuração entre em vigor, é preciso fazer com que o Apache 2 recarregue a configuração:

# /etc/init.d/apache2 reload

ou:
# service httpd reload

O charset padrão do servidor é aplicado a todas as páginas onde o charset não é diretamente especificado na seção <head>, ajudando em casos em que você tem um grande volume de páginas antigas, onde o charset não é especificado.

Uma terceira opção, mais radical, seria mudar o charset de todas as páginas hospedadas (se você usa um gestor de conteúdo, muitas vezes esta opção estará disponível nas configurações) de “ISO-8859-1” para “UTF-8”. Diversos editores de texto, incluindo o kwrite e o gedit, permitem trocar o charset usado, basta especificar qual quer usar nas configurações.

É possível também converter os arquivos diretamente, usando o comando “recode“, que está disponível nos repositórios de praticamente todas as distribuições que adotaram o uso do UTF8. Comece instalando o pacote, como em:

# apt-get install recode

ou:
# yum install recode

Para converter um arquivo, use o comando “recode -d ISO-8859-1..UTF-8” seguido pelo arquivo a ser convertido, como em:

$ recode -d ISO-8859-1..UTF-8 arquivo.txt

Você pode também converter de uma vez diversos arquivos, como em:

$ recode -d ISO-8859-1..UTF-8 *.html

ou:
$ recode -d ISO-8859-1..UTF-8 *.php

O recode não salva cópias dos arquivos originais, por isso é importante que você sempre execute o comando sobre uma cópia dos arquivos, substituindo os arquivos originais só depois de verificar e testar. Concluindo, é possível também fazer o caminho inverso, convertendo arquivos de UTF-8 para ISO-8859-1, invertendo a sintaxe do comando, como em:

$ recode -d UTF-8..ISO-8859-1 *.html

A principal observação nesse caso é que o recode só consegue converter caracteres UTF-8 que possuem um correspondente dentro da codificação ISO-8859-1, por isso não deve ser usado em textos que incluam caracteres de línguas asiáticas, por exemplo.