Importar Base de Datos MySQL desde archivos de datos / Import MySQL Database from Data Files


Puede suceder que no podamos acceder a una base de datos MySQL porque no tenemos acceso por sistema operativo como para hacer un mysqldump.

Comunmente se rompe un disco, y el sistema ya no bootea, pero podemos acceder a algunos archivos del disco colocándolo como esclavo.

Ante esta situación, podremos colocar nuevamente la base de datos en funcionamiento copiando los archivos de datos de la base de datos en el directorio que utiliza mysql.

1) Detenemos el motor

# service mysqld stop

2) Copiamos los archivos de datos de la base de datos al directorio del motor

# cp -r /tmp/dbcafe /var/lib/mysql

3) Reasignamos los permisos

# chown -R mysql:mysql /var/lib/mysql/dbcafe/

4) Iniciamos nuevamente el motor

# service mysqld start

 

MySQL: resetting root password


Dato muy interesante para cuando perdemos la password de root de una base de datos MySQL (gracias Cameron):

1) Detenemos el servicio mysqld y restarteamos con la opción –skip-grant-tables. Opcionalmente podemos añadir la opción –skip-networking para evitar la conección de clientes remotos.

# service mysqld stop
# mysqld_safe --skip-grant-tables&

2) Conectamos al servidor por consola:

# mysql

3) Ejecutamos la siguiente sentencia:

mysql> update mysql.user set password=PASSWORD('nuevapassword') where user='root';
mysql> flush privileges;

La sentencia flush le dice al servidor que vuelva a cargar en memoria las grant tables a fin de notificarse del cambio de password.

Luego detenemos el servicio y lo volvemos a inciar normalmente.

# service mysqld stop
# service mysql start

 

mysql: reparar tabla por consola / repair table from command line


Para checkear o reparar tablas de mysql por consola, debemos primero ingresar a la base de datos en cuestión:

[factura@localhost ~]$ mysql -uusuario -ppassusuario
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.0.37 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use dbclientes;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

Luego, podemos hacer un check sobre una tabla específica:

mysql> check table temp_ventas;
+------------------+-------+----------+------------------------------------------------------------------------+
| Table            | Op    | Msg_type | Msg_text                                                               |
+------------------+-------+----------+------------------------------------------------------------------------+
| temp_ventas      | check | error    | Table 'temp_ventas' is marked as crashed and should be repaired        | 
+------------------+-------+----------+------------------------------------------------------------------------+
1 row in set (0.00 sec)

y con un resultado como este, realizar un repair:

mysql> repair table temp_ventas;
+------------------+--------+----------+--------------------------------------+
| Table            | Op     | Msg_type | Msg_text                             |
+------------------+--------+----------+--------------------------------------+
|      temp_ventas | repair | warning  | Number of rows changed from 13 to 14 | 
|      temp_ventas | repair | status   | OK                                   | 
+------------------+--------+----------+--------------------------------------+
2 rows in set (0.03 sec)

Cambiar Autoincremento en tabla de Mysql / How to change Auto Increment counter


Seguramente nos ha pasado mas de una vez que ante un corte imprevisto de energía, algunas tablas que tienen definida una clave con autoincremento, al almacenar el ultimo valor, no cambió el contador de autoincremento en la definición de la tabla. Por lo tanto, al intentar grabar un registro nuevo, nos da error de clave duplicada.

Podemos solucionar esto por consola:

Primero veamos cual es el maximo valor almacenado de la clave en dicha tabla:

mysql> select max(id) from movimientos;
+------------------------+
| max(id) |
+------------------------+
|                 116907 |
+------------------------+
1 row in set (0.00 sec)

Luego hacemos un solemne ALTER sumando 1 al resultado de la consulta anterior:

mysql> alter table movimientos AUTO_INCREMENT=116908;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

 

SQL: Concatenate several strings from a column into a single string


The problem:

We may have several records belonging to a column or field that we want to concatenate and display in a single string. Something like this:

description
===========
value1
value2
value3

and we want to get something like this:

value1, value2, value3

that is, as if we had to transpose the column, but without complicating ourselves.

The solution is:

DECLARE @values VARCHAR(1000)
SELECT @values= COALESCE(@values + ', ', '') + description FROM folders
select @values as values

The magic is done by the COALESCE command that returns the expression that does not contain the NULL value among its arguments.

NOTE: This solution is valid only if no row is NULL.

OpenUpload: Instalando tu propio servidor de descargas


OpenUpload es ideal para tener en tu propio servidor toda la funcionalidad de un servidor de descargas similar a YouSenIt, MegaUpload or RapidShare.

La instalación es bastante simple en Fedora/CentOS/RedHat:

1) descargamos el paquete de instalación desde sourceforge.

2) decomprimimos y copiamos a nuestro www:

# tar -zxvf openupload-0.4.2.tar.gz
# mv openupload-0.4.2 /var/www/html/openupload

3) Editamos la configuración de nuestro archivo config.inc.php.sample:

vi /var/www/html/openupload/www/config.inc.php.sample

Modificando basicamente las siguiente entradas:

/* Define the installation folder */
$CONFIG['INSTALL_ROOT']='/var/www/html/openupload';

/* define http:// address */
$CONFIG['WWW_SERVER']='http://www.hvivani.com.ar';
/* define the additional web path i.e. /openupload */
$CONFIG['WWW_ROOT']='/openupload/www';

/* Detail for dbconnection */
$CONFIG['database']['host']='localhost';
$CONFIG['database']['user']='useropenupload';
$CONFIG['database']['password']='passopenupload';
$CONFIG['database']['name']='openupload';

Guardamos la configuración en este archivo y lo renombramos:

mv /var/www/html/openupload/www/config.inc.php.example /var/www/html/openupload/www/config.inc.php

4) Ahora configuramos la base de datos, recordando que php-mysql tiene que estar instalado.

# mysql -uroot
create database openupload;
grant all privileges on openupload.* to openupload@localhost ideintified by 'passopenupload';

Importamos los esquemas configurando el servidor para uso privado:

mysql openupload -u openupload -p passopenupload< sql/mysql/1_structure.sql
mysql openupload -u openupload -p passopenupload< sql/mysql/2_base.sql
mysql openupload -u openupload -p passopenupload< sql/mysql/3_mode_private.sql

En este paso, para otros modos de uso como público, restringido u otros importamos la estructura de base de datos que corresponda en vez del 3_mode_restricted.

Con esto ya estamos listos para apuntar nuestro navegador a http://localhost/openuploade ingresar con usuario admin, passwd admin.

Aquí tenemos los archivos para agregar el idioma español que no viene por default.

MySql change root password


Es importante establecer la password de root de mysql antes de comenzar a utilizar el este motor de base de datos, mas aún si se va a utilizar para almacenar información de sitios web.

Para establecer la password de root de un servidor mysql, podemos hacerlo por consola con el siguiente comando:

$ mysqladmin -u root password XXXXX

Ahora, si lo que queremos es cambiar la password de root del mysql:

$ mysqladmin -u root -p'viejapassword' password newpassword

De la misma manera podemos cambiar la  password de root para otros usuarios:

$ mysqladmin -u hernan -p viejapassword password newpassword

 

Configurar autenticación mysql en ejabberd – ejabberd mysql auth


Si tienen un servidor jabber funcionando, es muy probable que tarde o temprano tengan que cambiar el modo de autenticación por mysql.

Para esto debemos tener instalado el Erlang Sql Native Driver, que lo podemos descargar desde aquí Erlang Mysql Driver.

En el Mysql creamos el usuario ejabberd :

$ mysql -h localhost -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.16-max

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> GRANT ALL ON ejabberd.* TO ‘ejabberd’@’localhost’ IDENTIFIED BY ‘password’;
Query OK, 0 rows affected (0.00 sec)

Creamos la base de datos ejabberd :

$ mysql -h localhost -u ejabberd
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.1.16-max

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> CREATE DATABASE ejabberd;
Query OK, 1 row affected (0.00 sec)

Descargamos el schema (puede descargarse desde otros servidores):

$ wget https://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/src/odbc/mysql.sql

Importamos el schema en la base ejabberd:

$ mysql -D ejabberd -h localhost -p -u ejabberd < mysql.sql

Chequeamos la estructura de tablas en la base ejabberd:

$ echo “show tables;” | mysql -D ejabberd -h localhost -p -u ejabberd

Tables_in_ejabberd
last
privacy_default_list
privacy_list
privacy_list_data
private_storage
pubsub_item
pubsub_node
pubsub_node_option
pubsub_node_owner
pubsub_state
pubsub_subscription_opt
rostergroups
rosterusers
roster_version
spool
users
vcard
vcard_search

Ahora en el /etc/ejabberd/ejabberd.cfg modificamos la siguiente configuración (si instalaron el ejabberd desde los fuentes, el cfg puede estar en /opt/ejabberd/etc/):

Comentamos la siguiente línea:

{auth_method, internal}.

Agregamos las siguientes líneas:

{auth_method, odbc}.
{odbc_server, {mysql, “localhost”, “ejabberd”, “ejabberd”, “password”}}.

La configuración del mysql tiene el siguiente formato:

{mysql, Server, DB, Username, Password}

Adicionalmente cambiamos la siguiente configuración:

mod_last a mod_last_odbc

mod_offline a mod_offline_odbc (almacena mensajes offline en el mysql)

mod_roster a mod_roster_odbc (almacena lista de contactos en el mysql)

mod_private a mod_private_odbc

mod_privacy a mod_privacy_odbc

mod_pubsub a mod_pubsub_odbc

mod_vcard a mod_vcard_odbc (almacena descripcion de usuarios en mysql)

Restarteamos el ejabberd por las dudas:

# service ejabberd restart

Con esto cambios tendremos al ejabberd autenticando contra una base de datos mysql.

Como el metodo de conexión es por odbc, es posible aplicarlo a otros motores de base de datos como por ejemplo SQL Server.

Si alguien lo probó con SQL Server puede decirme como les fué…