MySQL https://www.carloscarrascal.com/ es Crear un usuario y asignar permisos en MySQL https://www.carloscarrascal.com/blog/crear-un-usuario-y-asignar-permisos-en-mysql <article data-history-node-id="40" class="node node--type-blog-post node--view-mode-rss group-one-column ds-2col-stacked-fluid clearfix"> <div class="group-header"> <div class="field field--name-node-title field--type-ds field--label-hidden field--item"><h1> Crear un usuario y asignar permisos en MySQL </h1> </div> <div class="field field--name-node-post-date field--type-ds field--label-hidden field--item">Jueves, Septiembre 6, 2018 - 19:20</div> </div> <div class="group-left"> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field--items"> <div class="field--item"><a href="/tags/mysql" hreflang="es">MySQL</a></div> <div class="field--item"><a href="/tags/database" hreflang="es">Database</a></div> </div> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><p>Normalmente para configurar el acceso de una aplicación web a la base de datos crearemos una cuenta de servicio para esa aplicación, y le daremos permisos según necesitemos, pero solamente a esa base de datos.</p> <p>Esta es una de esas cosas que uno hace mil veces pero nunca se acuerda de la sintaxis correcta. Aqui lo teneis:</p> <pre> CREATE USER 'nombre_de_usuario'@'localhost' IDENTIFIED BY 'vuestra_password'; GRANT ALL PRIVILEGES ON nombre_de_base_de_datos.* TO 'nombre_de_usuario'@'localhost'; FLUSH PRIVILEGES;</pre> <p>Si queremos asignarle todos los permisos para todas las bases de datos, el GRANT sería así:</p> <pre> GRANT ALL PRIVILEGES ON *.* TO 'nombre_de_usuario'@'localhost'; </pre> <p>Normalmente, antes habremos creado la base de datos a mano, o importando los datos de algún archivo. Crear la base de datos en MySQL puede ser tan sencillo como:</p> <pre> CREATE DATABASE nombre_de_base_de_datos;</pre> <p>Suele ser buena idea probar que ha funcionado correctamente. La mejor forma es probar el acceso usando el terminal:</p> <pre> mysql --user=nombre_de_usuario --password=vuestra_password nombre_de_base_de_datos</pre> <p>Si todo está correcto, nos abrirá una sesión de MySQL en el terminal. Si no conecta, es que hemos hecho mal alguno de los pasos anteriores.</p> </div> </div> <div class="group-footer"> <section> <h2>Añadir nuevo comentario</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=40&amp;2=comment&amp;3=comment" token="uf1jhokftQ9c-TrhcJdrBuejFK31TbOt8fXOfQFLDI8"></drupal-render-placeholder> </section> </div> </article> Thu, 06 Sep 2018 17:20:10 +0000 root 40 at https://www.carloscarrascal.com Error ERROR 1071 (42000) al importar una base de datos Drupal https://www.carloscarrascal.com/blog/error-error-1071-42000-al-importar-una-base-de-datos-drupal <article data-history-node-id="21" class="node node--type-blog-post node--view-mode-rss group-one-column ds-2col-stacked-fluid clearfix"> <div class="group-header"> <div class="field field--name-node-title field--type-ds field--label-hidden field--item"><h1> Error ERROR 1071 (42000) al importar una base de datos Drupal </h1> </div> <div class="field field--name-node-post-date field--type-ds field--label-hidden field--item">Sábado, Marzo 18, 2017 - 18:28</div> </div> <div class="group-left"> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field--items"> <div class="field--item"><a href="/tags/drupal" hreflang="es">Drupal</a></div> <div class="field--item"><a href="/tags/mysql" hreflang="es">MySQL</a></div> <div class="field--item"><a href="/tags/debian" hreflang="es">Debian</a></div> <div class="field--item"><a href="/tags/d7" hreflang="es">D7</a></div> <div class="field--item"><a href="/tags/database" hreflang="es">Database</a></div> </div> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><p>Tratando de importar una copia de base de datos que había creado con <em>drush sql-dump</em> en otro servidor, me he encontrado con este error de MySQL:</p> <pre> ERROR 1071 (42000) at line 25: Specified key was too long; max key length is 767 bytes</pre> <p>El comando que estaba usando era bastante normal:</p> <pre> drush sql-cli &lt; ../backup.sql </pre> <p>Después de intentar varias opciones, también he llegado a ver este otro error:</p> <pre> ERROR 1709 (HY000) at line 25: Index column size too large. The maximum column size is 767 bytes. </pre> <p>La versión de MySQL que estaba usando es 5.6.30-1, como podéis ver aquí:</p> <pre> ​dpkg -l | grep mysql-server ii <strong>mysql-server</strong> 5.6.30-1 all MySQL database server (metapackage depending on the latest version) ii <strong>mysql-server</strong>-5.6 5.6.30-1 amd64 MySQL database server binaries and system database setup ii <strong>mysql-server</strong>-core-5.6 5.6.30-1 amd64 MySQL database server binaries</pre> <p> </p> <p>El problema venia de la configuración de INNODB en mi servidor, y la solución es bastante sencilla, basta con editar el fichero de configuracion de MySQL (como <em>root</em> o usando <em>sudo</em>), que en Debian está en:</p> <pre> vi /etc/mysql/my.cnf </pre> <p>Si no teneis ese fichero puede que este aquí:</p> <pre> vi /etc/mysql/mysql.conf.d/mysqld.cnf </pre> <p>Tenemos que incluir las siguientes líneas de configuración en la sección de <em>[mysqld]</em>:</p> <pre> innodb_file_format = true innodb_file_per_table=true innodb_file_format=barracuda </pre> <p>Después reiniciamos el servidor y listo:</p> <pre> service mysql restart</pre> <p>Ahora si intentamos importar la base de datos de nuevo no deberíamos tener problemas.</p> <p>EDIT:</p> <p>Si no podemos tocar la configuración del servidor, podemos ejecutar esto directamente en mysql antes de ejecutar nuestra query:</p> <pre> <code>SET @@global.innodb_large_prefix = 1;</code></pre> <p> </p> <h2>Referencias:</h2> <ul><li><a href="https://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_large_prefix" target="_blank">https://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_large_prefix</a></li> </ul><p> </p> </div> </div> <div class="group-footer"> <section> <h2>Comments</h2> <article data-comment-user-id="0" id="comment-2" about="/en/comment/2" typeof="schema:Comment" class="js-comment"> <mark class="hidden" data-comment-timestamp="1536177330"></mark> <footer> <article typeof="schema:Person" about="/user/0"> </article> <p><span rel="schema:author">Subido por <span lang="" typeof="schema:Person" property="schema:name" datatype="">Pelaez (no verificado)</span> el Mié, 20/09/2017 - 01:59</span> <span property="schema:dateCreated" content="2017-09-19T23:59:46+00:00" class="hidden"></span> </p> <a href="/en/comment/2#comment-2" hreflang="en">Enlace permanente</a> </footer> <div> <h3 property="schema:name" datatype=""><a href="/en/comment/2#comment-2" class="permalink" rel="bookmark" hreflang="en">gracias</a></h3> <div property="schema:text" class="field field--name-comment-body field--type-text-long field--label-hidden field--item"><p>Gracias por este articulo, me estaba volviendo loco con esto</p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=2&amp;1=default&amp;2=en&amp;3=" token="8HyszN_uZaobqtd30DdLSRD9p71vJt7YwSHUzjLPUDo"></drupal-render-placeholder> </div> </article> <h2>Añadir nuevo comentario</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=21&amp;2=comment&amp;3=comment" token="5XSG_rpahIxFRK6x2zFQ269KDIgAOiq-4yaA65G5Kkc"></drupal-render-placeholder> </section> </div> </article> Sat, 18 Mar 2017 17:28:08 +0000 root 21 at https://www.carloscarrascal.com Drupal: Actualizar MySQL a utf8mb4 https://www.carloscarrascal.com/blog/drupal-actualizar-mysql-utf8mb4 <article data-history-node-id="20" class="node node--type-blog-post node--view-mode-rss group-one-column ds-2col-stacked-fluid clearfix"> <div class="group-header"> <div class="field field--name-node-title field--type-ds field--label-hidden field--item"><h1> Drupal: Actualizar MySQL a utf8mb4 </h1> </div> <div class="field field--name-node-post-date field--type-ds field--label-hidden field--item">Domingo, Marzo 5, 2017 - 20:24</div> </div> <div class="group-left"> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field--items"> <div class="field--item"><a href="/tags/drupal" hreflang="es">Drupal</a></div> <div class="field--item"><a href="/tags/mysql" hreflang="es">MySQL</a></div> <div class="field--item"><a href="/tags/utf8mb4" hreflang="es">utf8mb4</a></div> </div> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><p>De una temporada a esta parte supongo que habréis visto el aviso en el panel de información de Drupal acerca de actualizar la base de datos para soportar UTF-8 de 4 bytes, con este mensaje:</p> <pre> 4 byte UTF-8 for mysql is not activated, but it is supported on your system. It is recommended that you enable this to allow 4-byte UTF-8 input such as emojis, Asian symbols and mathematical symbols to be stored correctly. See the <a href="https://www.drupal.org/node/2754539">documentation on adding 4 byte UTF-8 support</a> for more information.</pre> <p>Vale, ¿pero de que va todo esto? ¿Para que sirve esta actualización?</p> <h2>Diferencias entre UTF-8 y uft8mb4</h2> <p>UTF-8 es un juego de caracteres, o mejor dicho, un formato de codificación de caracteres, que implementa el estándar Unicode. Unicode está dividido en 17 códigos de área, y cada uno contiene 65,536 caracteres de 16 bits, de los que solamente está en uso alrededor del 10%. La mas importante de estas áreas o planos es el BMP (<em>Basic Multilingual Plane</em>), que contiene los caracteres mas usados. Entre ellos están los de Latín, alfabetos griego y cirílico, y hasta los juegos de caracteres asiáticos como los japoneses Katakana e Hiragana, o ideogramas chinos.</p> <p>Además, UTF-8 es de longitud variable, y usa hasta 3 bytes como máximo para representar un carácter, por lo que soporta todos los caracteres BPM. Con <em>utf8mb4</em> se pueden utilizar hasta 4 bytes, con lo que se gana un byte adicional que permite representar caracteres adicionales o <em>suplementarios</em>, y según el manual de MySQL:</p> <ul><li>Para un carácter <em>BMP</em>, <em>utf8</em> y <em>utf8mb4</em> tienen el mismo almacenamiento: mismo código, misma codificación, misma longitud.</li> <li>Para un carácter suplementario, <em>utf8</em> no puede almacenarlo, mientras que <em>utf8mb4</em> necesita cuatro bytes para almacenarlo.</li> </ul><p>Como utf8 no puede almacenar este tipo de caracteres, no hay problema al realizar la migración desde utf8 a <em>utf8mb4</em>, pero ojo, perderíamos información si queremos volver a pasar de <em>utf8mb4 a utf8, </em>ya que como hemos visto no se podrán almacenar todos los caracteres.</p> <h2>Actualizar a utf8mb4</h2> <p>Como tenia un rato libre me decidí a probar la actualización a <em>utf8mb4</em>​, eso si, sabiendo que no hay vuelta atrás, así que seguí las instrucciones de la página que nos enlaza desde Drupal:</p> <p><a href="https://www.drupal.org/node/2754539">documentation on adding 4 byte UTF-8 support</a></p> <p>Lo primero es editar el fichero de configuración de MySQL, normalmente en Debian en /etc/mysql/my.conf y añadir las siguientes líneas en el apartado de <em>[mysqld]</em>:</p> <pre> innodb_large_prefix=true innodb_file_format=barracuda innodb_file_per_table=true </pre> <p>Y reinicamos el servidor:</p> <pre> service mysql restart</pre> <p>Ahora tenemos que convertir nuestra vieja base de datos a <em>utf8mb4</em>, por lo que lo primero que haremos es <strong>hacer una copia de seguridad</strong>.</p> <p>¿Ya la tienes? ¿Seguro? Ok, luego no digas que no te he avisado.</p> <p>Vamos a utilizar el módulo experimental que nos dicen en la ayuda: utf8mb4_convert. No es exactamente un módulo, es una extensión de <em>Drush</em>, de forma que no tendremos que activarlo. Lo descargamos así:</p> <pre> drush @none dl utf8mb4_convert-7.x drush cc drush</pre> <p>Ahora, si tenemos alguna base de datos en nuestro archivo settings.php que no queramos convertir, la comentamos o la quitamos del fichero. Podemos nuestro portal en modo de mantenimiento (los programadores de verdad hacen esto a pelazo, pero vosotros veréis):</p> <pre> drush vset maintenance_mode 1</pre> <p>Y ejecutamos este comando de Drush que da un yuyu que te cagas:</p> <pre> drush utf8mb4-convert-databases</pre> <p>¿Tenías una copia de seguridad verdad?</p> <p>Bueno, pues modificamos la configuración del settings.php para <em>utf8mb4</em>:</p> <pre> $databases['default']['default'] = array( 'driver' =&gt; 'mysql', 'database' =&gt; 'databasename', 'username' =&gt; 'username', 'password' =&gt; 'password', 'host' =&gt; 'localhost', 'charset' =&gt; 'utf8mb4', 'collation' =&gt; 'utf8mb4_general_ci', );</pre> <p>Y probamos el portal. Si todo funciona, podemos quitar el modo de mantenimiento:</p> <pre> drush vset maintenance_mode 0</pre> <p>Y una cosa mas que hemos aprendido a hacer.</p> <p>Y si no funciona... bueno... pues déjame un comentario o tira de Stackoverflow...</p> <p> </p> <h2>Referencias</h2> <ul><li><a href="https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html" target="_blank">https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html</a></li> <li><a href="http://www.sttmedia.com/unicode-basiclingualplane" target="_blank">http://www.sttmedia.com/unicode-basiclingualplane</a></li> <li><a href="https://en.wikipedia.org/wiki/Plane_(Unicode)" target="_blank">https://en.wikipedia.org/wiki/Plane_(Unicode)</a></li> <li><a href="https://www.drupal.org/project/utf8mb4_convert" target="_blank">https://www.drupal.org/project/utf8mb4_convert</a></li> <li><a href="https://www.drupal.org/node/2754539" target="_blank">https://www.drupal.org/node/2754539</a></li> </ul></div> </div> <div class="group-footer"> <section> <h2>Añadir nuevo comentario</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=20&amp;2=comment&amp;3=comment" token="jtHSIrb3ssKST-mcOv2EwGPqTrf6EHDsSXb8MjW_QiI"></drupal-render-placeholder> </section> </div> </article> Sun, 05 Mar 2017 19:24:40 +0000 root 20 at https://www.carloscarrascal.com