<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hiparco &#187; BBDD</title>
	<atom:link href="http://guimi.net/blogs/hiparco/category/bbdd/feed/" rel="self" type="application/rss+xml" />
	<link>http://guimi.net/blogs/hiparco</link>
	<description>Recetas y trucos de GNU/Linux e informática en general</description>
	<lastBuildDate>Mon, 02 Apr 2012 11:53:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Copias de seguridad en PostgreSQL</title>
		<link>http://guimi.net/blogs/hiparco/copias-de-seguridad-en-postgresql/</link>
		<comments>http://guimi.net/blogs/hiparco/copias-de-seguridad-en-postgresql/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 08:21:41 +0000</pubDate>
		<dc:creator>Güimi</dc:creator>
				<category><![CDATA[BBDD]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://guimi.net/blogs/hiparco/?p=837</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Si tenemos una base de datos con información importante, es imprescindible hacer copias de seguridad.</p>
<p>Para ello, con postgres, podemos utilizar el siguiente script:</p>
<pre class="codigo">#!/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>&#038;1
  mv $FICHERO_COPIA".003" $FICHERO_COPIA".004" > /dev/null 2>&#038;1
  mv $FICHERO_COPIA".002" $FICHERO_COPIA".003" > /dev/null 2>&#038;1
  mv $FICHERO_COPIA".001" $FICHERO_COPIA".002" > /dev/null 2>&#038;1
  mv $FICHERO_COPIA $FICHERO_COPIA".001" > /dev/null 2>&#038;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
</pre>
<p>
&nbsp;<br />
Podemos programar el sistema para que realice copias automáticamente de forma regular mediante <font class="comando">crontab -e</font>.</p>
<p>Para restaurar una copia usamos:<br />
<font class="comando">$ gunzip miBD.sql.gz<br />
$ psql -d miBD -f miBD.sql.gz > dump_miBD.log</font></p>
<p>De esta manera también podemos &#8220;llevarnos&#8221; una BDD de un servidor a otro. Primero hacemos la copia de seguridad en el servidor &#8216;origen&#8217;, y después en el servidor &#8216;destino&#8217; creamos la BD y restauramos la copia:<br />
<font class="comando">$ createdb -O mi_usuario miBD<br />
$ gunzip miBD.sql.gz<br />
$ psql -d miBD -f miBD.sql > dump_miBD.log</font></p>
<div class="keywords"><b>postgres, copia de seguridad, backup postgres</b></div>
]]></content:encoded>
			<wfw:commentRss>http://guimi.net/blogs/hiparco/copias-de-seguridad-en-postgresql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalación de OpenERP 6.0.3 en Debian GNU/Linux</title>
		<link>http://guimi.net/blogs/hiparco/instalacion-de-openerp-6-0-3-en-debian-gnulinux/</link>
		<comments>http://guimi.net/blogs/hiparco/instalacion-de-openerp-6-0-3-en-debian-gnulinux/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 20:20:16 +0000</pubDate>
		<dc:creator>Güimi</dc:creator>
				<category><![CDATA[BBDD]]></category>
		<category><![CDATA[OpenERP]]></category>
		<category><![CDATA[Software Libre]]></category>

		<guid isPermaLink="false">http://guimi.net/blogs/hiparco/?p=746</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Con esta entrada empiezo una pequeña serie sobre la puesta en marcha y disfrute de <a href="http://www.openerp.com/">OpenERP</a> (antes TinyERP), un ERP de software libre, adaptado a la legislación española y muy completo. [<a href="http://guimi.net/blogs/hiparco/category/openerp/">Entradas sobre OpenERP</a>].<br />
<b>Estas entradas se han realizado gracias a la colaboración de <a href="http://servi3.com">Servi3</a>, tu experto en OpenERP</b>.</p>
<p>La <a href="http://doc.openerp.com/v6.0/">documentación oficial</a> 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).</p>
<p>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.<br />
El siguiente paso es <a href="http://guimi.net/blogs/hiparco/como-instalar-un-cliente-de-openerp-en-debian/">instalar un cliente de OpenERP en Debian</a>.<br />
Una vez instalado el servidor, desde el cliente no se distingue si el servidor es un GNU/Linux, un Mac, un Windows&#8230; así que el resto de entradas sobre OpenERP sirven para cualquier sistema.<br />
Después debemos hacer una <a href="http://guimi.net/blogs/hiparco/configuracion-inicial-de-openerp/">configuración inicial de OpenERP</a>.<br />
Con eso ya estaremos listos para <a href="http://guimi.net/blogs/hiparco/instalar-en-openerp-los-modulos-de-la-localizacion-espanola/">Instalar en OpenERP los módulos de la localización española</a> 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.<br />
Para acabar esta serie veremos <a href="http://guimi.net/blogs/hiparco/como-configurar-la-localizacion-espanola-de-openerp/">cómo configurar la localización española de OpenERP</a> y <a href="http://guimi.net/blogs/hiparco/como-importarexportar-datos-en-openerp/">cómo importar/exportar datos en OpenERP</a>.</p>
<p>La instalación automática, para entornos de prueba o incluso para pequeñas organizaciones, tarda medio minuto con el siguiente comando:<br />
<font class="comando"># aptitude install openerp-server</font><br />
Aunque en el caso de Debian estable, instala la versión anterior (5.x).</p>
<p><strong>La mayor parte de esta entrada se debe a esta explicación de <a href="http://www.theopensourcerer.com/2011/04/19/how-to-install-openerp-6-on-ubuntu-10-04-lts-server-part-1/">the open sourcerer sobre cómo instalar OpenERP 6 en Ubuntu 10</a></strong>.<br />
De hecho ahí llegan más lejos que en aquí y explican también cómo instalar el servidor web (lo veremos en otra entrada) y cómo usar conexiones SSL. No está de más recordar que se puede asegurar cualquier servicio mediante <a href="http://guimi.net/blogs/hiparco/configuracion-de-ssh/">túneles SSH</a>.</p>
<h2>PREPARACIÓN DEL SISTEMA</h2>
<p>Actualizamos el sistema e instalamos los paquetes base que vamos a necesitar: Bazaar y Python (2.6.6).<br />
<font class="comando"># aptitude update &#038;&#038; aptitude safe-upgrade<br />
# aptitude install bzr<br />
# 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</font></p>
<h3>INSTALACIÓN DE POSTGRESQL (8.4)</h3>
<p>Instalamos el motor de base de datos postgres (y un cliente gr&aacute;fico):<br />
<font class="comando"># aptitude install postgresql pgadmin3</font></p>
<p>Generamos una clave para el usuario postgres:<br />
<font class="comando"># passwd postgres</font></p>
<p>Configuramos el servidor para que acepte conexiones de por usuario/clave:<br />
<font class="comando"># vi /etc/postgresql/8.4/main/pg_hba.conf</font></p>
<pre class="codigo">#local   all         all                               ident
local   all         all                               md5
</pre>
<p>
&nbsp;<br />
Reiniciamos postgres<br />
<font class="comando"># /etc/init.d/postgresql restart</font><br />
Y abrimos sesión como usuario postgres<br />
<font class="comando"># su &#8211; postgres</font></p>
<p>Como usuario postgres verificamos la instalación de postgres:<br />
<font class="comando">$ psql -l</font></p>
<pre class="codigo">                               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)
</pre>
<p>
&nbsp;<br />
Creamos un usuario de PostgreSQL con contraseña para OpenERP<br />
<font class="comando">$ createuser &#8211;pwprompt</font></p>
<pre class="codigo">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
</pre>
<p>
&nbsp;<br />
Verificamos que podemos acceder con el usuario accediendo a la BD postgres<br />
(la BD de OpenERP la crearemos después en la instalación de OpenERP).<br />
<font class="comando">$ psql -U openerp -d postgres</font></p>
<pre class="codigo">Contraseña para usuario openerp:
psql (8.4.9)
Digite «help» para obtener ayuda.

postgres=> \q
</pre>
<p>
&nbsp;<br />
Cerramos la sesión del usuario postgres<br />
<font class="comando">$ exit</font></p>
<p>A no ser que solo estemos haciendo pruebas, es fundamental hacer <a href="http://guimi.net/blogs/hiparco/copias-de-seguridad-en-postgresql/">copias de seguridad de PostgreSQL</a>.</p>
<h2>INSTALACIÓN DE OPENERP-SERVER</h2>
<p>Creamos un usuario de sistema para la aplicación.<br />
<font class="comando"># adduser &#8211;system &#8211;home=/opt/openerp &#8211;group openerp</font><br />
El resto de la instalación lo haremos desde el nuevo directorio de OpenERP.<br />
<font class="comando"># cd /opt/openerp</font></p>
<p>Descargamos las fuentes desde <a href="http://www.openerp.com/downloads">http://www.openerp.com/downloads</a>.<br />
<font class="comando"># wget http://www.openerp.com/download/stable/source/openerp-server-6.0.3.tar.gz</font><br />
Descomprimimos los paquetes<br />
<font class="comando"># tar xfz openerp-server-6.0.3.tar.gz</font><br />
Limpiamos<br />
<font class="comando"># rm openerp-*gz</font><br />
Asignamos el usuario y grupo a todas las fuentes<br />
<font class="comando"># chown -R openerp:openerp *</font></p>
<p>Hacemos una copia del directorio. La idea es mantener en server y web la versión en producción y disponer de las fuentes en directorios separados para las pruebas y desarrollos.<br />
<font class="comando"># cp -Rp openerp-server-6.0.3 server</font></p>
<p>Configuramos el servidor (basta cambiar &#8216;********&#8217; por las claves que deseemos).<br />
[Fichero de <a href="http://www.theopensourcerer.com">theopensourcerer</a>]<br />
<font class="comando"># vi server/doc/openerp-server.conf</font></p>
<pre class="codigo">[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" <info@example.com>
;smtp_port = 25
;smtp_password = ********
;smtp_ssl = True
;smtp_server = mail.example.com
</pre>
<p>
&nbsp;<br />
Preparamos el directorio para los logs:<br />
<font class="comando"># mkdir /var/log/openerp<br />
# chown openerp:root /var/log/openerp</font></p>
<p>Copiamos el fichero de configuración al sistema y ajustamos los permisos.<br />
<font class="comando"># cp server/doc/openerp-server.conf /etc/<br />
# chown openerp:root /etc/openerp-server.conf<br />
# chmod 640 /etc/openerp-server.conf</font></p>
<p>Generamos un fichero para iniciar y parar el servidor.<br />
[Fichero de <a href="http://www.theopensourcerer.com">theopensourcerer</a>]<br />
<font class="comando"># vi openerp-server</font></p>
<pre class="codigo">#!/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 ] &#038;&#038; 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}" >&#038;2
                exit 1
                ;;
esac

exit 0
</pre>
<p>
&nbsp;<br />
Preparamos el fichero para que el servidor arranque normalmente.<br />
<font class="comando"># cp openerp-server /etc/init.d/<br />
# chmod 755 /etc/init.d/openerp-server<br />
# chown root: /etc/init.d/openerp-server<br />
# update-rc.d openerp-server defaults</font></p>
<p>Para acabar, iniciamos el sistema:<br />
<font class="comando"># /etc/init.d/openerp-server start</font><br />
Si todo ha ido bien el log nos dirá:<br />
<font class="comando"># cat /var/log/openerp/openerp-server.log</font></p>
<pre class="codigo">[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...
</pre>
<p>
&nbsp;<br />
Ahora, como hemos comentado al principio, el siguiente paso es <a href="http://guimi.net/blogs/hiparco/como-instalar-un-cliente-de-openerp-en-debian/">instalar un cliente de OpenERP en Debian</a>.<br />
Después debemos hacer una <a href="http://guimi.net/blogs/hiparco/configuracion-inicial-de-openerp/">configuración inicial de OpenERP</a>.<br />
Con eso ya estaremos listos para <a href="http://guimi.net/blogs/hiparco/instalar-en-openerp-los-modulos-de-la-localizacion-espanola/">Instalar en OpenERP los módulos de la localización española</a> 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.<br />
Para acabar esta serie veremos <a href="http://guimi.net/blogs/hiparco/como-configurar-la-localizacion-espanola-de-openerp/">cómo configurar la localización española de OpenERP</a> y <a href="http://guimi.net/blogs/hiparco/como-importarexportar-datos-en-openerp/">cómo importar/exportar datos en OpenERP</a>.</p>
<p><span class="keywords"><b>Instalación de OpenERP 6 en Debian GNU/Linux, OpenERP, Debian</b></span></p>
]]></content:encoded>
			<wfw:commentRss>http://guimi.net/blogs/hiparco/instalacion-de-openerp-6-0-3-en-debian-gnulinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurar juego de caracteres (charset) en LAMP (Linux, Apache, MySQL, PHP)</title>
		<link>http://guimi.net/blogs/hiparco/configurar-juego-de-caracteres-charset-en-lamp-linux-apache-mysql-php/</link>
		<comments>http://guimi.net/blogs/hiparco/configurar-juego-de-caracteres-charset-en-lamp-linux-apache-mysql-php/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 09:00:11 +0000</pubDate>
		<dc:creator>Güimi</dc:creator>
				<category><![CDATA[BBDD]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Software Libre]]></category>

		<guid isPermaLink="false">http://guimi.net/blogs/hiparco/?p=614</guid>
		<description><![CDATA[Instalamos los paquetes necesarios: # aptitude install apache2 mysql-server php5 Modificamos la configuraci&#243;n de apache: # vi /etc/apache2/conf.d/charset ... AddDefaultCharset UTF-8 ... Modificamos la configuraci&#243;n de PHP: # vi /etc/php5/apache2/php.ini ... default_charset = "utf8" ... En la cabecera de las p&#225;ginas indicar: ... &#60;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&#62; ... Y en los scripts PHP de [...]]]></description>
			<content:encoded><![CDATA[<p>Instalamos los paquetes necesarios:<br />
<font class="comando"># aptitude install apache2 mysql-server php5<br /></font><br />
Modificamos la configuraci&oacute;n de apache:<br />
<font class="comando"># vi /etc/apache2/conf.d/charset<br /></font></p>
<pre class="codigo">...
AddDefaultCharset       UTF-8
...
</pre>
<p>
Modificamos la configuraci&oacute;n de PHP:<br />
<font class="comando"># vi /etc/php5/apache2/php.ini<br /></font></p>
<pre class="codigo">...
default_charset = "utf8"
...
</pre>
<p>En la cabecera de las p&aacute;ginas indicar:</p>
<pre class="codigo">...
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
...
</pre>
<p>Y en los scripts PHP de conexi&oacute;n:</p>
<pre class="codigo">...
$sql_script("SET NAMES 'utf8'");
...
</pre>
<p>
Modificamos la configuraci&oacute;n de MySQL:<br />
<font class="comando"># vi /etc/mysql/my.cnf<br /></font></p>
<pre class="codigo">...
language    = /usr/share/mysql/spanish
...
</pre>
<p>
Y reiniciamos los servicios:<br />
<font class="comando"># /etc/init.d/apache2 restart<br />
# /etc/init.d/mysql restart<br /></font><br />
</p>
<p>En caso de tener una BB.DD. en otra codificaci&oacute;n como iso-8859-1, conviene exportarla a un fichero de texto, convertir el fichero con &#8220;<font class="comando">iconv bbdd.sql -f iso-8859-15 -t utf-8 -o bbdd_utf8.sql</font>&#8221; y volver a importarla.</p>
<p><span class="keywords"><b>juego de caracteres, charset, Linux, Apache, MySQL, PHP</b></span></p>
]]></content:encoded>
			<wfw:commentRss>http://guimi.net/blogs/hiparco/configurar-juego-de-caracteres-charset-en-lamp-linux-apache-mysql-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clave de root MySQL</title>
		<link>http://guimi.net/blogs/hiparco/clave-de-root-mysql/</link>
		<comments>http://guimi.net/blogs/hiparco/clave-de-root-mysql/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 08:56:08 +0000</pubDate>
		<dc:creator>Güimi</dc:creator>
				<category><![CDATA[BBDD]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[Software Libre]]></category>

		<guid isPermaLink="false">http://guimi.net/blogs/hiparco/?p=611</guid>
		<description><![CDATA[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 &#8216;new-password&#8217; # /etc/init.d/mysql stop # /etc/init.d/mysql start Opcional: # vi /root/.my.cnf [mysqladmin] user = root password [...]]]></description>
			<content:encoded><![CDATA[<p>Para poner o cambiar la clave de root de MySQL basta con:<br />
<font class="comando"># mysql -u root -D mysql<br /></font></p>
<pre class="codigo">
mysql> update user set password=password('mi_clave') where user='root';
mysql> quit
</pre>
<p><font class="comando"># /etc/init.d/mysql stop<br />
# /etc/init.d/mysql start<br /></font></p>
<p>Alternativamente:<br />
<font class="comando"># mysqladmin -u root password &#8216;new-password&#8217;<br />
# /etc/init.d/mysql stop<br />
# /etc/init.d/mysql start<br /></font></p>
<p>Opcional:<br />
<font class="comando"># vi /root/.my.cnf<br /></font></p>
<pre class="codigo">
[mysqladmin]
user            = root
password        = mi_clave
</pre>
<p><font class="comando"># chmod 0600 /root/.my.cnf<br /></font></p>
<p><span class="keywords"><b>clave, root, MySQL</b></span></p>
]]></content:encoded>
			<wfw:commentRss>http://guimi.net/blogs/hiparco/clave-de-root-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pasar datos de CSV a MySQL</title>
		<link>http://guimi.net/blogs/hiparco/pasar-datos-de-csv-a-mysql/</link>
		<comments>http://guimi.net/blogs/hiparco/pasar-datos-de-csv-a-mysql/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 14:01:48 +0000</pubDate>
		<dc:creator>Güimi</dc:creator>
				<category><![CDATA[BBDD]]></category>

		<guid isPermaLink="false">http://guimi.net/blogs/hiparco/?p=363</guid>
		<description><![CDATA[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&#8230;) 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 [...]]]></description>
			<content:encoded><![CDATA[<p>Si queremos pasar datos de una aplicación a otra, el formato más estándar es CSV.<br />
Así por ejemplo para pasar datos de una hoja de cálculo (OpenOffice Calc, Ms-Excell&#8230;) a MySQL podemos guardar la tabla como csv y después importarla en MySQL con los siguientes comandos:</p>
<pre class="codigo"><font class="comentario"># Primero hay que crear la tabla en la BBDD</font>
$ mysql -hSERVIDOR -uUSUARIO -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
[...]
mysql&gt; use BASE_DE_DATOS;

Database changed
<font class="comentario"># Indicar si los datos del fichero CSV están separados por coma, encerrados en comillas dobles o simples...</font>
mysql&gt; 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&gt; quit;
Bye
</pre>
<p>&nbsp;<br />
Quizá interese este artículo indicando como <a href="http://guimi.net/blogs/hiparco/pasar-de-access-a-mysql/">pasar de Ms-Access a MySQL</a>.<br />
&nbsp;</p>
<div class="keywords">CSV, MySQL, importar exportar datos</div>
]]></content:encoded>
			<wfw:commentRss>http://guimi.net/blogs/hiparco/pasar-datos-de-csv-a-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cuadrar cierre y apertura de ejercicio en AbanQ</title>
		<link>http://guimi.net/blogs/hiparco/cuadrar-cierre-y-apertura-de-ejercicio-en-abanq/</link>
		<comments>http://guimi.net/blogs/hiparco/cuadrar-cierre-y-apertura-de-ejercicio-en-abanq/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 17:51:35 +0000</pubDate>
		<dc:creator>Güimi</dc:creator>
				<category><![CDATA[BBDD]]></category>
		<category><![CDATA[Software Libre]]></category>

		<guid isPermaLink="false">http://guimi.net/blogs/hiparco/?p=301</guid>
		<description><![CDATA[AbanQ es un ERP publicado como Software Libre que funciona bastante bien regularcete para PyMES. Sin embargo 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 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://abanq.org/">AbanQ</a> es un ERP publicado como Software Libre que funciona <strike>bastante bien</strike> regularcete para PyMES.<br />
Sin embargo 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-.<br />
Esto ocurre porque algunas de las cuentas no tienen un código de balance asociado.</p>
<p>Para averiguar qué cuentas no tienen código de balance asociado basta hacer la siguiente consulta (por ejemplo usando pgAdmin III):</p>
<pre class="codigo">
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
</pre>
<p>
Consulta enviada por <a href="http://abanq.org/laboratorio/minibb/index.php?&#038;action=vthread&#038;forum=1&#038;topic=592&#038;page=0">Alberto García al foro de AbanQ</a>.<br />
&nbsp;<br />
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 &#8220;Códigos de balance 08&#8243; nos abre el formulario con los diferentes códigos de balance.<br />
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.</p>
<p>Por ejemplo se puede ver que el programa asocia inicialmente el código de balance &#8220;PG-A-7-a&#8221; con el grupo de cuentas &#8220;62&#8243;, por lo que podremos asociar las cuentas 62x en ese mismo código de balance.<br />
Para ello abrimos el código de balance &#8220;PG-A-7-a&#8221;, hacemos doble click e insertamos las cuentas 62x.</p>
<p>Una vez no queden cuentas sin código de balance asociado, el programa debe hacer correctamente el asiento de cierre y apertura (se recomienda tener ya creado el nuevo ejercicio para poder hacer esta apertura).<br />
&#8230;pero el siguiente año generará el mismo error!!<br />
Por eso lo ideal es realizar la consulta ANTES de hacer el cierre y apertura. Si no lo hemos hecho podemos borrar el nuevo ejercicio (si lo acabábamos de abrir) y lo regeneramos para que las cuentas &#8220;hereden&#8221; los códigos de balance.<br />
</p>
<div class="keywords"><b>abanq, cierre y apertura, códigos de balance</b></div>
]]></content:encoded>
			<wfw:commentRss>http://guimi.net/blogs/hiparco/cuadrar-cierre-y-apertura-de-ejercicio-en-abanq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pasar de Access a MySQL</title>
		<link>http://guimi.net/blogs/hiparco/pasar-de-access-a-mysql/</link>
		<comments>http://guimi.net/blogs/hiparco/pasar-de-access-a-mysql/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 12:21:24 +0000</pubDate>
		<dc:creator>Güimi</dc:creator>
				<category><![CDATA[BBDD]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Prompt]]></category>

		<guid isPermaLink="false">http://guimi.net/blogs/hiparco/?p=258</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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).<br />
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.<br />
Y dice así:</p>
<pre class="codigo">
<font class="comentario">#!/bin/bash
#
# vuelca_mdb 0.1 - GPL
# (c) Guimi
# http://guimi.net
#
# Ult. mod: Guimi 2009-07
#</font>

<font class="comentario"># DATOS DEL FICHERO MDB</font>
mdb=xxx.mdb
TABLA1=XXX
TABLA2=YYY

<font class="comentario"># DATOS DE MYSQL</font>
bbdd=xxx
usuario=xxx
clave=xxx

<font class="comentario"># FICHERO TEMPORAL</font>
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..."
<font class="comentario"># Hay que añadir "IF EXISTS" al "DROP TABLE"</font>
sed 's/DROP TABLE/DROP TABLE IF EXISTS/g' sql-creacion_mdb$$.sql > $tmp
<font class="comentario"># Hay que cambiar "Long Integer" por "Integer"</font>
sed 's/Long Integer/Integer/g' $tmp > sql-creacion_mdb$$.sql

<font class="comentario"># Hay que añadir un punto y coma ";" al final de cada linea -que acaba en ")"-</font>
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
</pre>
<p><o><br />
A continuación otros comandos que pueden ser utiles (proceden del paquete mdbtools).</p>
<p>Mostrar la versión del fichero mdb:<br />
<font class="comando">$ mdb-ver xxx.mdb</font></p>
<p>Mostrar las tablas de un fichero mdb (-1 para mostrar una tabla por fila):<br />
<font class="comando">$ mdb-tables -1 xxx.mdb</font></p>
<p>Generar un fichero C con un Array con los datos de una tabla:<br />
<font class="comando">$ mdb-array xxx.mdb TABLA</font><br />
</p>
<div class="keywords"><b>Access, mdb, mysql, script, prompt, Ms-Access, mdbtools</b></div>
]]></content:encoded>
			<wfw:commentRss>http://guimi.net/blogs/hiparco/pasar-de-access-a-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postgres en Debian GNU/Linux</title>
		<link>http://guimi.net/blogs/hiparco/postgres-en-debian-gnulinux/</link>
		<comments>http://guimi.net/blogs/hiparco/postgres-en-debian-gnulinux/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 14:12:49 +0000</pubDate>
		<dc:creator>Güimi</dc:creator>
				<category><![CDATA[BBDD]]></category>

		<guid isPermaLink="false">http://guimi.net/blogs/hiparco/?p=118</guid>
		<description><![CDATA[Instalamos postgres y un cliente gr&#225;fico: # aptitude install postgresql pgadmin3 &#160; 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 &#160; Para versiones de postgres a partir de la 8.0: # vi postgresql.conf listen_addresses='*' &#160; Creamos un nuevo usuario y una nueva BB.DD. [...]]]></description>
			<content:encoded><![CDATA[<p>Instalamos postgres y un cliente gr&aacute;fico:<br />
<font class="comando"># aptitude install postgresql pgadmin3<br /></font><br />
&nbsp;<br />
Configuramos el servidor para que acepte conexiones de red (opcional, recomendable):<br />
<font class="comando"># vi /etc/postgresql/7.4/main/postgresql.conf<br /></font></p>
<pre class="codigo">#tcpip_socket = false
tcpip_socket = true
</pre>
<p>&nbsp;<br />
Para versiones de postgres a partir de la 8.0:<br />
<font class="comando"># vi postgresql.conf<br /></font></p>
<pre class="codigo">listen_addresses='*'
</pre>
<p>&nbsp;<br />
Creamos un nuevo usuario y una nueva BB.DD. para trabajar con &eacute;l (opcional, recomendable):<br />
<font class="comando"># su &#8211; postgres<br /></font><br />
<font class="comando">$ id<br /></font></p>
<pre class="codigo">uid=112(postgres) gid=116(postgres) grupos=115(ssl-cert),116(postgres)
</pre>
<p><font class="comando">$ psql -l<br /></font></p>
<pre class="codigo">      Listado de base de datos
  Nombre   |  Due&ntilde;o   | Codificaci&oacute;n
-----------+----------+--------------
 template0 | postgres | UNICODE
 template1 | postgres | UNICODE
(2 filas)
</pre>
<p>Creamos el usuario e indicamos que nos solicite una contraseña:<br />
<font class="comando">$ createuser &#8211;pwprompt<br /></font></p>
<pre class="codigo">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
&iquest;Debe permit&iacute;rsele al usuario la creaci&oacute;n de bases de datos? (s/n) s
&iquest;Debe permit&iacute;rsele al usuario la creaci&oacute;n de otros usuario? (s/n) s
</pre>
<p>&nbsp;<br />
Creamos la BB.DD.:<br />
<font class="comando">$ createdb -O mi_usuario mi_bbdd<br /></font></p>
<pre class="codigo">CREATE DATABASE
</pre>
<p>&nbsp;<br />
Conectamos a la BB.DD. y, por enriquecer el ejemplo, cambiamos la clave al usuario:<br />
<font class="comando">$ psql -d mi_bbdd<br /></font></p>
<pre class="codigo">Bienvenido a psql 7.4.19, el terminal interactivo de PostgreSQL.

Digite:  \copyright para ver los t&eacute;rminos de distribuci&oacute;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
</pre>
<p>&nbsp;</p>
<p><span class="keywords"><b>Postgres en Debian GNU/Linux, Configurar Postgres en Linux, Instalar Postgres en Debian</b></span></p>
]]></content:encoded>
			<wfw:commentRss>http://guimi.net/blogs/hiparco/postgres-en-debian-gnulinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recuperar clave de root en MySQL</title>
		<link>http://guimi.net/blogs/hiparco/recuperar-clave-de-root-en-mysql/</link>
		<comments>http://guimi.net/blogs/hiparco/recuperar-clave-de-root-en-mysql/#comments</comments>
		<pubDate>Mon, 11 Jun 2007 12:17:18 +0000</pubDate>
		<dc:creator>Güimi</dc:creator>
				<category><![CDATA[BBDD]]></category>

		<guid isPermaLink="false">http://guimi.net/blogs/hiparco/?p=184</guid>
		<description><![CDATA[Cortar todo acceso al puerto 3306 (porque vamos a funcionar momentaneamente sin claves). Parar mysql /etc/init.d/mysql stop Lanzar mysql sin proteccion de permisos /usr/sbin/mysqld &#8211;skip-grant-tables Desde otra sesi&#243;n, conectar con mysql como root mysql -u root -D mysql Modificar la clave de root: update user set password=password(&#8216;clave_secreta&#8217;) where user=&#8217;root&#8217;; Paramos mysql: /usr/sbin/mysqld stop Lanzar mysql [...]]]></description>
			<content:encoded><![CDATA[<ol>
<li>Cortar todo acceso al puerto 3306 (porque vamos a funcionar momentaneamente sin claves).
<li>Parar mysql <i>/etc/init.d/mysql stop</i>
<li>Lanzar mysql sin proteccion de permisos <i>/usr/sbin/mysqld &#8211;skip-grant-tables</i>
<li>Desde otra sesi&oacute;n, conectar con mysql como root <i>mysql -u root -D mysql</i>
<li>Modificar la clave de root: <i>update user set password=password(&#8216;clave_secreta&#8217;) where user=&#8217;root&#8217;;</i>
<li>Paramos mysql: <i>/usr/sbin/mysqld stop</i>
<li>Lanzar mysql <i>/etc/init.d/mysql start</i>
<li>Dar de nuevo acceso al puerto 3306.
</ol>
<p>Ya est&aacute; cambiada. Ahora solo hay que volver a dar permisos de acceso y reiniciar el servicio.</p>
<p>
<span class="keywords"><b>Recuperar clave de root en MySQL, root password mysql</b></span></p>
]]></content:encoded>
			<wfw:commentRss>http://guimi.net/blogs/hiparco/recuperar-clave-de-root-en-mysql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

