{"id":8409,"date":"2015-12-23T14:08:30","date_gmt":"2015-12-23T13:08:30","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=8409"},"modified":"2015-12-23T15:21:43","modified_gmt":"2015-12-23T14:21:43","slug":"monografico-sobre-mysql-curiosidades-trucos-y-funcionamiento-parte-i","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/monografico-sobre-mysql-curiosidades-trucos-y-funcionamiento-parte-i\/","title":{"rendered":"Monogr\u00e1fico sobre Mysql, curiosidades, trucos y funcionamiento. Parte I"},"content":{"rendered":"<p>Mysql es un sistema gestor de bases de<strong> datos relacionales bastante extendido<\/strong> actualmente. Posee un excelente rendimiento y facilidad de uso, con una licencia dual.<\/p>\n<p>Es multiusuario, multihilo, adquirido por la empresa Oracle (posee otro gestor de bases de datos <strong>objeto relacional<\/strong> que domina el mercado alto rendimiento a nivel empresarial).<\/p>\n<p>El \u00e9xito de Mysql en parte radica por su sencillez, facilidad, y su uso en aplicaciones filosof\u00eda LAMP.<\/p>\n<p>Como he comentado muchos usuarios <strong>confunden<\/strong> la <strong>libertad<\/strong> de usarlo como gestor de nuestras bases, con la gratuidad. De hecho, solamente usaremos MySQL GPL, si la aplicaci\u00f3n que lo emplea tambi\u00e9n lo es. En caso contrario, tendremos que pagar una licencia de uso. Este aspecto es curioso, puesto que existen empresas que basan el funcionamiento de sus aplicaciones sobre este gestor sin pagar licencia, pero su c\u00f3digo es privativo (no quiero enfadar\u00a0a <a href=\"https:\/\/es.wikipedia.org\/wiki\/Richard_Stallman\" target=\"_blank\">Stallman<\/a>)<\/p>\n<p>Aunque inicialmente no ofrec\u00eda motor para soporte transaccional, ni integridad referencial autom\u00e1tica (si a nivel de especificaci\u00f3n mediante sentencia DDL)(esto sonar\u00e1 curioso a los amantes de Microsoft Access), actualmente si ofrece ambas caracter\u00edsticas en funci\u00f3n del tipo de motor de almacenamiento seleccionado.<\/p>\n<p>Otra gran ventaja es su disponibilidad de uso en cualquiera de las plataformas disponibles.<\/p>\n<p>Seg\u00fan datos de fabricante, existir\u00edan m\u00e1s <strong>6.000.000 de copias de MySQL<\/strong> funcionando en la actualidad, lo que supera la base instalada de cualquier otra herramienta de gesti\u00f3n de bases de datos.<\/p>\n<p>Es empleado en las herramientas m\u00e1s extendidas de Internet, como puede ser <strong>WordPress<\/strong> (1 de cada 4 sitios de internet se realiza con este CMS), Drupal, Moodle, Prestashop, etc \u2026<\/p>\n<p>Aunque tambi\u00e9n es empleado por empresas grandes <strong>Wikipedia<\/strong>,\u00a0<strong>Google\u00a0<\/strong>(aunque no para realizar b\u00fasquedas),\u00a0<strong>Facebook<\/strong>,\u00a0<strong>Twitter<\/strong>,\u00a0<strong>Flickr<\/strong>, <strong>YouTube<\/strong>\u2026<\/p>\n<p>El tr\u00e1fico del sitio web de <strong>MySQL AB<\/strong> (empresa) super\u00f3 en el a\u00f1o 2004 al del sitio de\u00a0IBM.<\/p>\n<p><!--more--><\/p>\n<p><strong>Algunos trucos a nivel de comando.<\/strong><\/p>\n<p>Para conectarnos desde la l\u00ednea de comandos, tendremos que tenerlo l\u00f3gicamente instalado y teclear desde consola:<br \/>\n<strong>mysql \u2013u usuario \u2013p<\/strong><\/p>\n<p>Nos pedir\u00e1 la password.<br \/>\nUn dato muy importante es que al ser multiusuario, en funci\u00f3n del usuario con el que conectemos tendremos determinados permisos.<\/p>\n<p>Tambi\u00e9n nos podremos conectar a un gestor remoto:<\/p>\n<p><strong>Mysql \u2013h elservidor.com \u2013u suario \u2013p<\/strong><\/p>\n<p>Para desconectar tendremos que teclear quit; (importante siempre para finalizar punto y coma).<\/p>\n<p>Podemos procesar por lotes de la siguiente forma (una de ellas).<\/p>\n<p><strong>Mysql \u2013u miusuario \u2013h servidor.com \u2013p &lt;archivo_con_instrucciones.sql<\/strong><\/p>\n<p>Se pueden almacenar todos los comandos tecleados en el int\u00e9rprete Mysql ejecutando la orden tee.<\/p>\n<p>Por ejemplo:<strong> tee archivo_de_comandos.txt<\/strong><\/p>\n<p>Para cancelar la captura ejecutar notee.<\/p>\n<p>Otras Consultas interesantes en l\u00ednea de comandos.<\/p>\n<p><strong>Show databases;\u00a0<\/strong> \/\/ Muestra las bases de datos existentes.<br \/>\n<strong>select database();<\/strong> \/\/ Informa sobre la base de datos actualmente en uso.<\/p>\n<p><strong>use la_base_de_datos;<\/strong> \/\/ Permite trabajar con la base de datos que seleccionemos.<br \/>\n<strong>mysql base_de_Datos \u2013u usuario \u2013p<\/strong> \/\/ Permite seleccionar desde l\u00ednea de comandos la base de datos con la que vamos a trabajar.<br \/>\n<strong>show tables;<\/strong> \/\/ Muestra las tablas<br \/>\n<strong>describe nombre_tabla;<\/strong> \/\/ Muestra la definici\u00f3n de los campos de una tabla.<br \/>\n<strong>create database nombre_de_la_base;<\/strong> \/\/ Crea una base de datos<br \/>\n<strong>drop database nombre_de_la_base;<\/strong> \/\/ borra una base de datos.<\/p>\n<p><strong>Ejemplo de c\u00f3mo crear una tabla desde el int\u00e9rprete:<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:mysql decode:true\">mysql&gt; create table personas (\r\n\r\n&gt; nombre varchar(40) not null,\r\n-&gt; direcci\u00f3n varchar(50) null,\r\n-&gt; estado_civil char(13) default \u2019casado\u2019,\r\n-&gt; num_registro int primary key auto_increment,\r\n-&gt; );<\/pre>\n<p>&nbsp;<\/p>\n<p>Cuando se almacena un datos en char, si sobrepasan esos l\u00edmites ser\u00e1n truncados para poderlos almacenar. Es por eso que se suele usar bastante el varchar, con la salvedad\u00a0 de que el valor se ajusta al tama\u00f1o, permitiendo ahorrar espacio.<\/p>\n<p>Para borrar una tabla.<br \/>\n<strong>Drop table nombre_de_la_tabla;<\/strong><\/p>\n<p>Este apartado es interesante para analizar:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:mysql decode:true\">mysql&gt; create table personas (\r\n\r\n-&gt; nombre varchar(40) not null,\r\n-&gt; nacimiento date not null, -&gt;\r\npareja varchar(40),\r\n-&gt; proveedor int not null,\r\n-&gt;\r\n-&gt; primary key (nombre,nacimiento),\r\n-&gt; unique (pareja),\r\n-&gt; foreign key (proveedor) references proveedores -&gt; );<\/pre>\n<p><strong>Primary key<\/strong> define las columnas que ser\u00e1n clave primaria, son por lo tanto no nulas.<br \/>\n<strong>Unique<\/strong> establece las columnas que no admite duplicados. Son claves candidatas del modelo ER<br \/>\n<strong>Foreign key<\/strong>, define los valores de proveedor que solo existan en proveedores, es una forma de relacionar tablas.<\/p>\n<p>Las 3 son conocidas como restricciones en la tabla, tambi\u00e9n se les puede dar un nombre a cada restricci\u00f3n mediante <strong>constraint<\/strong>.<\/p>\n<p><strong>Ejemplo<\/strong>:<\/p>\n<p><strong>Constrain clave primary key (nombre, nacimiento);<\/strong><\/p>\n<p>Otro aspecto a considerar son los \u00edndices. Pueden establecerse en el momento de definici\u00f3n de la creaci\u00f3n de la tabla o a posteri. Se suele realizar con la palabra key, pueden ser sencillos o compuestos dependiendo de nuestras necesidades.<\/p>\n<p>Respecto a los tipos de datos, mysql cuenta con muchas alternativas.<br \/>\nExisten<strong> 3 tipos de clasificaci\u00f3n<\/strong>, los num\u00e9ricos, cadenas de caracteres y tipo fecha-hora.<\/p>\n<p>El valor null es un caso especial, implica la ausencia de valor.<\/p>\n<p><strong>Num\u00e9ricos<\/strong><br \/>\nunsigned (sin valor negativo),zerofill(rellena con 0 espacios a la izquierda vacios), tinyint(1 byte),smallint(2), mediumint(3),int(4), bigint(8), float(4), double(8),decimal.<\/p>\n<p><strong>Cadenas de caracteres<\/strong> (de mejor a mayor espacio)<\/p>\n<p>Char, varchar, tinytext, text(blob), mediumtext, longtext. Dos tipos especiales.<br \/>\nTipo enumerado (enum) y tipo set.El car\u00e1cter varchar s\u00f3lo ocupa el espacio requerido por el valor de la columna.<\/p>\n<p><strong>Fecha y hora<\/strong><br \/>\ndate (3 bytes), time(3), datetime (8),timestamp(4), year(1)<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Para modificar una tabla y columna<\/strong><\/p>\n<p>Para tablas:<br \/>\n<strong>alter table<\/strong> mi_tabla <strong>add<\/strong> (campo tipo, campo tipo);<br \/>\nalter table mi_tabla drop campo; \/\/ Elimina un campo de una tabla.<\/p>\n<p>Para columnas:<br \/>\n<strong>alter table<\/strong> mi_tabla <strong>modify<\/strong> campo tipo;<br \/>\n<strong>alter table<\/strong> mi_tabla <strong>change<\/strong> nombre_antiguo nombre_nuevo;<br \/>\n<strong>alter table<\/strong> mi_tabla\u00a0 <strong>order by<\/strong> el_campo_para_ordenar;<\/p>\n<p>Cambiar nombre de la tabla:<br \/>\n<strong>alter<\/strong> table mi_tabla <strong>rename<\/strong> nuevo\u00ad_nombre_tabla;<\/p>\n<p>Copiar tablas:<br \/>\n<strong>rename<\/strong> tabla mibase.tabla to mibase_dos.tabla; \/\/ Copia una tabla de una base a otra<\/p>\n<p>Crear tabla con el contenido de otra:<br \/>\n<strong>create table<\/strong> mi_nueva_tabla_destino\u00a0 <strong>select <\/strong>* from tabla_origen;<\/p>\n<p>Crear tabla con campos o estructura pero si datos:<br \/>\n<strong>create table<\/strong> mi_nueva_tabla_destino like tabla_origen;<\/p>\n<p>Crear una tabla temporal, solo visible en la sesi\u00f3n activa, \u00fatil para trabajar con resultados intermedios<\/p>\n<p><strong>Create temporaly table<\/strong> la_nueva_tabla;<\/p>\n<p>Podemos importar datos de una aplicaci\u00f3n a otra, mediante la creaci\u00f3n de archivos de texto mediante ordenes silimares a esta<\/p>\n<p><strong>mysql&gt; load data local infile \u2019clientes.txt\u2019 -&gt; into table clientes;<\/strong><\/p>\n<p>o detallando m\u00e1s el tipo de importaci\u00f3n:<\/p>\n<pre class=\"lang:mysql decode:true\">mysql&gt; load data local infile \u2018clientes.txt\u2019 -&gt; fields terminated by \u2019,\u2019 -&gt; enclosed by \u2019\u201d\u2019 -&gt; lines terminated by \u2019\\r\\n<\/pre>\n<p>Estas acciones tambi\u00e9n se pueden realizados con <strong>mysqlimport<\/strong><\/p>\n<p><span style=\"color: #000080;\"><strong>CURIOSIDADES<\/strong><\/span><\/p>\n<p>Si usamos la expresi\u00f3n explain delate de una consulta select, Mysql nos explica como ha realizado la consulta, si ha empleado \u00edndices, el tipo de join realizado, las claves primarias, etc.<\/p>\n<p>Su usamos la cl\u00e1usula truncate en vez de delete para borrar registros de una tabla, ganaremos en velocidad debido a que no hace una cuenta de los registros borrados.<\/p>\n<p>Podemos asignar prioridades a las operaciones <strong>LOW_PRIORITY<\/strong> o <strong>HIGH_PRIORITY<\/strong> para evitar bloqueos cuando varios usuarios realizan operaciones sobre la base.<\/p>\n<p>Mediante <strong>LAST_INSERT_ID()<\/strong>, nos devuelve el id\u00a0 asignado a una columna auto num\u00e9rica despu\u00e9s de realizar un insert.<\/p>\n<p>Es preferible realizar instalaciones fuente y luego compilarlas, que instalar los binarios directamente. Aunque la segunda posibilidad es m\u00e1s sencilla, el motor seguramente sea m\u00e1s lento.<\/p>\n<p>El archivo de configuraci\u00f3n de Mysql suele residir en la carpeta <strong>etc\/my.cnf<\/strong><\/p>\n<p>Podemos acelerar las consultas a la base, mediante la incorporaci\u00f3n de una <strong>cache<\/strong>. Si no vamos a trabajar con una base de datos sometida a cambios, podremos usarla y notar mucha mejor\u00eda en el rendimiento. Esta cache se activa mediante variables globales o tocando el archivo de configuraci\u00f3n anterior.<\/p>\n<p>Recuerda tambi\u00e9n que el empleo de <strong>\u00edndices<\/strong> en las tablas, aumenta la velocidad pero necesitan estar activos bajo unos criterios y consejos adecuados. Pero principalmente que los registros de los \u00edndices sean lo m\u00e1s peque\u00f1os posibles y que solo se indexen valores \u00fanicos.<\/p>\n<p>Otra caracter\u00edstica poco conocida de Mysql es que permite la <strong>replicaci\u00f3n<\/strong>. Esto permite realizar una copia de los datos de forma sincronizada entre servidores de bases de datos, para que cualquiera de ellos, pueda ofrecer registros a sus clientes. El esquema de funcionamiento es maestro-esclavo, donde existe un servidor central o uno o varios esclavos que sincronizan con el maestro. Los servidores esclavos solo sirven para realizar consultas. Con el objeto tambi\u00e9n de ganar velocidad, al igual que con la cache y los \u00edndices.<\/p>\n<p>Si queremos que los mensajes del servidor aparezcan el castellano, se debe ejecutar el demonio mysqld con el comando<\/p>\n<p><strong>mysqld &#8211;language=spanish <\/strong><\/p>\n<p>o agregar la l\u00ednea dentro del etc<strong>\/my.cnf<\/strong> con un editor de texto (vi, joe,emac) en la secci\u00f3n<\/p>\n<p><strong>[mysqld]<\/strong><br \/>\n<strong> language = \/usr\/share\/mysql\/spanish<\/strong><\/p>\n<p><strong><br \/>\nCopias de seguridad<\/strong><\/p>\n<p>Mysql ofrece varios mecanismos crear <strong>copias de seguridad<\/strong>.<\/p>\n<p>Una de ellas, la m\u00e1s directa es copiar los archivos f\u00edsicos binarios con los datos. Para ello es necesario saber d\u00f3nde se almacenan las bases. La ruta puede variar en funci\u00f3n de la distribuci\u00f3n (si es Linux) y el sistema operativo.<\/p>\n<p>En Linux suelen estar ubicadas en<strong> \/var\/lib\/mysql<\/strong><\/p>\n<p>Podemos usar el comando desde dentro &gt; show variables like \u2019datadir\u2019; para saber d\u00f3nde se almacenar las bases.<\/p>\n<p>Es importante parar el servidor antes re realizar la copia binaria.<br \/>\n<strong>mysqladmin -u root -p shutdown<\/strong><\/p>\n<p>Se pueden copiar solo tablas si deseamos dentro de cada carpeta de cada base. Cada base de datos posee una carpeta y dentro de ella es donde se ubican las tablas e \u00edndices. Se diferencian por la extensi\u00f3n.<\/p>\n<p>Este m\u00e9todo obliga para evitar problemas, a parar el servidor para realizar la copia.<\/p>\n<p><strong>Mysqlhotcopy <\/strong>posibilita realizar la copia sin parar el servidor, es un script escrito en perl<\/p>\n<p>Ejemplo \u00a0mysqlhotcopy base_de_datos<\/p>\n<p>Esto creara una carpeta \u00a0<strong>\/var\/lib\/mysql\/copy_base_de_datos<\/strong><\/p>\n<p>Pero importante, no funciona para bases con motor de almacenamiento <strong>INNODB<\/strong><\/p>\n<p>Otro mecanismo sencillo es mediante<\/p>\n<p><strong>Mysqldump<\/strong><\/p>\n<p>Esta copia no es binaria, y genera un archivo de texto con las sentencias DDL y DML SQL. El \u00fanico inconveniente es que los archivos generados son grandes y es un mecanismo lento. Pero no es necesario parar el servidor.<\/p>\n<p><strong>mysqldump mi_base &gt; mi_base.sql<\/strong><\/p>\n<p>Es necesario observar el s\u00edmbolo mayor, que a modo de tuber\u00eda t\u00edpica de los interpretes env\u00eda la base al archivo .sql<\/p>\n<p><strong>Restauraci\u00f3n de las copias (administradores de sistemas)<\/strong><\/p>\n<p>Si la restauraci\u00f3n es binaria, tendremos que parar el servidor.<br \/>\n<strong>mysqladmin -u root -p shutdown<\/strong><\/p>\n<p>Y copiar los archivos a su destino.<br \/>\n<strong>\/var\/lib\/mysql<\/strong> (en la mayor\u00eda de los casos en sistemas GNU\/Linux)<\/p>\n<p>Pero ojo, es necesario restaurar el propietario y el grupo de los archivos copiados.<\/p>\n<p><strong>chown -R mysql.mysql \/var\/lib\/mysql<\/strong><\/p>\n<p>Y si la copia ha sido mediante un archivo .sql<\/p>\n<p><strong>mysql mi_base -u admin -p &lt; mi_base.sql<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Reparaci\u00f3n de las tablas en caso de problemas.<\/strong><\/p>\n<p>En algunas ocasiones, y es m\u00e1s frecuente de lo que pensamos, cuando se realizan muchas operaciones sobre la base de datos, por ejemplo, usuarios en una plataforma formativa moodle, se efect\u00faan bloqueos, accesos, escrituras y es posible que en un momento determinado, los \u00edndices de la tabla queden da\u00f1ados. Tambi\u00e9n condiciones f\u00edsicas, apagones, fallos de hard, etc.<\/p>\n<p>Vamos a explicar el equivalente a compactar y reparar datos en una base de datos Access.<\/p>\n<p>Para ello, desde la l\u00ednea de comandos.<\/p>\n<p><strong>Ckeck table tabla_a_analizar;<\/strong><\/p>\n<p>Si nos devuelve un OK, la tabla est\u00e1 bien. Si la tabla se encuentra da\u00f1ada nos dar\u00e1 errores.<br \/>\nEs importante saber que Mysql no puede realizar consultas sobre una tabla da\u00f1ada, desatando el error.<\/p>\n<p>Con este otro comando<br \/>\n<strong>check table tabla_a_analizar extended;<\/strong><\/p>\n<p>Muestra m\u00e1s informaci\u00f3n sobre el error que tenemos.<\/p>\n<p>Es el momento de ejecutar el comando repair<\/p>\n<p><strong>Repair table tabla_a reparar;<\/strong><\/p>\n<p>Es preciso aclarar, que esto no es la panacea, ya que al reparar se suelen perder en ocasiones registros, y que es una acci\u00f3n no deseada l\u00f3gicamente, pero necesaria para poder seguir trabajando. Por lo que es aconsejable tirar de las copias de seguridad.<\/p>\n<p>El comando optimize table tambi\u00e9n se encarga de realizar algunas correcciones.<\/p>\n<p>Existe una utilidad myisamchk, que permite reparar las tablas, pero ojo, solo de tipo <strong>MyISAM<\/strong>. Para ejecutarlo, el servidor no debe estar ejecut\u00e1ndose.<\/p>\n<p>Ejemplo: <strong>myisamchk *.MYI<\/strong><\/p>\n<p>No obstante, antes de esto, es preferible repito disponer de copia de seguridad.<\/p>\n<p><strong>SEGURIDAD<\/strong><\/p>\n<p>En Mysql la seguridad de acceso a los datos, queda principalmente marcada por los permisos atribuidos a los diversos tipos de usuarios. Estos permisos pueden ser en principio complejos. Existe un usuario admin generalmente que posee acceso a todos los recursos del sistema.<\/p>\n<p>Mysql almacena toda la informaci\u00f3n de los usuarios y el sistema de privilegios en una base de datos cuyo nombre es <strong>mysql<\/strong>. Su estructura podemos verla mediante <strong>use mysql; show tables<\/strong>;<\/p>\n<p>El comando show privileges es tambi\u00e9n importante, ya que si realizamos cambios en informaci\u00f3n que afecta a privilegios de usuarios, para que el gestor se entere de los cambios es necesario ejecuitar un<\/p>\n<p><strong>mysql&gt; flush privileges;<\/strong>\u00a0 \/\/ Es como un refresh<\/p>\n<p>Aqu\u00ed os dejo un ejemplo de creaci\u00f3n de un usuario:<\/p>\n<p><strong>GRANT ALL PRIVILEGES ON nombre_base.* TO \u2018nombre_usuario\u2019@\u2019%\u2019 IDENTIFIED BY \u2018contrase\u00f1a\u2019;<\/strong><\/p>\n<p>Cada usuario dispondr\u00e1 de sus privilegios.<\/p>\n<p>La administraci\u00f3n de privilegios y usuarios en MySQL se realiza a trav\u00e9s de las sentencias:<\/p>\n<ul>\n<li>GRANT. Otorga privilegios a un usuario, en caso de no existir, se crear\u00e1 el usuario.<\/li>\n<li>REVOKE. Elimina los privilegios de un usuario existente.<\/li>\n<li>SET PASSWORD. Asigna una contrase\u00f1a.<\/li>\n<li>DROP USER. Elimina un usuario.<\/li>\n<\/ul>\n<p>Es importante aclarar que podemos establecer diferentes accesos en funci\u00f3n del tipo de red donde estemos, limitando accesos por la red, id o local.<\/p>\n<p>MySQL proporciona una gran variedad de tipos de privilegios.<\/p>\n<ul>\n<li>Privilegios relacionados con tablas: alter, create, delete, drop, index, insert, select, update<\/li>\n<li>Algunos privilegios administrativos: file, proccess, super reload, replication client, grant option, shutdown<\/li>\n<li>Algunos privilegios para fines diversos: lock tables, show databases, create temporary tables.<\/li>\n<\/ul>\n<p>MySQL puede establecer conexiones seguras encript\u00e1ndolas mediante el protocolo SSL*;<\/p>\n<p>mysql&gt; grant all -&gt; on *.* -&gt; to usuario@localhost -&gt; require ssl;<\/p>\n<p>Tambi\u00e9n podemos limitar los recursos del servidor, a conexiones por hora, consultas, actualizaciones.<\/p>\n<p><strong>mysql&gt; grant all -&gt; on *.* -&gt; to -&gt; with MAX_CONECTIONS_PER_HOUR 5 -&gt; MAX_QUERIES_PER_HOUR 600 -&gt; MAX_UPDATES_PER_HOUR 5<\/strong><\/p>\n<p>Para borrar un usuario<\/p>\n<p><strong>mysql&gt; drop user usuario_a_borrar;<\/strong><\/p>\n<p>Si deseas simplificar todos estos comandos anteriores, es posible y recomendable usar un gestor GUI, ya que la memoria nos puede fallar &#8230;<\/p>\n<p>PARTE II<br \/>\n<strong><a href=\"http:\/\/www.palentino.es\/blog\/los-oscar-a-las-mejores-herramientas-de-administracion-gui-para-mysql-parte-ii\/\">Anexo \u2013 \u00a0Los Oscar a las mejores Herramientas de Administraci\u00f3n GUI para Mysql.<\/a><\/strong><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mysql es un sistema gestor de bases de datos relacionales bastante extendido actualmente. Posee un excelente rendimiento y facilidad de uso, con una licencia dual. Es multiusuario, multihilo, adquirido por la empresa Oracle (posee otro gestor de bases de datos objeto relacional que domina el mercado alto rendimiento a nivel empresarial). El \u00e9xito de Mysql en parte radica por su sencillez, facilidad, y su uso en aplicaciones filosof\u00eda LAMP. Como he comentado muchos usuarios confunden la libertad de usarlo como gestor de nuestras bases, con la gratuidad. De hecho, solamente usaremos MySQL GPL, si la aplicaci\u00f3n que lo emplea tambi\u00e9n lo es. En caso contrario, tendremos que pagar una licencia de uso. Este aspecto es curioso, puesto que existen empresas que basan el funcionamiento de sus aplicaciones sobre este gestor sin pagar licencia, pero su c\u00f3digo es privativo (no quiero enfadar\u00a0a Stallman) Aunque inicialmente no ofrec\u00eda motor para soporte transaccional, ni integridad referencial autom\u00e1tica (si a nivel de especificaci\u00f3n mediante sentencia DDL)(esto sonar\u00e1 curioso a los amantes de Microsoft Access), actualmente si ofrece ambas caracter\u00edsticas en funci\u00f3n del tipo de motor de almacenamiento seleccionado. Otra gran ventaja es su disponibilidad de uso en cualquiera de las plataformas disponibles. Seg\u00fan datos de fabricante, existir\u00edan m\u00e1s 6.000.000 de copias de MySQL funcionando en la actualidad, lo que supera la base instalada de cualquier otra herramienta de gesti\u00f3n de bases de datos. Es empleado en las herramientas m\u00e1s extendidas de Internet, como puede ser WordPress (1 de cada 4 sitios de internet se realiza con este CMS), Drupal, Moodle, Prestashop, etc \u2026 Aunque tambi\u00e9n es empleado por empresas grandes Wikipedia,\u00a0Google\u00a0(aunque no para realizar b\u00fasquedas),\u00a0Facebook,\u00a0Twitter,\u00a0Flickr, YouTube\u2026 El tr\u00e1fico del sitio web de MySQL AB (empresa) super\u00f3 en el a\u00f1o 2004 al del sitio de\u00a0IBM.<\/p>\n","protected":false},"author":1,"featured_media":4871,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[620],"tags":[37],"class_list":["post-8409","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mysql","tag-mysql"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/8409","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=8409"}],"version-history":[{"count":3,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/8409\/revisions"}],"predecessor-version":[{"id":8416,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/8409\/revisions\/8416"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/4871"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=8409"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=8409"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=8409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}