Uso de la linea de comando para MySQL – Tutorial
Esto es un tutorial introductorio (bastante bueno me permito decir). Si quieres una excelente lista de consulta rápida de comandos http://www.pantz.org/software/mysql/mysqlcommands.html
MySQL dispone de una interface/shell llamada mysql. Con ella podrás interactuar en forma rápida con tus bases de datos, especialmente si accedes a un servidor remoto, como es el caso de servidores web.
Tiene capacidades readline lo que fundamentalmente te permite recorrer el historial de entradas/comandos usando las teclas de cursor (arriba y abajo) y autocompletación usando [TAB].
En adelante suponemos:
Acceso a la linea de comando
Simplemente escribe mysql.
1 2 3 4 5 6 7 8 | $ mysql [ENTER] Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 22 Server version: 5.0.75-log Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> |
Asi es, tu prompt es ahora mysql>. Y como muy amigablemente te recibe es con un: Tipée help si necesita ayuda.
Super valiosa ayuda para usar la linea de comando
Simplemente escribe help.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | mysql> help For information about MySQL products and services, visit: http://www.mysql.com/ For developer information, including the MySQL Reference Manual, visit: http://dev.mysql.com/ To buy MySQL Network Support, training, or other products, visit: https://shop.mysql.com/ List of all MySQL commands: Note that all text commands must be first on line and end with ';' ? (\?) Synonym for 'help'. clear (\c) Clear command. connect (\r) Reconnect to the server. Optional arguments are db/host. ... (varios comandos) ... For server side help, type 'help contents' mysql> |
De aquí aprendemos 2 cosas muy importantes:
Simplemente escribe help contents.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | # ayuda en general mysql> help contents You asked for help about help category: "Contents" For more information, type 'help <item>', where <item> is one of the following categories: Account Management Administration Data Definition Data Manipulation Data Types Functions Functions and Modifiers for Use with GROUP BY Geographic Features Language Structure Storage Engines Stored Routines Table Maintenance Transactions Triggers # ayuda sobre comandos de adminstración mysql> help administration You asked for help about help category: "Administration" For more information, type 'help <item>', where <item> is one of the following topics: DESCRIBE FLUSH QUERY CACHE HELP COMMAND HELP STATEMENT # ayuda sobre comando DESCRIBE mysql> help describe Name: 'DESCRIBE' Description: Syntax: {DESCRIBE | DESC} tbl_name [col_name | wild] DESCRIBE provides information about the columns in a table. It is a shortcut for SHOW COLUMNS FROM. As of MySQL 5.0.1, these statements also display information for views. (See [HELP SHOW COLUMNS].) URL: http://dev.mysql.com/doc/refman/5.0/en/describe.html mysql> |
Creación de una cuenta de usuario para MySQL
MySQL tiene un subconjunto propio de usuarios y estos deben ser creados explícitamente.
1 2 3 4 | # sólo en MySQL 5.0.2+ # para versiones anteriores usa GRANT CREATE USER fanquito IDENTIFIED BY 'mipassword'; Query OK, 0 rows affected (0.01 sec) |
Esto crea una cuenta identificada como fanquito (aqui cuenta y usuario son sinónimos) en localhost, que es el host donde te encuentras ahora mismo, y es lo que la mayor parte de las veces necesitarás. Este nuevo usuario no tiene ningún privilegio, estos se asignan con GRANT. Luego este comando “CREATE USER” puedes servirte para crear una lista de usuarios de los cuales aún no sabes que tareas van a realizar. La forma más realista de crear nuevos usuarios es con GRANT.
Creación de una cuenta de usuario para MySQL con el comando GRANT
GRANT permite crear usuarios y asignarle privilegios al mismo tiempo.
A todo esto los privilegios determinan que operaciones puedes realizar en que bases de datos (y sus tablas). Por ejemplo:
Veamos:
1 2 3 4 5 | # crear el usuario "fanquito2" con password "mipassword" # que pueda leer y reescribir registros en todas las tablas de midb mysql> GRANT SELECT, UPDATE, DELETE ON midb.* TO fanquito2 IDENTIFIED -> by 'mipassword'; Query OK, 0 rows affected (0.01 sec) |
Si el usuario ya existe sólo asigna/reasigna los nuevos privilegios y en este caso no es necesario agregar “IDENTIFIED by ‘mipassword’”.
Mirando más de cerca el enunciado. “ON midb.*” determina donde será efectivos los privilegios.
Usa:
Si un usuario ha metido la pata, como por ejemplo, borrando todos los registros de una tabla de acceso colectivo (shú) le puedes dar una buena patada así:
1 2 3 4 | # revocar todos los privilegios en toda la base de datos # para el usuario fanquito2 mysql> REVOKE * ON rac.* FROM fanquito2; Query OK, 0 rows affected (0.01 sec) |
Si sólo quieres quitarle la posibilidad de seguir cambiando el estado de la base de datos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # averiguar que privilegios tiene el manos de hacha mysql> SHOW GRANTS FOR fanquito2; +----------------------------------------------------------------------+ | Grants for fanquito2@% | +----------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'fanquito2'@'%' IDENTIFIED BY PASSWORD '*CEE8' | | GRANT SELECT, UPDATE, DELETE ON `midb`.* TO 'fanquito2'@'%' | +----------------------------------------------------------------------+ 3 rows in set (0.00 sec) # revocar privilegios de escritura # para el usuario fanquito2 mysql> REVOKE UPDATE, DELETE ON rac.* FROM fanquito2; Query OK, 0 rows affected (0.00 sec) |
Muy bien. Con eso debiera dejar de dar problemas el susodicho. Ahora si que si se trataba de la tabla con los datos de lo me debes:
1 2 3 | # borrar cuenta/usuario fanquito2 mysql> DROP USER fanquito2; Query OK, 0 rows affected (0.01 sec) |
Datos comunes en scripts PHP referentes a bases de datos
El script necesita saber tus datos de usuario en la base de datos para poder acceder en tu nombre. Generalmente se definen en una manera parecida a esta:
1 2 3 4 5 6 7 8 | define('DB_TYPE', 'mysql'); define('DB_NAME', 'midb'); # en el mismo servidor define('DB_HOST', 'localhost'); # en la base de datos sudb un servidor remoto define('DB_HOST', 'sudb.servidorremoto.com'); define('DB_USER', 'fanquito'); define('DB_PASS', 'mipassword'); |
La palabra reservada “define” es propia de PHP y asigna constantes. Estas a diferencia de las variables son superglobales o sea pueden ser accedidas desde cualquier función/clase (y no pueden ser redefinidas posteriormente).
Importación y exportación de tablas y bases de datos
Para empezar (que ingenuo fuí), una ventaja insuperable y que yo comúnmente aprovecho, por sobre una interface web como phpmyadmin, es la velocidad con que puedes importar y exportar tablas y bases de datos enteras.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # importar archivo sql # no importa la extension sql. sólo debe ser un archivo de texto # con instrucciones entendibles por MySQL mysql -uroot -pmipassword mibd < tubd.sql # exportar base de datos entera a archivo sql # sabiamente agregamos .sql pero no es necesario mysqldump -u root -pmipassword mibd > midb.sql # exportar sólo una tabla mysqldump -uroot -p mibd mitabla > mitabla.sql # exportar varias tablas mysqldump -uroot -p mibd mitabla mitabla2 mitabla 3 > mis3tabla.sql |
Fíjate que en el ultimo comando no escribimos la password, sólo “-p”. Esto es muy bueno si quieres mantener oculta tu password, tanto de ojos sobre tu hombro (como cuando aparecen sólo asteriscos en una página web) como de los logs del servidor.
1 2 3 | # usando la opción -p podrás ingresar tu password en una manera segura $ mysqldump -uroot -p mibd mitabla> mitabla.sql Enter password: |
Personalmente creo que en un ambiente distendido de trabajo como por ejemplo, el manejo normal de tu blog, es lícito escribir tu password en la linea de comando para posteriormente usar history y ejecutar comandos rápidamente. Depende de tí.
Comandos muy usados para consultar tus tablas
Vuelvo a decir que esta es la manera ideal de trabajar si quieres terminar antes de las 5 de la tarde para alcanzar a tomarte una cerveza antes de que llegue la noche.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | # mostrar todas las bases de datos mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | mibd | +--------------------+ 4 rows in set (0.00 sec) # trabajar con una en particular mysql> use mibd; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed # mostrar sus tablas mysql> show tables; +---------------------------------------------+ | Tables_in_rac | +---------------------------------------------+ | data_control | | data_record1 | | data_record2 | | data_source | | data_status_autotrader_control | | data_status_ebay_control | | data_status_exchangeandmart_control | | data_status_fish4_control | +---------------------------------------------+ 8 rows in set (0.00 sec) # mostrar estructura de una tabla en particular mysql> describe data_control; +--------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | shedule_on | tinyint(1) | NO | | 0 | | | admin | varchar(20) | NO | | | | | password | varchar(32) | NO | | | | | data | tinyint(1) | NO | | 1 | | +--------------+-------------+------+-----+---------+----------------+ 5 rows in set (0.02 sec) # en una tabla de autos (170000 aprox.) con varias # características (columnas) # quiero saber cuantos hay de cada uno (columna marca) mysql> select distinct(marca),count(id) as c from data_record1 group by -> marca order by c desc; +---------------+-------+ | marca | c | +---------------+-------+ | VAUXHALL | 32514 | | RENAULT | 30945 | | PEUGEOT | 29008 | | MERCEDES-BENZ | 22985 | | CITROEN | 21015 | | TOYOTA | 17921 | | FIAT | 16676 | ... etc ... +---------------+-------+ 100 rows in set (4.39 sec) # borrar todos los que no indican año mysql> delete from data_record1 where year=''; Query OK, 0 rows affected (0.11 sec) |
Definir password de root
Aclaremos que este root se refiere al usuario root del conjunto de usuarios de MySQL y no del sistema operativo. Son distintos. Cuando se instala MySQL viene el usuario root predefinido y sin password.
1 2 3 4 5 6 7 8 9 | # definir una password para root # primero seleccionamos la bases de datos "mysql" # esta es parte de MySQL y siempre existe mysql> USE mysql; mysql> UPDATE user SET password=PASSWORD("mipassword") WHERE user="root"; # recargar cache interno de MySQL mysql> FLUSH PRIVILEGES; |
Recuperar password de root
Sin comentarios.
Para esto debes ser root en el sistema operativo de tal manera que puedas reiniciar el demonio mysqld.
Te daré los pasos calcados. Haz lo mismo que yo nena.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | mysql> cabeza de pollo de nuevo olvidaste tu password >:( # asumir privilegios de root su[ENTER] password: # parar mysld $ service stop mysqld Stopping the mysqld service # iniciar mysqld sin cargar tabla de privilegios $ mysqld_safe --skip-grant-tables & Starting mysqld daemon with databases from /var/lib/mysql $ mysql -uroot ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (2) # si, no es na' así # dijo clarito: Starting mysqld daemon with databases from /var/lib/mysql $ cd /var/lib/mysql/ $ mysql -uroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.0.75-log Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. # reasignar password para root mysql> UPDATE user SET password=PASSWORD("mipassword") WHERE user="root"; Query OK, 3 rows affected (0.01 sec) Rows matched: 3 Changed: 3 Warnings: 0 # abandonar la linea de comando mysql> exit # reiniciar mysqld [17:47:40 root@zenwalk]$ service restart mysqld Restarting the mysqld service |
Muy bien, me he alargado bastante en esto que sólo iba a ser una entrentención mañanera antes de trabajar de veras. Así que ponte con unos comentarios tú también, vale, colega?
Posts relacionados:
3 comentarios
RSS feed para comentarios en este post
TrackBack URL


RSS Feed
sinh:
Muy interesante, me sirvio de mucho para exportar una bd de Windows 2000 Server a Centos y a Fedora.
Tenankius
Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.0.14) Gecko/2009091106 CentOS/3.0.14-1.el5.centos Firefox/3.0.14
Antonio:
Muy bueno, te felicito.
Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.14) Gecko/2009091008 Iceweasel/3.0.6 (Debian-3.0.6-3)
Juan Perez:
Un baño de humildad no te caeria nada mal
Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 (.NET CLR 3.5.30729)