Reparar todas las tablas de todas las bases de datos de MySQL en Plesk

Para reparar todas las tablas de todas las bases de datos de MySQL en Plesk (Linux) tenemos que poner en una sola linea este pedazo churro:

for database in $(mysql --skip-column-names -uadmin -p`cat /etc/psa/.psa.shadow` -e
"show databases" ); do echo "optmizing tables from $database";
for table in $(mysql --skip-column-names -uadmin -p`cat /etc/psa/.psa.shadow` -e
"show tables" $database ); do echo "-> $table " ;
mysql -uadmin -p`cat /etc/psa/.psa.shadow` -e "OPTIMIZE TABLE $table" $database ;
done ; done ;

Guardar el resultado de MySQL en un archivo

Simpleza de MySQL y a la misma vez útil cuando se trata de guardar resultados (de SELECT por ejemplo) bastantes grandes en MySQL.
Con tee lo que hacemos es loguear todo lo que se produce en la consola de MySQL, tanto los comandos como los resultados de estos :D, con notee paramos de escribir en el archivo que le hemos indicado antes con tee

Esto me lo apunto aqui en el blog, para ayudar a la memoria 😀

mysql>tee archivo.txt
mysql>select * from tabla;
mysql>notee

GNU Fácil, Manual Ubuntu (Cuarta Edición) Ebook

El libro ‘GNU/Fácil’ la versión cuatro ha sido publicada, una guía completa para introducir a los usuarios nuevos a GNU/Linux y en particular a la distribución más usada del momento GNU/UBUNTU.
Antonio Perpiñan Díaz, reconocido en toda América Latina por sus aportes a la comunidad del Software Libre y por sus reconocidos libros (ya casi una docena), se siente orgulloso de la puesta en circulación digital de la cuarta versión de este libro que viene desarrollándose desde cuando UBUNTU estaba en la versión 5.10. El libro “GNU/Fácil” es una guía completa que debe servir de mucha ayuda para los usuarios nuevos al entorno gráfico de GNOME. Escrito con la intensión de educar y bajo condiciones pedagógicas que se pueden prestar para un primer semestre de nivel básico y medio de la educación formal de jóvenes en los cursos de 6, 7, 8 y los niveles de educación media.

GNU Fácil, Antonio Perpiñan Díaz (Cuarta Edición) Manual Ubuntu
GNU Fácil, Antonio Perpiñan Díaz (Cuarta Edición) Manual Ubuntu

Sin importar si el usuario introduciéndose al sistema operativo GNU/Ubuntu, el libro debe poder asistir para que la introducción sea conducida sin traGNU Facil UBUNTU V4ucida sin trastornos. El instructor que conduce la cátedra no tiene que ser un profesional informático, solo debe ser diestro con una computadora a nivel de usuario avanzado y el manual lo ayudará a completar el programa presentado en el. Este libro, desde sus inicios que solo se concentraba en el escritorio GNOME, y luego pasó a cubrir el sistema completo GNU, incluyendo la parte de mantenimiento Fundamental, Administrativa y de Redes, claro está a los niveles mas introductorio tomando en cuenta la audiencia a la cual el libro está dirigido. El libro de Antonio Perpiñan, persona dedicada a no solo a educar en asuntos informáticos, sino a la cultura general de los sistemas Unix y la cultura ética de los Hackers, el libro puede servir de introducción para los usuarios a los principios, teorías y practicas necesarias para empoderar a los potenciales nuevos usuarios y futuros administradores de sistemas.

http://www.megaupload.com/?d=GO2U91UT

Ajuste de los relojes de sistema y BIOS en Linux

Para ajustar la hora del BIOS utilizamos el comando hwclock de la siguiente manera:

  # hwclock --set --date hh:mm

Para verificar que efectivamente hemos realizado el cambio, podemos ver el reloj del Hardware con la opción –show, de la forma siguiente:

  # hwclock --show
  Sun 21 Feb 2010 11:44:23 PM CET  -0.468872 seconds

Ahora ajustamos el reloj del sistema con el comando:

  # hwclock --hctosys

Lo anterior copia la fecha y hora del reloj del BIOS al reloj del sistema, es decir, sincroniza ambos relojes. Finalmente, para comprobar que nuestros comandos surtieron efecto, pedimos la fecha y hora del sistema con date.

  $ date
  Sun Feb 21 23:44:40 CET 2010

Bajar ficheros adjuntos de más de 5 MB desde Horde/Webmail en Plesk

Se trata de una configuración de Horde vhost webmail, dirigida por Plesk.

Los Virtual Host (Vhost) de Plesk están en el archivo : /etc/httpd/conf.d/zz010_psa_httpd.conf.

Conéctese a su servidor mediante root SSH y modifíquelo a través del editor de texto

# nano /etc/httpd/conf.d/zz010_psa_httpd.conf

A continuación, basta incluir la siguente linea en vhost webmail :

php_admin_value memory_limit 128M

Puede modificar el tamaño 128 por 56 o lo que se estime necesario….

Por último, deberán modificarse las variables de /etc/php.ini para ficheros de upload y tamaño de POST.

# nano /etc/php.ini

Error al borrar un dominio en Parallels Plesk Panel

Un error que sigue apareciendo aunque pasen versiones y versiones de Plesk Panel ( desde la 7.4 a la 9.2 ) es la perdida de integridad referencial en algunas tablas. Esto provoca que a la hora de ejectuar algunas herramientas y falten datos se generen errores. En ese caso al borrar el dominio ‘delete.me’ nos aparece este mensaje :

0: class.MailManager.php:242
        MailManager::execWithException(string 'smart_exec', string 'mailmng', array, array, string 'lst')
1: class.MailManager.php:274
        MailManager->callMailManager(string 'remove-mailname', array)
2: class.MailManager.php:354
        MailManager->removeMailname(string 'sharoj.com', string 'delete')
3: cmd_mail.php3:1357
        mn_del(string '490')
4: class.DSMail.php:211
        DSMail->delete(boolean false)
5: class.PhDomain.php:358
        PhDomain->reset(integer '0', boolean true, boolean false)
6: class.BsDomain.php:330
        BsDomain->reset(integer '0')
7: class.BsDomain.php:302
      BsDomain->delete(integer '0')
8: class.BsDomain.php:536
        mdeleteDomains(array)
9: removeDomains.php3:42
        require(string '/opt/psa/admin/htdocs/domains/removeDomains.php3')
10: plesk.php:51

Tendremos que buscar manualmente donde está el problema y repararlo , directamente a la base de datos de Plesk (generalmente llamada psa).

Comenzamos a buscar relaciones rotas entre objetos:

# mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 152938
Server version: 5.0.32-Debian_7etch10-log Debian etch distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select id, name from domains where name = "delete.me";
+------+------------+
| id   | name       |
+------+------------+
| 1241 | delete.me  |
+------+------------+
1 row in set (0.00 sec)

Ya tenemos el ID del dominio, nos centramos en las cuentas de correo ya que el error se genera al borrar cuentas de correo. Vamos a ver que tablas hay en esta version de Plesk ( 9.2.3 )

mysql> show tables like '%mail%' ;
+------------------------+
| Tables_in_psa (%mail%) |
+------------------------+
| Webmails               |
| badmailfrom            |
| mail                   |
| mail_aliases           |
| mail_redir             |
| mail_resp              |
| mass_mail              |
| mass_mail_clients      |
| mass_mail_domains      |
+------------------------+
9 rows in set (0.00 sec)

La tabla que nos interesa es mail vamos a ver que esctructura tiene y vamos sacando datos:

mysql> desc mail ;
+---------------+------------------------------------------+------+-----+---------+----------------+
| Field         | Type                                     | Null | Key | Default | Extra          |
+---------------+------------------------------------------+------+-----+---------+----------------+
| id            | int(10) unsigned                         | NO   | PRI | NULL    | auto_increment |
| mail_name     | varchar(245)                             | NO   |     |         |                |
| perm_id       | int(10) unsigned                         | NO   | MUL |         |                |
| postbox       | enum('false','true')                     | NO   |     | false   |                |
| account_id    | int(10) unsigned                         | NO   | MUL |         |                |
| redirect      | enum('false','true')                     | NO   |     | false   |                |
| redir_addr    | varchar(255)                             | YES  |     | NULL    |                |
| mail_group    | enum('false','true')                     | NO   |     | false   |                |
| autoresponder | enum('false','true')                     | NO   |     | false   |                |
| spamfilter    | enum('false','true')                     | NO   |     | true    |                |
| virusfilter   | enum('none','incoming','outgoing','any') | NO   |     | none    |                |
| mbox_quota    | bigint(20)                               | NO   |     | -1      |                |
| dom_id        | int(10) unsigned                         | NO   | MUL |         |                |
+---------------+------------------------------------------+------+-----+---------+----------------+
13 rows in set (0.01 sec)
mysql> select * from mail where dom_id = 1241;
+-----+-----------+---------+---------+------------+----------+------------+------------+---------------+------------+-------------+------------+--------+
| id  | mail_name | perm_id | postbox | account_id | redirect | redir_addr | mail_group | autoresponder | spamfilter | virusfilter | mbox_quota | dom_id |
+-----+-----------+---------+---------+------------+----------+------------+------------+---------------+------------+-------------+------------+--------+
| 490 | delete.me |    2202 | true    |       2204 | false    |            | false      | false         | false      | incoming    |         -1 |   1241 |
+-----+-----------+---------+---------+------------+----------+------------+------------+---------------+------------+-------------+------------+--------+
1 row in set (0.00 sec)

Vemos que tiene al menos una cuenta de correo para el usuario 2204, vamos a buscar este usuario en la tabla accounts, ya que el id es accounts_id

mysql> show tables like '%acco%'
    -> ;
+------------------------+
| Tables_in_psa (%acco%) |
+------------------------+
| accounts               |
+------------------------+
1 row in set (0.00 sec)
mysql> select * from accounts where id = 2204 ;
Empty set (0.01 sec)

Pues no está, aquí tenemos el problema, no existe la información del usuario pero sí el buzón.
lo más comodo es borar la entrada en la base de datos de la cuenta de correo. Dado que vamos a borrar el dominio nos es indiferente conservarlo.

mysql> delete from mail where id =490 limit 1 ;
Query OK, 1 row affected (0.03 sec)

De otra forma , habíamos dado de alta una fila en accounts con el id 2204 .