Mostrando las entradas con la etiqueta mysql. Mostrar todas las entradas
Mostrando las entradas con la etiqueta mysql. Mostrar todas las entradas

30.4.09

Backup/dump y restore de MySQL comprimido

Una tarea frecuente para todo desarrollador o administrador es hacer copias de resguardo de MySQL para posteriormente restaurarlas. Generalmente se hace un dump y luego se comprime el archivo (siendo este texto plano y con muchos caracteres repetidos, suele comprimirse *mucho*). Vamos a hacerlo de un tiron con el siguiente comando:

$ mysqldump -h localhost -u usuario -p basededatos | gzip > basededatos-2009-04-30.sql.gz

En caso de querer restaurar el backup tenemos que hacer:

$ gunzip < basededatos-2009-04-30.sql.gz | mysql -h localhost -u usuario -p basededatos

En los ejemplos anteriores localhost simboliza al hostname de la base de datos, usuario al nombre de usuario que utilizaremos para conectarnos a MySQL, basededatos al nombre de la base de datos y basededatos-2009-04-30.sql.gz al archivo en donde vamos a guardar la copia de resguardo de la base de datos.

Si tienen instalados otros compresores, como bzip2 o lzma, pueden utilizarse de la misma manera (bzip2/bunzip2 y lzma/unlzma respectivamente).

13.1.09

Dump de MySQL con Stored Procedures

Vengo guardando cositas que estuve usando/encontrando ultimamente. Me encontre en la necesidad de hacer un dump de una base de datos MySQL que tenia stored procedures, pero 'mysqldump' no lo hace por defecto asi que hay que pasar el parameto '-R' de la siguiente manera:

mysqldump -R -h host -u username -p my_db > my_db.sql

Siend 'host' el hostname o direccion IP de la base de datos, 'username' el nombre de usuario y 'my_db' el nombre de nuestra base de datos.

Mas informacion en 4.5.4. mysqldump — A Database Backup Program

2.6.08

Generando ID unicos (UUID) en MySQL

La funcion UUID() de MySQL nos devuelve un Identificador Unico Universal que podemos utilizar como ID unico en nuestras aplicaciones.

Podemos probarlo ejecutando la siguiente consulta:

select uuid() as uid;

El resultado esta compuesto por 5 grupos de caracteres hexadecimales separados por un guion:


+--------------------------------------+
| uid |
+--------------------------------------+
| 107782ca-8250-102b-bae9-001a92ba7031 |
+--------------------------------------+


Si estan usando PHP pueden validar el UUID con la funcion ValidateMySqlUid();

Validando UUID de MySQL en PHP

Funcion de PHP para validar (regexp de fede) los IDs unicos generados por MySQL:
function ValidateMySqlUid($string) {
if (strlen($string) == 36) {
if (preg_match('/[0-9a-f]{8,8}-([0-9a-f]{4,4}-){3}[0-9a-f]{12,12}/', $string)) {
return true;
}
}
return false;
}

24.9.07

Eligiendo mal (bien) nombres de tablas y campos en MySQL

Durante el último desarrollo "grande" que estuve haciendo (un CMS) tuve un problema que me dieron ganas de golpearme cuando lo pude resolver. Elegí mal nombres de tablas y, luego, de campos, utilizando algunas de las palabras reservadas de MySQL. Con el posterior error de no renombrarlas ni bien me di cuenta de esto teniendo que escapar en las consultas algunas tablas y campos con "`".

Entre los nombres de tabla, use "schema" en donde la consulta:

SELECT * FROM schema;

Tiraba un error y, luego de insultar a medio mundo (un cuarto existente o otro cuarto no), me di cuenta que tenia que escapar la palabra reservada asi:

SELECT * FROM `schema`;

Aunque no afecta al funcionamiento de la aplicación que estamos desarrollando, si somos distraidos aveces podemos estar un rato hasta darnos cuenta que nos paso otra vez (si, aveces caigo en los mismos loops). Otro caso fue elegir como nombres de campo para definir el orden de elementos, el nombre "order".

A continuación, la lista de palabras reservadas para MySQL 5.0:




















































































ADD ALL ALTER
ANALYZE AND AS
ASC ASENSITIVE BEFORE
BETWEEN BIGINT BINARY
BLOB BOTH BY
CALL CASCADE CASE
CHANGE CHAR CHARACTER
CHECK COLLATE COLUMN
CONDITION CONSTRAINT CONTINUE
CONVERT CREATE CROSS
CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER CURSOR DATABASE
DATABASES DAY_HOUR DAY_MICROSECOND
DAY_MINUTE DAY_SECOND DEC
DECIMAL DECLARE DEFAULT
DELAYED DELETE DESC
DESCRIBE DETERMINISTIC DISTINCT
DISTINCTROW DIV DOUBLE
DROP DUAL EACH
ELSE ELSEIF ENCLOSED
ESCAPED EXISTS EXIT
EXPLAIN FALSE FETCH
FLOAT FLOAT4 FLOAT8
FOR FORCE FOREIGN
FROM FULLTEXT GRANT
GROUP HAVING HIGH_PRIORITY
HOUR_MICROSECOND HOUR_MINUTE
HOUR_SECOND
IF IGNORE IN
INDEX INFILE INNER
INOUT INSENSITIVE INSERT
INT INT1 INT2
INT3 INT4 INT8
INTEGER INTERVAL INTO
IS ITERATE JOIN
KEY KEYS KILL
LEADING LEAVE LEFT
LIKE LIMIT LINES
LOAD LOCALTIME LOCALTIMESTAMP
LOCK LONG LONGBLOB
LONGTEXT LOOP LOW_PRIORITY
MATCH MEDIUMBLOB MEDIUMINT
MEDIUMTEXT MIDDLEINT MINUTE_MICROSECOND
MINUTE_SECOND MOD MODIFIES
NATURAL NOT NO_WRITE_TO_BINLOG
NULL NUMERIC ON
OPTIMIZE OPTION OPTIONALLY
OR ORDER OUT
OUTER OUTFILE PRECISION
PRIMARY PROCEDURE PURGE
READ READS REAL
REFERENCES REGEXP RELEASE
RENAME REPEAT REPLACE
REQUIRE RESTRICT RETURN
REVOKE RIGHT RLIKE
SCHEMA SCHEMAS SECOND_MICROSECOND
SELECT SENSITIVE SEPARATOR
SET SHOW SMALLINT
SONAME SPATIAL SPECIFIC
SQL SQLEXCEPTION SQLSTATE
SQLWARNING SQL_BIG_RESULT
SQL_CALC_FOUND_ROWS
SQL_SMALL_RESULT SSL STARTING
STRAIGHT_JOIN TABLE TERMINATED
THEN TINYBLOB TINYINT
TINYTEXT TO TRAILING
TRIGGER TRUE UNDO
UNION UNIQUE UNLOCK
UNSIGNED UPDATE USAGE
USE USING UTC_DATE
UTC_TIME UTC_TIMESTAMP VALUES
VARBINARY VARCHAR VARCHARACTER
VARYING WHEN WHERE
WHILE WITH WRITE
XOR YEAR_MONTH ZEROFILL
ASENSITIVE CALL CONDITION
CONTINUE CURSOR DECLARE
DETERMINISTIC EACH ELSEIF
EXIT FETCH INOUT
INSENSITIVE ITERATE LEAVE
LOOP MODIFIES OUT
READS RELEASE REPEAT
RETURN SCHEMA SCHEMAS
SENSITIVE SPECIFIC SQL
SQLEXCEPTION SQLSTATE SQLWARNING
TRIGGER UNDO WHILE