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

martes, 24 de septiembre de 2013

Configuarcin y seguridad de MariaDB (MySQL) en OpenSUSE

La instalacin de MySQL en OpenSUSE es muy sencilla, incluso es muy posible que venga preinstalado en muchas instalaciones. De lo contrario, abre YaST, y en la opcin de administracin de software, busca los paquetes escribiendo "mysql" en el campo de bsqueda. Te debern aparecer todos los necesarios (ten en cuenta que la versin que se instalar es MariaDB, una ramificacin del original MySQL, pero de los mismos autores).
Muy posiblemente tambin te aparecern otros paquetes como el mdulo de PHP para MySQL o phpMyAdmin, para gestionar tu base de datos desde el navegador. Si ests interesado, instalalos tambin.


Pero no es la instalacin lo que quiero comentar ahora, si no la configuracin inicial y como asegurar la instalacin.

El archivo de configuracin se aloja en 

/etc/my.cnf

y ah podremos, entre otras cosas, cambiar la ubicacin donde se guardarn las tablas de mysql o los puertos de escucha. Est todo muy bien documentado, as que leyendo se podr sacar mucha informacin.

datadir = /var/lib/mysql

Para hacer nuestra instalacin ms segura, se puede ejecutar el script 

mysql_secure_instalation

que nos guiar a travs de una serie de preguntas para crear una password para el usuario root (por defecto no hay contrasea), borrar las tablas de prueba, eliminar a los usuarios annimos o denegar el acceso remoto para la administracin, todo ello cosas recomendables.

jueves, 8 de septiembre de 2011

Copiar un conjunto de tablas dentro de la misma base de datos

Hoy quería hacer una copia de un blog de wordpress de manera que pudiera tener un sitio de pruebas en el que jugar sin miedo a cargarme algo del blog de verdad.
Uno de los pasos que hay que realizar es una copia de la base de datos utlizada por el blog. En mi caso no tengo más bases de datos así que la opción ha sido copiar las tablas con un nombre diferente a la misma base de datos.
Para mi sorpresa, buscando por internet, no he encontrado una manera rápida o semi-automática de realizar esta copia. He encontrado muchos posts de como copiar una tabla (pero solo una, no un conjunto de ellas) pero no me apetecía ejecutar una por una para cada tabla.
Comentar que uso MySQL por si alguien lo dudaba.

La solución para copiar las tablas a la misma base de datos pero con nombre distinto ha sido:
  1. Acceder al gestor de la base de datos a traves de phpMyAdmin
  2. Seleccionar todas las tablas que quería copiar, marcándolas con el correspondiente "checkbox"
  3. Abajo de todo el listado de tablas, hay un desplegable para realizar acciones en bloque, ahí he elegido Exportar
  4. Descargamos el archivo de exportación a nuestro ordenador y lo abrimos con un editor de texto. Buscamos el prefijo que tengan dichas tablas y lo sustituimos por un nuevo prefijo.
    Por ejemplo, si se llamaban todas wordpress_nombreDeTabla, buscamos wordpress_ y lo sustituimos por otroprefijo_
  5. En caso de que no haya un prefijo común a todas las tablas, siempre tendremos un patrón en todas ellas, por ejemplo "CREATE TABLE IF NOT EXIST nombreDeTabla". En este caso buscamos la cadena "CREATE TABLE IF NOT EXIST " (con el espacio del final incluido) y lo reemplazamos por "CREATE TABLE IF NOT EXIST otroprefijo_" de manera que todas las tablas pasarán a tener otroprefijo_ delante suyo.
  6. Guardamos el fichero
  7. Volvemos a phpMyAdmin y en el menú superior elegimos "Importar"
  8. Elegimos el archivo editado, y lo importamos. Todas las tablas deberán duplicarse con su nuevo nombre.
Espero que haya sido de utilidad y puedas copiar tus tablas de mySQL sin tener que ir una por una

viernes, 28 de enero de 2011

Insertar varias filas en MySQL con Java

Ayer me preguntaban como se podían meter varias filas directamente en una base de datos MySQL a través de Java. A mi, lo único que se me ocurrió es preparar un string con tantos valores como filas queramos meter:

String s = "INSERT INTO table (aa, bb ,cc) values (?,?,?), (?,?,?) , (?,?,?) , (?,?,?)...."

y así tantas veces como filas queramos meter. Todo esto se podría automatizar con un método que devolviera ese string automáticamente pasándole el número de filas que quisiéramos (escrito rápido y sin mucha comprobación):

public String createInsert(int rows){
   String s = "INSERT INTO table (aa, bb, cc) values ";
   for(int i = 0; i < rows; i++){
      s += "(?,?,?),"
   }
   //Aquí habría que quitar la última coma
}

Pero hoy, la misma persona que me preguntó me informa que todo esto ya está preparado en Java y que se puede hacer de manera mucho más sencilla... así que aquí dejo una mejor solución (lo de antes no eran más que indagaciones):

String s = "INSERT INTO table (aa, bb ,cc) values (?,?,?)"
PreparedStatement st = connection.prepareStatement(s);
int rows = 20;
for(int i = 0; i < rows; i++){
   st.setString("a string")  //or whatever value: int, date, null
   st.setString("a string")  //or whatever value: int, date, null
   st.setString("a string")  //or whatever value: int, date, null
   st.addBatch();      //añadir una fila
}
st.executeBatch();

lunes, 20 de diciembre de 2010

Deshabilitar Foreign Key Checks en MySQL

En algunas ocasiones las foreign keys de nuestras tablas nos pueden dar mucho la lata cuando estamos en un entorno de desarrollo, borrando y añadiendo filas constantemente, restaurando tablas... ya que nos saltará error al incumplirse las restricciones que estos índices imponen.

Bien, pues en MySQL es fácil deshabilitar este chequeo y que no nos de error, para ello:

set foreign_key_checks = 0; 
 
Realizamos nuestras acciones
 
set foreign_key_checks = 1; 

viernes, 12 de noviembre de 2010

Ver y matar los procesos de MySQL

¿Se te queda la base de datos colgada durante mucho tiempo sin dar respuesta?
¿Se consume la CPU de manera anormal y todo por culpa de mysql?

Pues bien, si quieres ver que es lo que está manteniendo ocupado al motor de bases de datos lo puedes hacer de la siguiente manera:

mysql -uroot -p
(ENTER YOUR PASSWORD)
show full processlist

De esta manera veremos todos los procesos que se están ejecutando en la base de datos y seguramente habrá alguna sentencia que no termina de ejecutarse correctamente.

Para matar el proceso que te deja sin recursos el ordenador, desde dentro de MySQL teclea
kill X

donde X es el número de proceso (primera columna de show full processlist)

miércoles, 10 de noviembre de 2010

Incrementar campo de MySQL con un único update

Si se quiere actualizar un campo de una tabla de MySQL sin tener que hacer un select antes, se puede hacer con :

UPDATE table SET table.field = table.field + 1 where id = 'id';