Mostrando entradas con la etiqueta Centos - Mysql. Mostrar todas las entradas
Mostrando entradas con la etiqueta Centos - Mysql. Mostrar todas las entradas

sábado, septiembre 26, 2015

CENTOS7 instalar Mysql-Community

Es importante mantener el tema de mysql, por tradicion, de hecho existe hoy en esta distribucion de Linux Centos se instala por omision con MARIADB, pero porque algunos todavia tenemos aplicaciones en Mysql resulta necesario poder tener esta posibilidad.

URL de Referencia: Instalar Mysql en Centos7

sábado, noviembre 15, 2014

Cómo hacer un Procedimiento Almacenado en MySQL sin morir en el intento

Antes de escribir un sólo comando les recomiendo ampliamente instalar el MySQL Workbench no saben el dolor de cabeza que les quitará su validador (me lo agradecerán de por vida), lo pueden descargar de aquí.
Pues bien, lo primero que explicaré será el comando DROP PROCEDURE IF EXISTS, este comando sirve para eliminar el PA si previamente existe (NOTA: este debe ser agregado antes del DELIMETER), esto es útil por ejemplo cuando estamos modificando nuestro PA y necesitamos estar actualizandolo constantemente, la sintaxis sería así:
  1. DROP PROCEDURE IF EXISTS myProcedure;
Bien, una vez visto eso, el siguiente comando que veremos será el DELIMETER, se refiere a escribir un delimitador para nuestras consultas SQL, este delimitador se debe específicar cuando vamos a tener varias consultas dentro de nuestro PA para decirle a MySQL que todo lo que este dentro de ese delimitador formará parte de ese PA, tu puedes elegir cualquier delimitador, pero entre los más comunes están:
  1. DELIMETER //
  2. ....
  3. //
O bien:
  1. DELIMETER $$
  2. ....
  3. $$
Después de escribir nuestro delimitador, vamos a crear nuestro PA con el comando CREATE PROCEDURE, cuya sintaxis debe ser así:
  1. CREATE PROCEDURE myProcedure({[PARAMS]})
  2. BEGIN
  3. ....
  4. END
Sin duda muchos verán que esto es similar a cuando programabas en Pascal o un lenguaje prehístorico dónde tenías que específicar los bloques de INICIO y FIN, y los parámetros aquí son opcionales.

Parámetros

Cuando creamos un nuevo PA los parámetros son opcionales y sin duda estos son de gran ayuda cuando necesitamos pasar algunos valores, la forma de específicar estos parámetros es la siguiente:
  1. CREATE PROCEDURE myProcedure(
  2. IN _language VARCHAR(2),
  3. IN _page INT,
  4. IN _max INT)
  5. BEGIN
  6. ....
  7. END
Cuando son muchos parámetros una buena técnica de separación y para poder ordenar y ver mejor los parámetros es dar un enter a cada uno y separarlos por comas (,). La sintaxis para estos parámetros es simplemente escribir el comando IN seguido del nombre del parámetro (recomiendo poner guiones bajos al principio de cada parámetro, leer la explicación en el siguiente párrafo) y después específicar su tipo (INT, VARCHAR, TINYINT, etc.).

Declaración de variables

Cuando creamos un PA en MySQL esté nos permite crear variables para poder asignarles algún valor e inclusive hacer ciertas validaciones, para declarar una variable se debe utilizar el comando DECLARE, una recomendación personal es que todas las variables que vayas a crear en tu PA les antepongas un guión bajo (_) y además utilices la técnica de camelCase, esto se debe a que muchas veces utilizamos variables con nombres genéricos que pudieran ser palabras reservadas de MySQL y esto nos puede causar problemas sin que nos demos cuenta en un principio y es muy complicado encontrarlos, por ejemplo si declaramos la variable "status", nos puede causar conflicto puesto que STATUS es una palabra reservada que utiliza MySQL como comando, en este caso para ver los PAs existentes con SHOW PROCEDURE STATUS, este caso lo mejor sería declararla como "_status" y nos libramos de problemas, unos ejemplos de variables serían:
  1. DECLARE _start INT DEFAULT 0;
  2. DECLARE _limit1 INT DEFAULT 0;
  3. DECLARE _limit2 INT DEFAULT 0;
  4. DECLARE _language VARCHAR(2) DEFAULT 'en';
Una vez que hemos declarado nuestras variables si necesitamos asignarle algún valor diferente en algún punto de nuestro código podemos utilizar el comando SET, de la siguiente manera:
  1. IF _page > 0 THEN
  2. SET _limit1 = _page * _max - _max;
  3. END IF;

Comparaciones IF... THEN ... ELSE ... END IF

Cómo en todo lenguaje hay veces que necesitamos hacer bifurcaciones a nuestros códigos y tomar caminos distintos dependiendo de la situación, pues en MySQL tenemos la posibilidad de utilizar los IFs al crear nuestros PAs, aunque sin duda se utilizan un poco de manera un poco "rudimentaria" y me recuerda a Pascal sin duda alguna, pero bueno aquí te dejo algunos bloques de IFs que puedes utilizar.
  1. IF _variable1 > 0 AND _variable2 == 1 THEN
  2. ....
  3. END IF;
  1. IF _variable1 > 0 OR _variable2 == 1 THEN
  2. ....
  3. ELSE
  4. ....
  5. END IF;
  1. IF _variable1 == 0 OR _variable2 == 1 THEN
  2. ....
  3. ELSE
  4. IF _variable1 <> 5 THEN
  5. ....
  6. END IF;
  7. END IF;

Selects

Los SELECT en MySQL normalmente los utilizamos para "seleccionar" ciertos campos y hacer ciertas condiciones para que nos regresen ciertos registros dentro de X tabla. Aunque en un PA sirven para lo mismo también tienen otra funcionalidad y es la de "regresar" los valores seleccionados como resultados (es decir, como que si fueran un RETURN de una función, cabe destacar que con PA no se puede utilizar RETURN).
No tan sólo sirve para "Seleccionar" registros de una db, también sirve para "Seleccionar" una variable o ciertos valores que queramos enviar "de regreso cómo resultado".
Un claro ejemplo es cuando tenemos la necesidad de hacer un "debug" a nuestros PA, la manera más fácil de hacerlo es crear un PA llamado debug, de la siguiente manera:
  1. DELIMITER $$
  2. CREATE PROCEDURE debug(msg VARCHAR(255))
  3. BEGIN
  4. SELECT CONCAT("*** ", msg) AS '*** DEBUG:';
  5. END $$
  6. DELIMITER
En el PA debug, recibimos cómo parámetro un "mensaje" o texto el cual enviaremos cuando queramos "debuggear" algún valor o variable de otro PA. La función CONCAT cómo su nombre lo indica sirve para concatenar una cadena con otra, en este caso concatenar los *** con el mensaje, y esto para que podamos identificar fácilemente el mensaje de debug que nos regresa, en otro PA, se puede utilizar simplemente mandandolo a llamar de la siguiente manera:
  1. DROP PROCEDURE IF EXISTS getPosts;
  2.  
  3. DELIMITER $$
  4.  
  5. CREATE PROCEDURE getPosts(
  6. IN _language VARCHAR(2),
  7. IN _page INT,
  8. IN _max INT)
  9. BEGIN
  10. DECLARE _start INT DEFAULT 0;
  11. DECLARE _limit1 INT DEFAULT 0;
  12. DECLARE _limit2 INT DEFAULT 0;
  13.  
  14. SET _limit1 = 0;
  15. SET _limit2 = _max;
  16.  
  17. CALL debug(_limit2);
  18. END $$
  19. DELIMITER ;
De esa manera podremos saber que valor tiene la variable "_limit2", y ese valor lo podremos ver en nuestro resultset cuando ejecutemos nuestro PA.
Regresando un poco al tema de los SELECT, cómo decía, en un PA podemos tener tantos SELECT cómo queramos y cada uno nos regresará un resultset, quiere decir, supongamos que usamos PHP para llamar ese PA, normalmente cuando hacemos una consulta "sencilla" en PHP nos regresa los valores en una matriz algo tipo:
  1. [0] => Array([0] => ["Campo"] => valor);
Pero cuando mandamos 2 ResultSets, en este caso el del Debug y el de los valores, recibiremos algo así (espero se entienda la idea):
  1. [0] => Array([0] => ["**Debug:"] => 'EL MENSAJE DEL DEBUG'); // Debug resultset
  2. [1] => Array([0] => ["Campo"] => valor); // Valores resultset
Cómo último consejo les digo que la clausula LIMIT solamente acepta valores de tipo INT divididos en 2 variables, por eso ven las variables _limit1 y _limit2, en un principio yo intentaba hacerlo concatenando los valores en un string tipo "0, 12", pero jamás resulto, es un buen tip que les puede servir, y bueno aquí les dejo el PA que hice ayer y espero les pueda servir un poco cómo ejemplo, es para obtener los posts de un blog, los veo en la siguiente publicación, saludos. No olviden escribir sus dudas en los comentarios.
  1. DROP PROCEDURE IF EXISTS getPostsByCategory;
  2.  
  3. DELIMITER $$
  4.  
  5. CREATE PROCEDURE getPostsByCategory(
  6. IN _category VARCHAR(100),
  7. IN _language VARCHAR(2),
  8. IN _page INT,
  9. IN _max INT)
  10. BEGIN
  11. DECLARE _start INT DEFAULT 0;
  12. DECLARE _limit1 INT DEFAULT 0;
  13. DECLARE _limit2 INT DEFAULT 0;
  14.  
  15. SET _limit1 = 0;
  16. SET _limit2 = _max;
  17.  
  18. IF _page > 0 THEN
  19. SET _limit1 = _page * _max - _max;
  20. END IF;
  21.  
  22. SELECT COUNT(1) AS total
  23. FROM (
  24. SELECT blog_posts.id FROM blog_posts
  25. LEFT JOIN blog_re_categories2posts ON (blog_re_categories2posts.postId = blog_posts.id)
  26. LEFT JOIN blog_categories ON (blog_categories.id = blog_re_categories2posts.categoryId)
  27. WHERE blog_categories.slug = _category
  28. GROUP BY blog_posts.id
  29. ) AS Result;
  30.  
  31. SELECT title, blog_posts.slug, excerpt, content, author, mainImage, createdAt, day, month, year, blog_posts.language, GROUP_CONCAT(blog_categories.category SEPARATOR ', ') AS categories
  32. FROM blog_posts
  33. LEFT JOIN blog_re_categories2posts ON (blog_re_categories2posts.postId = blog_posts.id)
  34. LEFT JOIN blog_categories ON (blog_categories.id = blog_re_categories2posts.categoryId)
  35. WHERE blog_categories.slug = _category
  36. AND blog_posts.language = _language
  37. AND blog_categories.language = _language
  38. AND blog_posts.situation = 'Published'
  39. GROUP BY blog_posts.id
  40. ORDER BY blog_posts.id DESC
  41. LIMIT _limit1, _limit2;
  42. END $$
  43. DELIMITER ;
Para mandar a llamar los PA simplemente se utiliza el comando CALL en nuestra query.
  1. CALL myProcedure(1, 2, 'Valor string', 3);
  2.  
  3. // En PHP sería algo tipo:
  4.  
  5. $query = mysqli_query("CALL myProcedure(1, 2, 'Valor string', 3)");
- See more at: http://www.codejobs.biz/es/blog/2014/07/09/como-hacer-un-procedimiento-almacenado-en-mysql-sin-morir-en-el-intento#sthash.6X4pBcKv.eSPatRJj.dpuf

martes, agosto 13, 2013

Iseries Db2 A Mysql con Migration Toolkit

Una de las tareas recurrentes a la que nos enfrentamos quienes estamos dedicados al desarrollo de sistemas o a la administración de bases de datos es la migración de información entre difrentes o iguales SGBD.  Actualmente, cada motor de base de datos ofrece en mayor o menor medida, herramientas que facilitan estas tareas. En este artículo trataré el caso de Mysql que incluye  en su paquete de instalación un programa destinado a migrar datos desde cualquier motor que proporcione una interfaz de conexión JBDC.
Que necesitaremos?
Bueno, antes de iniciar con el proceso será necesario que tengas instalado en tu equipo lo siguiente:
  • Mysql Gui Tools.  Esto lo puedes descargar desde la página de mysql en http://www.mysql.com/
  • Mysql Migration Toolkit. Este programa está incluido en las Gui Tools y lo podrás encontrar en el menú Inicio / Programas / Mysql
  • IBM Iseries Access for Windows.  Esto lo puedes descargar de la página de IBM
  • También tendrás que tener instalado el JDK de java pues la comunicación será a través de JBDC
Para el artículo quiero suponer que ya  sabes como instalar las herramientas de conexión por lo que me enfocaré al proceso de migración.
 Lo primero que tendremos que hacer es copiar los .jar  de IBM que nos permitirán comunicarnos con Iseries. Para ello, dependiendo de tu sistema operativo, iremos a la carpeta de instalación del client access que en mi caso es:  C:\Program Files\IBM\Client Access  Luego buscaremos la ruta jt400 y entraremos a lib.  La ruta de acceso completa es: C:\Program Files\IBM\Client Access\jt400\lib. Una vez que hemos llegado a este directorio vamos a seleccionar los siguientes archivos de extensión Jar:
  • jt400.jar
  • jt400Servlet.jar
  • jui400.jar
  • uitools.jar
  • util400.jar
  • x4j400.jar
y los copiaremos al directorio Java / Lib del directorio de instalación de las Gui Tools de Mysql. En mi caso este directorio es: C:\Program Files\MySQL\MySQL Tools for 5.0\java\lib.  Muy bien, hecho lo anterior, hemos incluido el soporte para comunicarnos a Iseries Db2.
Ahora. ejecutaremos el programa “Mysql Migration ToolKit” que está en Inicio / Programas / Mysql  la pantalla inicial que veremos es la siguiente:
 


  Esta pantalla es muy importante  pues nos permite saber si el programa cuenta con los requerimientos mínimos para ejecutarse. Como podemos observar en la imagen a la izquierda, tanto el Java Loader como el entorno de ejecución deben encontrarse inicializados.
Hecho esto presionamos el botón “Next” para continuar a la pantalla “configuration type”



Aquí nos aparecerán dos opciones. Para el caso que nos ocupa seleccionaremos “Direct Migration”


Después presionaremos “Next” para continuar con el proceso.  El programa nos mostrará la pantalla “Source Database”. Es en esta pantalla donde estableceremos la configuración del origen de datos.  


Al dar click en Database System,  veremos que el programa soporta la migración por default de orígenes tan diversos como SqlServer, Oracle, Sybase, Etc. Para casos como el de DB2 que no está contemplado por defecto, tendremos que seleccionar “Generic Jdbc”.  Seleccionado esto nos aparecerá en la parte inferior de la ventana , el cuadro de configuración de la conexión.

La información que deberemos capturar es la siguiente:
  • Class Name: Es el nombre de la clase java a usar para conectarnos a Iseries. El valor a capturar es: com.ibm.as400.access.AS400JDBCDriver
  • Connection String: La cadena de conexión que se compone de jdbc:<clase>://<dsn o ip del servidor iseries>>/<instancia>;libraries:<Base de datos o schema>;socket timeout=3000000;thread used=false Quedando en mi caso de la siguiente manera: jdbc:as400://DNSNOMBSERVIDOR/NOMBLIB;libraries=MIDATABASE;socket timeout=3000000;thread used=false
  • Username: Nombre de usuario
  • Password: Password de acceso.
Como ejemplo:
  • Class Name: com.ibm.as400.access.AS400JDBCDriver
  • Connection String: jdbc: as400://192.168.200.5/SEGURI;libraries=SEGURI;socket timeout=3000000;thread used=false
  • User Name: Usuario
  • Password: Password
Ya que hemos capturado la información de conexión presionaremos “Next” para dirigirnos a la siguiente pantalla donde configuraremos la conexión al servidor de base de datos destino.

 Ya que la base de datos destino es el propio mysql, la configuración nos va a resultar familiar pues solo deberemos indicar ip del servidor, nombre de usuario y contraseña.  Presionamos ”Next” para continuar a la siguiente pantalla, donde, si hemos configurado correctamente nuestras conexiones nos mostrará la siguiente información.

 Hasta este punto solo hemos configurado la conexión entre mysql y Db2 por lo que al presionar el botón “Next” comenzaremos a configurar tanto el origen como el destino de los datos a migrar. La pantalla  que nos aparece “Source schemadata selection” nos muestra los schemas del servidor de base de datos y nos pide seleccionemos del cuál queremos migrar datos.

Seleccionamos el schema del que deseamos migrar información y presionamos siguiente.
La pantalla inicia el proceso de ingeniería inversa para obtener la información de objetos en el schema seleccionado.  Una vez que ha finalizado el análisis presionamos “Next”


En esta pantalla el programa nos muestra el total de objetos que ha encontrado en el schema seleccionado.

Si el objetivo es migrar el total de tablas encontradas da click en “Next” para continuar con el siguiente paso. De otra manera tendrás que dar click en “Detailed selection” para elegir la o tablas a migrar.

Como podemos ver en la pantalla previa, se nos muestra el contenido del schema seleccionado donde podemos elegir la tabla o tablas a migrar. Presionamos “Next” para continuar.
En esta nueva pantalla tendremos que establecer las opciones de migración tanto para el origen como para el destino. Si no tienes mucha experiencia con los Engines de mysql así como el collation te recomiendo que intentes la migración con los valores por default.




Presionamos “Next” para continuar. y el programa comenzará a generar el bloque de sentencias DDL para la migración de datos. Una vez que haya finalizado presionamos ”Next” 





Si todo es correcto, nos dará un mensaje indicándonos que el mapeo se ha realizado correctamente. Presionamos siguiente.




En esta parte del asistente podemos elegir entre crear los objetos al vuelo o, si queremos verificar la definición de nuestros campos generar el script con todo el bloque de sentencias DDL para la migración. Seleccionamos la creación OnLine y presionamos “Next”




En este momento se comenzarán a crear los objetos seleccionados para su migración. Al finalizar el proceso podremos ver el resultado. Presionamos “Next” al ver que todo va bien en este punto.

 

El programa nos confirma que todo va bien. Aquí es importante mencionar que de ocurrir algún error en la creación de los objetos, se nos mostrará los problemas al seleccionar el filtro: “Show create problems”. Presionaremos “Next”




Una vez creadas las tablas que migraremos, procederemos a definir la manera en que el contenido será transferido a mysql. Podemos, como en el caso del metadata hacerlo al vuelo u online, o generar el script de migración para su análisis y revisión. En este caso hemos elegido OnLine. Presionamos Next




Hecho lo anterior, el programa comenzará el proceso de transferencia de datos desde Iseries Db2 hasta Mysql. De ser satisfactoria la transferencia, el programa nos lo indicará con un mensaje de éxito.

Y ahora prácticamente hemos terminado con el proceso de migración desde Db2 Iseries a Mysql.  El sistema en la pantalla que le sigue a la anterior nos mostrará un resumen del proceso de migración donde además de conocer el número y tipo de objetos migrados, también podremos ver el resultado de cualquier error ocurrido durante el proceso. Aquí la pantalla de resumen y la vista de la tabla migrada a Mysql:

 





Como pueden ver, migrar información a Mysql desde DB2, Oracle, Access, Ms Sql o cualquier motor que soporte conectividad JDBC es muy sencillo.
Tomado de: Articulo original

jueves, abril 18, 2013

CENTOS comando Copy.

Algunos trucos:

Copiar un archivos sin confirmar la sobre escritura usando comando yes.
yes | cp -Rf * /home/macropro/E_fe01
 
(esta es una solucion "desesperada" pero funciona!)

En centos pide confirmacion  porque por default hay un alias:
 
cp='cp -i'

Para quitarlo:
 
unalias cp 
 
unalias elimina el alias de cp que pide confirmación

Otra opcion para no eliminar el alias es encerrar entre apóstrofes, esto usa el
comando tal cual sin alias, con la ventaja que el alias se
mantiene para uso posteriores Ej:
 
 'cp' archivo /haciadonde/archivo 
 
 'cp' -rf /RutaOrigen/* /RutaDestino/

martes, abril 16, 2013

MySQL Error 1153 - Obtenido un paquete mayor que 'max_allowed_packet bytes'

Se debe cambiar en  my.ini (En Windows,  c:\Program Files\MySQL\MySQL Server / En Linux etc/my.cnf)  dentro de la seccion:

[mysqld]
max_allowed_packet = 10MB
 
 
O tambien ejecutar de la siguiente en lineas de Comandos:
  
mysql --max_allowed_packet=100M -u root -p database < dump.sql

Can't contact the database server: Can't connect to MySQL server on (13)

Al momento de instalar MEDIAWIKI 1.20.4, en Centos, pero la particularidad es que tenemos en otro servidor exclusivamente para servidores de base de datos, debido a ello me reporta el error:

Can’t connect to MySQL server on… (13)

Revisando todas las alternativas:
  •  He hecho todas las configuraciones MySQL en PHP, pero mi solicitud estaba lanzando un "no se puede conectar al servidor MySQL en ... (13)
  • Tuve la oportunidad de acceder a MySQL remotamente desde el servidor nuevo usando la línea de comandos, y fue capaz de telnet al puerto 3306, así que sabía que yo era capaz de conectarse. 
  • Por alguna razón, mi aplicación PHP era incapaz de hacerlo. Finalmente, descubrí que debido a que el nuevo servidor se estaba ejecutando CentOS que necesitaba para desactivar SELinux. 
  • Si está experimentando este problema, entonces éste es una posible solución. Modifique el archivo  /etc/sysconfig/selinux, la siguiente linea:
SELINUX=enforcing
 
a

SELINUX=disabled
 
A continuación, tendrá que reiniciar el servidor. Una vez que hice este cambio mi aplicación PHP fue capaz de conectarse a la base de datos sin ningún problema.

Tomado de: Articulo ORIGINAL

jueves, febrero 28, 2013

PHP 5.4 en CentOS/RHEL 6.3 via Yum


Tomado de: PHP 5.4 on CentOS/RHEL 6.3 via Yum

PHP 5.4.12 ha sido liberado en n PHP.net el 20/12/2012 y esta disponible para CentOS 6 y RHEL 6 en  Webtatic via Yum.

Update 2012-08-26 – APC is stable enough now and so the extension has been added
Update 2012-07-22 – memcache and xdebug extensions have been added
Update 2012-04-29 – mcrypt, tidy, mssql, interbase have been added back in to the repository.

PHP 5.4.0 adds new features such as:
  • Traits
  • Built-in web server
  • Array short notation
  • Array return value de-referencing
  • Finally killing off magic-quotes and safe-mode

Adicione el repositorio Webtatic EL6 de yum:

rpm -Uvh http://repo.webtatic.com/yum/el6/latest.rpm
 
Ahora instalamos php:

yum install php54w
 
Si usted desea actualizar a esta versión de PHP se recomienda que primero compruebe que su sistema será compatible con la actualización, por ejemplo, asegurándose de que cualquier software CPanel-como puede funcionar después de la actualización.

Si no hay ninguna complicación en la instalación, se recomienda quitar la instalación de PHP existente antes de instalar la versión Webtatic como se describió anteriormente.

Packages

Package Provides
php54w mod_php
php54w-bcmath
php54w-cli php-cgi, php-pcntl, php-readline
php54w-common php-api, php-bz2, php-calendar, php-ctype, php-curl, php-date, php-exif, php-fileinfo, php-ftp, php-gettext, php-gmp, php-hash, php-iconv, php-json, php-libxml, php-openssl, php-pcre, php-pecl-Fileinfo, php-pecl-phar, php-pecl-zip, php-reflection, php-session, php-shmop, php-simplexml, php-sockets, php-spl, php-tokenizer, php-zend-abi, php-zip, php-zlib
php54w-dba
php54w-devel
php54w-embedded php-embedded-devel
php54w-enchant
php54w-fpm
php54w-gd
php54w-imap
php54w-interbase php_database, php-firebird
php54w-intl
php54w-ldap
php54w-mbstring
php54w-mcrypt
php54w-mssql
php54w-mysql php-mysqli, php_database
php54w-odbc php-pdo_odbc, php_database
php54w-pdo
php54w-pecl-apc
php54w-pecl-memcache
php54w-pecl-xdebug
php54w-pgsql php-pdo_pgsql, php_database
php54w-process php-posix, php-sysvmsg, php-sysvsem, php-sysvshm
php54w-pspell
php54w-recode
php54w-snmp
php54w-soap
php54w-tidy
php54w-xml php-dom, php-domxml, php-wddx, php-xsl
php54w-xmlrpc
php54w-zts

Opcode Caches

Un paquete precompilado PHP APC está disponible paraa memoria caché, que se recomienda por razones de rendimiento. Se puede instalar a través de:

yum install php54w-pecl-apc