Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Copias de seguridad en PostgreSQL

Si tenemos una base de datos con información importante, es imprescindible hacer copias de seguridad.

Para ello, con postgres, podemos utilizar el siguiente script:

#!/bin/bash
#
# pg_copia.sh
# Por Guimi 2008/11 - http://www.guimi.net
# Basado en un script de http://www.cyberciti.biz/tips/howto-backup-postgresql-databases.html
#

##########################
# PARAMETROS
DIR="/var/lib/postgresql/copias"
LOG="pg_copia.log"

# Vamos al directorio de copias
cd $DIR

# Marcamos el inicio del script en el registro
echo "["`date +%C%y/%m/%d-%X`"] --- Iniciando pg_copia ---" >> $LOG

# Obtenemos la lista de BBDD, excluyendo template0 y template1
LISTA_BBDD=$(psql -l | awk '{ print $1}' | grep -vE '^-|^:|^List|^Name|^Nombre|^\(|template[0|1]')
# Para cada BBDD hacemos un volcado
for BBDD in $LISTA_BBDD
do
  FICHERO_COPIA="$BBDD.sql.gz"
  # Rotamos copias anteriores
  mv $FICHERO_COPIA".004" $FICHERO_COPIA".005" > /dev/null 2>&1
  mv $FICHERO_COPIA".003" $FICHERO_COPIA".004" > /dev/null 2>&1
  mv $FICHERO_COPIA".002" $FICHERO_COPIA".003" > /dev/null 2>&1
  mv $FICHERO_COPIA".001" $FICHERO_COPIA".002" > /dev/null 2>&1
  mv $FICHERO_COPIA $FICHERO_COPIA".001" > /dev/null 2>&1
  # Hacemos la copia
  pg_dump $BBDD | gzip -c > $FICHERO_COPIA
  # Marcamos en el registro la copia
  if [ "$?" -eq 0 ]
  then
    echo "[OK] $BBDD copiada" >> $LOG
  else
    echo "[ERROR $?] $BBDD NO copiada" >> $LOG
  fi
done

#Para restaurar una copia use:
# gunzip $FICHERO_COPIA
# psql -d $BBDD -f $FICHERO_COPIA > dump_$BBDD.log

 
Podemos programar el sistema para que realice copias automáticamente de forma regular mediante crontab -e.

Para restaurar una copia usamos:
$ gunzip miBD.sql.gz
$ psql -d miBD -f miBD.sql.gz > dump_miBD.log

De esta manera también podemos “llevarnos” una BDD de un servidor a otro. Primero hacemos la copia de seguridad en el servidor ‘origen’, y después en el servidor ‘destino’ creamos la BD y restauramos la copia:
$ createdb -O mi_usuario miBD
$ gunzip miBD.sql.gz
$ psql -d miBD -f miBD.sql > dump_miBD.log

postgres, copia de seguridad, backup postgres

Instalación de OpenERP 6.0.3 en Debian GNU/Linux

Con esta entrada empiezo una pequeña serie sobre la puesta en marcha y disfrute de OpenERP (antes TinyERP), un ERP de software libre, adaptado a la legislación española y muy completo. [Entradas sobre OpenERP].
Estas entradas se han realizado gracias a la colaboración de Servi3, tu experto en OpenERP.

La documentación oficial recomienda realizar una instalación manual sobre GNU/Linux para las instalaciones en producción. Una instalación manual permite un mayor control sobre la misma, controlando qué módulos están disponibles. Aunque mucha gente usa Ubuntu (una versión LTS), yo recomiendo Debian (estable).

En esta entrada explicaré cómo hacer una buena instalación de OpenERP 6.0.3. sobre un Debian 6.0.3 (¡qué coincidencia!). Sirve igual para sus derivados, como Ubuntu, y prácticamente para cualquier GNU/Linux.
El siguiente paso es instalar un cliente de OpenERP en Debian.
Una vez instalado el servidor, desde el cliente no se distingue si el servidor es un GNU/Linux, un Mac, un Windows… así que el resto de entradas sobre OpenERP sirven para cualquier sistema.
Después debemos hacer una configuración inicial de OpenERP.
Con eso ya estaremos listos para Instalar en OpenERP los módulos de la localización española para su uso conforme a la normativa española (valga la redundancia), donde de paso veremos cómo instalar módulos en general en OpenERP.
Para acabar esta serie veremos cómo configurar la localización española de OpenERP y cómo importar/exportar datos en OpenERP.

La instalación automática, para entornos de prueba o incluso para pequeñas organizaciones, tarda medio minuto con el siguiente comando:
# aptitude install openerp-server
Aunque en el caso de Debian estable, instala la versión anterior (5.x).

La mayor parte de esta entrada se debe a esta explicación de the open sourcerer sobre cómo instalar OpenERP 6 en Ubuntu 10.
De hecho ahí llegan un poco más lejos que aquí y también explican cómo instalar el “servidor web” (que en realidad es un cliente web) y cómo usar conexiones SSL. Otro modo de diferente de cifrar la conexión es usar túneles SSH.

PREPARACIÓN DEL SISTEMA

Actualizamos el sistema e instalamos los paquetes base que vamos a necesitar: Bazaar y Python (2.6.6).
# aptitude update && aptitude safe-upgrade
# aptitude install bzr
# aptitude install python python-psycopg2 python-reportlab python-egenix-mxdatetime python-tz python-pychart python-pydot python-lxml python-vobject python-mako python-pydot python-lxml python-vobject python-yaml python-dateutil python-pychart python-webdav

INSTALACIÓN DE POSTGRESQL (8.4)

Instalamos el motor de base de datos postgres (y un cliente gráfico):
# aptitude install postgresql pgadmin3

Generamos una clave para el usuario postgres:
# passwd postgres

Configuramos el servidor para que acepte conexiones de por usuario/clave:
# vi /etc/postgresql/8.4/main/pg_hba.conf

#local   all         all                               ident
local   all         all                               md5

 
Reiniciamos postgres
# /etc/init.d/postgresql restart
Y abrimos sesión como usuario postgres
# su – postgres

Como usuario postgres verificamos la instalación de postgres:
$ psql -l

                               Listado de base de datos
  Nombre   |  Dueño   | Codificación | Collation  |   Ctype    |      Privilegios      
-----------+----------+--------------+------------+------------+-----------------------
 postgres  | postgres | UTF8         | es_ES.utf8 | es_ES.utf8 | 
 template0 | postgres | UTF8         | es_ES.utf8 | es_ES.utf8 | =c/postgres
                                                               : postgres=CTc/postgres
 template1 | postgres | UTF8         | es_ES.utf8 | es_ES.utf8 | =c/postgres
                                                               : postgres=CTc/postgres
(3 filas)

 
Creamos un usuario de PostgreSQL con contraseña para OpenERP
$ createuser –pwprompt

Ingrese el nombre del rol a agregar: openerp
Ingrese la contraseña para el nuevo rol: 
Ingrésela nuevamente: 
¿Será el nuevo rol un superusuario? (s/n) n
¿Debe permitírsele al rol la creación de bases de datos? (s/n) s
¿Debe permitírsele al rol la creación de otros roles? (s/n) n

 
Verificamos que podemos acceder con el usuario accediendo a la BD postgres
(la BD de OpenERP la crearemos después en la instalación de OpenERP).
$ psql -U openerp -d postgres

Contraseña para usuario openerp: 
psql (8.4.9)
Digite «help» para obtener ayuda.

postgres=> \q

 
Cerramos la sesión del usuario postgres
$ exit

A no ser que solo estemos haciendo pruebas, es fundamental hacer copias de seguridad de PostgreSQL.

INSTALACIÓN DE OPENERP-SERVER

Creamos un usuario de sistema para la aplicación.
# adduser –system –home=/opt/openerp –group openerp
El resto de la instalación lo haremos desde el nuevo directorio de OpenERP.
# cd /opt/openerp

Descargamos las fuentes desde http://www.openerp.com/downloads.
# wget http://www.openerp.com/download/stable/source/openerp-server-6.0.3.tar.gz
Descomprimimos los paquetes
# tar xfz openerp-server-6.0.3.tar.gz
Limpiamos
# rm openerp-*gz
Asignamos el usuario y grupo a todas las fuentes
# chown -R openerp:openerp *

Hacemos una copia del directorio. La idea es mantener en /opt/openerp/server” la versión en producción y disponer de copias de las fuentes en directorios separados para las pruebas y desarrollos.
# cp -Rp openerp-server-6.0.3 server

Configuramos el servidor (basta cambiar ‘********’ por las claves que deseemos).
[Fichero de theopensourcerer]
# vi server/doc/openerp-server.conf

[options]
; This is the password that allows database operations
; Will be written to by the server when password is changed
; !! Keep this file secure !!
admin_passwd = ********

root_path = /opt/openerp/server/bin

without_demo = False
verbose = False

; Database settings
db_user = openerp
db_password = ********
; Please uncomment the following line *after* you have created the
; database. It activates the auto module check on startup.
; db_name = False
db_port = False
db_host = False
db_maxconn = 64

; Networking Settings
xmlrpc = True
xmlrpc_interface =
xmlrpc_port = 8069

netrpc = True
netrpc_interface = 
netrpc_port = 8070

; Uncomment these for xml-rpc over SSL
;xmlrpcs = True
;xmlrpcs_interface =
;xmlrpcs_port = 8071
;secure_pkey_file = /etc/ssl/openerp/server.key
;secure_cert_file = /etc/ssl/openerp/server.crt

; Log settings
logfile = /var/log/openerp/openerp-server.log
syslog = False
logrotate = True
log_level = info

; False prevents the client displaying the list of databases
list_db = True
addons_path = /opt/openerp/server/bin/addons
demo = {}
soap = False
reportgz = False
translate_modules = ['all']

; Static http parameters
static_http_enable = False
static_http_document_root = /var/www/html
static_http_url_prefix = /

; Outbound email configuration
;smtp_user = info@example.com
;email_from = "OpenERP Support" 
;smtp_port = 25
;smtp_password = ********
;smtp_ssl = True
;smtp_server = mail.example.com

 
Preparamos el directorio para los logs:
# mkdir /var/log/openerp
# chown openerp:root /var/log/openerp

Copiamos el fichero de configuración al sistema y ajustamos los permisos.
# cp server/doc/openerp-server.conf /etc/
# chown openerp:root /etc/openerp-server.conf
# chmod 640 /etc/openerp-server.conf

Generamos un fichero para iniciar y parar el servidor.
[Fichero de theopensourcerer]
# vi openerp-server

#!/bin/sh

### BEGIN INIT INFO
# Provides:             openerp-server
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Should-Start:         $network
# Should-Stop:          $network
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Enterprise Resource Management software
# Description:          Open ERP is a complete ERP and CRM software.
### END INIT INFO

PATH=/bin:/sbin:/usr/bin
DAEMON=/opt/openerp/server/bin/openerp-server.py
NAME=openerp-server
DESC=openerp-server

# Specify the user name (Default: openerp).
USER=openerp

# Specify an alternate config file (Default: /etc/openerp-server.conf).
CONFIGFILE="/etc/openerp-server.conf"

# pidfile
PIDFILE=/var/run/$NAME.pid

# Additional options that are passed to the Daemon.
DAEMON_OPTS="-c $CONFIGFILE"

[ -x $DAEMON ] || exit 0
[ -f $CONFIGFILE ] || exit 0

checkpid() {
    [ -f $PIDFILE ] || return 1
    pid=`cat $PIDFILE`
    [ -d /proc/$pid ] && return 0
    return 1
}

case "${1}" in
        start)
                echo -n "Starting ${DESC}: "

                start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
                        --chuid ${USER} --background --make-pidfile \
                        --exec ${DAEMON} -- ${DAEMON_OPTS}

                echo "${NAME}."
                ;;

        stop)
                echo -n "Stopping ${DESC}: "

                start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
                        --oknodo

                echo "${NAME}."
                ;;

        restart|force-reload)
                echo -n "Restarting ${DESC}: "

                start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
                        --oknodo
      
                sleep 1

                start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
                        --chuid ${USER} --background --make-pidfile \
                        --exec ${DAEMON} -- ${DAEMON_OPTS}

                echo "${NAME}."
                ;;

        *)
                N=/etc/init.d/${NAME}
                echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2
                exit 1
                ;;
esac

exit 0

 
Preparamos el fichero para que el servidor arranque normalmente.
# cp openerp-server /etc/init.d/
# chmod 755 /etc/init.d/openerp-server
# chown root: /etc/init.d/openerp-server
# update-rc.d openerp-server defaults

Para acabar, iniciamos el sistema:
# /etc/init.d/openerp-server start
Si todo ha ido bien el log nos dirá:
# cat /var/log/openerp/openerp-server.log

[2012-01-13 11:45:55,678][?] INFO:server:OpenERP version - 6.0.3
[2012-01-13 11:45:55,678][?] INFO:server:addons_path - /opt/openerp/server/bin/addons
[2012-01-13 11:45:55,678][?] INFO:server:database hostname - localhost
[2012-01-13 11:45:55,679][?] INFO:server:database port - 5432
[2012-01-13 11:45:55,679][?] INFO:server:database user - openerp
[2012-01-13 11:45:55,679][?] INFO:server:initialising distributed objects services
[2012-01-13 11:45:56,729][?] INFO:web-services:starting HTTP service at 0.0.0.0 port 8069
[2012-01-13 11:45:56,730][?] INFO:web-services:starting HTTPS service at 0.0.0.0 port 8071
[2012-01-13 11:45:56,730][?] INFO:web-services:Registered XML-RPC over HTTP
[2012-01-13 11:45:56,738][?] INFO:web-services:starting NET-RPC service at 0.0.0.0 port 8070
[2012-01-13 11:45:56,738][?] INFO:server:Starting 3 services
[2012-01-13 11:45:56,739][?] INFO:server:OpenERP server is running, waiting for connections...

 
Ahora, como hemos comentado al principio, el siguiente paso es instalar un cliente de OpenERP en Debian.
Después debemos hacer una configuración inicial de OpenERP.
Con eso ya estaremos listos para Instalar en OpenERP los módulos de la localización española para su uso conforme a la normativa española (valga la redundancia), donde de paso veremos cómo instalar módulos en general en OpenERP.
Para acabar esta serie veremos cómo configurar la localización española de OpenERP y cómo importar/exportar datos en OpenERP.

Instalación de OpenERP 6 en Debian GNU/Linux, OpenERP, Debian

Configurar juego de caracteres (charset) en LAMP (Linux, Apache, MySQL, PHP)

Instalamos los paquetes necesarios:
# aptitude install apache2 mysql-server php5

Modificamos la configuración de apache:
# vi /etc/apache2/conf.d/charset

...
AddDefaultCharset       UTF-8
...

Modificamos la configuración de PHP:
# vi /etc/php5/apache2/php.ini

...
default_charset = "utf8"
...

En la cabecera de las páginas indicar:

...
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...

Y en los scripts PHP de conexión:

...
$sql_script("SET NAMES 'utf8'");
...

Modificamos la configuración de MySQL:
# vi /etc/mysql/my.cnf

...
language    = /usr/share/mysql/spanish
...

Y reiniciamos los servicios:
# /etc/init.d/apache2 restart
# /etc/init.d/mysql restart

En caso de tener una BB.DD. en otra codificación como iso-8859-1, conviene exportarla a un fichero de texto, convertir el fichero con “iconv bbdd.sql -f iso-8859-15 -t utf-8 -o bbdd_utf8.sql” y volver a importarla.

juego de caracteres, charset, Linux, Apache, MySQL, PHP

Clave de root MySQL

Para poner o cambiar la clave de root de MySQL basta con:
# mysql -u root -D mysql

mysql> update user set password=password('mi_clave') where user='root';
mysql> quit

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

Alternativamente:
# mysqladmin -u root password ‘new-password’
# /etc/init.d/mysql stop
# /etc/init.d/mysql start

Opcional:
# vi /root/.my.cnf

[mysqladmin] 
user            = root
password        = mi_clave

# chmod 0600 /root/.my.cnf

clave, root, MySQL

Pasar datos de CSV a MySQL

Si queremos pasar datos de una aplicación a otra, el formato más estándar es CSV.
Así por ejemplo para pasar datos de una hoja de cálculo (OpenOffice Calc, Ms-Excell…) a MySQL podemos guardar la tabla como csv y después importarla en MySQL con los siguientes comandos:

# Primero hay que crear la tabla en la BBDD
$ mysql -hSERVIDOR -uUSUARIO -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
[...]
mysql> use BASE_DE_DATOS;

Database changed
# Indicar si los datos del fichero CSV están separados por coma, encerrados en comillas dobles o simples...
mysql> load data infile 'FICHERO' into table TABLA fields terminated by ',' enclosed by '"';
Query OK, X rows affected, X warnings (0.02 sec)
Records: X  Deleted: X  Skipped: X  Warnings: X

mysql> quit;
Bye

 
Quizá interese este artículo indicando como pasar de Ms-Access a MySQL.
 

CSV, MySQL, importar exportar datos
 

Cuadrar cierre y apertura de ejercicio en AbanQ

AbanQ es un ERP publicado como Software Libre que funciona regularcete para PyMES.
Actualización 2011: El nuevo modelo de desarrollo que han puesto en marcha es lo más cercano al timo que se me ocurre. Recomiendo mejor usar OpenERP, que en casi todo es mejor.

Cuando se intenta hacer un movimiento automático de cierra y apertura de ejercicio, a veces da un desagradable mensaje que dice que la contabilidad no cuadra -siendo que está perfectamente cuadrada-.
Esto ocurre porque algunas de las cuentas no tienen un código de balance asociado.

Para averiguar qué cuentas no tienen código de balance asociado basta hacer la siguiente consulta (por ejemplo usando pgAdmin III):

SELECT DISTINCT c.codcuenta, cb.codcuenta, cs.saldo
	FROM co_cuentascb cb
	  RIGHT JOIN co_cuentas c ON cb.codcuenta = c.codcuenta
	  LEFT JOIN co_subcuentas cs ON c.idcuenta = cs.idcuenta
	WHERE cb.codcuenta IS NULL
	  AND cs.saldo <> 0 

Consulta enviada por Alberto García al foro de AbanQ.
 
Una vez detectadas las cuentas sin código de balance asociado, hay que ir al Área Contable y Financiera (puede tener otro nombre similar) -> Principal. El botón “Códigos de balance 08″ nos abre el formulario con los diferentes códigos de balance.
Para cada cuenta sin código de balance asociado (las que nos devuelve la consulta SQL) seleccionamos el código de balance adecuado, hacemos doble click e insertamos la cuenta.

Por ejemplo se puede ver que el programa asocia inicialmente el código de balance “PG-A-7-a” con el grupo de cuentas “62″, por lo que podremos asociar las cuentas 62x en ese mismo código de balance.
Para ello abrimos el código de balance “PG-A-7-a”, hacemos doble click e insertamos las cuentas 62x.

Una vez no queden cuentas sin código de balance asociado, el programa debe hacer correctamente el asiento de cierre y apertura.

abanq, cierre y apertura, códigos de balance

Pasar de Access a MySQL

Tengo unos compañeros que se empeñan en utilizar Ms-Access, que es de los pocos programas que no funcionan de manera alguna en GNU/Linux (solo queda el recurso de usar una máquina virtual, como VirtualBox).
Por ello cuando necesito trabajar con ella (o ellos necesitan hacer consultas rápidas y como no saben me lo piden a mi) utilizo un pequeño script para pasar las tablas de Ms-Access a MySQL.
Y dice así:

#!/bin/bash
#
# vuelca_mdb 0.1 - GPL
# (c) Guimi
# http://guimi.net
#
# Ult. mod: Guimi 2009-07
#

# DATOS DEL FICHERO MDB
mdb=xxx.mdb
TABLA1=XXX
TABLA2=YYY

# DATOS DE MYSQL
bbdd=xxx
usuario=xxx
clave=xxx

# FICHERO TEMPORAL
tmp="tmp.$$"

echo "Exportando desde mdb..."
mdb-schema $mdb -S > sql-creacion_mdb$$.sql
mdb-export $mdb $TABLA1 -S -I > sql-datos_mdb$$.sql
mdb-export $mdb $TABLA2 -S -I >> sql-datos_mdb$$.sql

echo "Modificando ficheros exportados..."
# Hay que añadir "IF EXISTS" al "DROP TABLE"
sed 's/DROP TABLE/DROP TABLE IF EXISTS/g' sql-creacion_mdb$$.sql > $tmp
# Hay que cambiar "Long Integer" por "Integer"
sed 's/Long Integer/Integer/g' $tmp > sql-creacion_mdb$$.sql

# Hay que añadir un punto y coma ";" al final de cada linea -que acaba en ")"-
sed -e s/.$/\)\;/g sql-datos_mdb$$.sql > $tmp
mv $tmp sql-datos_mdb$$.sql

echo "Cargando datos en MySQL..."
mysql -D $bbdd -u $usuario --password=$clave < sql-creacion_mdb$$.sql
mysql -D $bbdd -u $usuario --password=$clave < sql-datos_mdb$$.sql

echo "Borrando ficheros temporales..."
rm sql-creacion_mdb$$.sql
rm sql-datos_mdb$$.sql


A continuación otros comandos que pueden ser utiles (proceden del paquete mdbtools).

Mostrar la versión del fichero mdb:
$ mdb-ver xxx.mdb

Mostrar las tablas de un fichero mdb (-1 para mostrar una tabla por fila):
$ mdb-tables -1 xxx.mdb

Generar un fichero C con un Array con los datos de una tabla:
$ mdb-array xxx.mdb TABLA

Access, mdb, mysql, script, prompt, Ms-Access, mdbtools

Postgres en Debian GNU/Linux

Instalamos postgres y un cliente gráfico:
# aptitude install postgresql pgadmin3

 
Configuramos el servidor para que acepte conexiones de red (opcional, recomendable):
# vi /etc/postgresql/7.4/main/postgresql.conf

#tcpip_socket = false
tcpip_socket = true

 
Para versiones de postgres a partir de la 8.0:
# vi postgresql.conf

listen_addresses='*'

 
Creamos un nuevo usuario y una nueva BB.DD. para trabajar con él (opcional, recomendable):
# su – postgres

$ id

uid=112(postgres) gid=116(postgres) grupos=115(ssl-cert),116(postgres)

$ psql -l

      Listado de base de datos
  Nombre   |  Dueño   | Codificación 
-----------+----------+--------------
 template0 | postgres | UNICODE
 template1 | postgres | UNICODE
(2 filas)

Creamos el usuario e indicamos que nos solicite una contraseña:
$ createuser –pwprompt

Ingrese el nombre del usuario a agregar: mi_usuario
Ingrese la contraseña para el nuevo rol:
Ingrésela nuevamente:
¿Será el nuevo rol un superusuario? (s/n) n
¿Debe permitírsele al usuario la creación de bases de datos? (s/n) s
¿Debe permitírsele al usuario la creación de otros usuario? (s/n) s

 
Creamos la BB.DD.:
$ createdb -O mi_usuario mi_bbdd

CREATE DATABASE

 
Conectamos a la BB.DD. y, por enriquecer el ejemplo, cambiamos la clave al usuario:
$ psql -d mi_bbdd

Bienvenido a psql 7.4.19, el terminal interactivo de PostgreSQL.

Digite:  \copyright para ver los términos de distribución
         \h para obtener ayuda sobre comandos SQL
         \? para obtener ayuda sobre comandos internos
         \g o termine con punto y coma (;) para ejecutar consulta
         \q para salir
mi_bbdd=# alter user mi_usuario with password 'mi_clave';
ALTER USER
mi_bbdd=# \q

 

Postgres en Debian GNU/Linux, Configurar Postgres en Linux, Instalar Postgres en Debian

Recuperar clave de root en MySQL

  1. Cortar todo acceso al puerto 3306 (porque vamos a funcionar momentaneamente sin claves).
  2. Parar mysql /etc/init.d/mysql stop
  3. Lanzar mysql sin proteccion de permisos /usr/sbin/mysqld –skip-grant-tables
  4. Desde otra sesión, conectar con mysql como root mysql -u root -D mysql
  5. Modificar la clave de root: update user set password=password(‘clave_secreta’) where user=’root’;
  6. Paramos mysql: /usr/sbin/mysqld stop
  7. Lanzar mysql /etc/init.d/mysql start
  8. Dar de nuevo acceso al puerto 3306.

Ya está cambiada. Ahora solo hay que volver a dar permisos de acceso y reiniciar el servicio.

Recuperar clave de root en MySQL, root password mysql