Tenemos la siguiente tabla: Tres.
mysql: DESCRIBE Tres;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| StatusID | int(11) | NO | PRI | NULL | auto_increment |
| SOID | int(6) | NO | PRI | NULL | |
| IP_ADDR | varchar(20) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
Ahora vamos a ver los indices:
mysql> SHOW INDEXES FROM Tres;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Tres | 0 | PRIMARY | 1 | Status_ID | A | 12 | NULL | NULL | | BTREE | |
| Tres | 1 | SOID | 1 | SOID | A | NULL | NULL | NULL | | BTREE | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
2 rows in set (0.00 sec)
Tenemos por indice a el Status_ID es una tipo de dato int de 6 digitos, y por default es indice.
Despues vemos a SOID varchar de 6 caracteres, no es Key pero es indice, este valor es nuestra clave, ya que nosotros vamos a hacer busquedas basadas en este campo.
Y ademas no es unico, es un dato que se puede repetir mas de 1 vez.
Ya hemos capturado varios registros, vamos a verlos:
mysql> select * from Tres;
+-----------+-------+--------------+
| Status_ID | SOID | IP_ADDR |
+-----------+-------+--------------+
| 1 | 20000 | 192.168.1.1 |
| 2 | 20001 | 192.168.1.2 |
| 3 | 20002 | 192.168.1.3 |
| 4 | 20003 | 192.168.1.4 |
| 5 | 20004 | 192.168.1.5 |
| 6 | 20005 | 192.168.1.6 |
| 7 | 20006 | 192.168.1.7 |
| 8 | 20001 | 192.168.1.8 |
| 9 | 20002 | 192.168.1.9 |
| 10 | 20003 | 192.168.1.10 |
| 11 | 20001 | 192.168.1.11 |
| 12 | 20002 | 192.168.1.12 |
+-----------+-------+--------------+
12 rows in set (0.00 sec)
Tenemos que varios SOID se han repetido, vamos a ver si nuestros indices estan funcionando:
mysql> explain select * from Tres where SOID=20001;
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | Tres | ALL | SOID | NULL | NULL | NULL | 12 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
Podemos ver que no, ya que la tabla en total tiene hasta ahorita 12 registros, y cuando hacemos esta busqueda usando"WHERE" el motor de mysql esta haciendo un barrido total a la tabla, por lo tanto no esta usando nuestros indices, sabiendo que SOID es un indice.
El problema radica en que como SOID es un tipo varchar, debemos cerrar entre comillas el valor para que mysql lo tome como lo que es, si no lo hacemos como en el caso anterior, lo toma como dato numerico, por ello falla.
Ahora vamos a ver la diferencia:
mysql> EXPLAIN select * from Tres where SOID="20001";
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
| 1 | SIMPLE | Tres | ref | SOID | SOID | 8 | const | 3 | Using where |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
1 row in set (0.00 sec)
Vean, ahora si los uso, ya que solo nos estra regresando los 3 registros que tiene con ese valor, y este dato lo esta sacando de los indices, ya no tuvo que hacer un barrido completo a la tabla.
Esto salva preciado CPU, acceso a disco que sumado es tiempo de respuesta muy importante cuando estamos hablando de tablas con mas de 100,000 registros.
Hasta la proxima!!!
Hola que tal, mi nombre es Pedro Moreno, soy Ingeniero en Sistemas Computacionales. He vivido y sigo viviendo en la bella ciudad de Tijuana, B.C., Mexico. Mi edad hasta ahorita es de 29 años y contando. Este blog lo voy a utilizar para ir contando las altas y bajas que tengo con los sistemas operativos que tanto aprecio como lo son Unix/Linux en especial FreeBSD/Centos. No quiero llevarme lo poco que se de ellos, por ello prefiero aqui plasmarlo aqui.
domingo, 8 de noviembre de 2009
miércoles, 4 de noviembre de 2009
FreeBSD 7.X: phpMyAdmin 3.x
Esta ves le toca el turno a phpMyAdmin, ya estoy muy acostumbrado a usarlo, este se localiza en:
root#whereis phpmyadmin
phpmyadmin: /usr/ports/databases/phpmyadmin
Nos vamos hacia alla y ejecutamos:
root#make install clean
Nos va a salir la pantalla donde podemos agregar ciertas funcionalidades, yo en lo personal agrego todas, una vez que le damos click en el boton "OK" empieza la klabaza.
Ya que termina, este guarda sus archivos php en donde freebsd pone a apache:
/usr/local/www
Ingresamos a esa ruta...
cd /usr/local/www/phpMyAdmin
Una vez aqui dentro, dice el manual de phpMyAdmin que debemos crear un folder de nombre config, pero como estamos trabajando con el root, todo lo que hagamos se va a ser con los permisos para el root.
Apache se ejecuta con el usuario propio que es www y el grupo del mismo nombre, entonces una vez creado el folder "config" debemos cambiarle ciertos atributos a ese folder.
Algo asi:
mkdir config
chown www:www config
chmod 660 config
De aqui tenemos que agregar unos alias a apache apuntando a el folder de phpMyAdmin, agregamos algo asi:
Alias /phpMyAdmin /usr/local/www/phpMyAdmin
Allow from all
AllowOverride All
Reiniciamos apache y probamos.
/usr/local/etc/rc.d/apache22 start
Cuando apuntemos a apache en el navegador, debemos irnos a
http://ipserver/phpMyAdmin
Y nos debe arrojar la pantalla de logeo de phpMyAdmin, algo asi:

Lo que sigue es configurar nuestro primer servidor mysql, para ello es necesario agregar a el mismo path de navegador esto:
/setup/
Y nos debe dar una pantalla parecida a esto:

Aqui empezamos la configuracion, si les dice un error que no puede localizar el folder config, chequen sus permisos antes de continuar.
Dentro de ese folder, crean un archivo llamado config.ini.php e igual permisos para apache.
Le damos un click en el boton "New Server" y empezamos...
No hay mucho que hacerle, dan de alta los parametros que creanc convenientes, salvan y existe un boton que dice "Display", le dan un click y les arroja toda la configuracion que ustedes eligie ron, la copean y la pegan en el archivo que crearon arriba config.ini.php, salvan y copean ese archivo a la ruta principal:
cp config.ini.php /usr/local/www/phpMyAdmin/
Se van en su navegar a el folder inicial de phpMyAdmin y ahora si se logean con algun usuario que tengan en mysql y deben llegar a la pantalla principal de phpMyAdmin y les debe arrojar las base de datos que tienen.
Nos vemos!!!
root#whereis phpmyadmin
phpmyadmin: /usr/ports/databases/phpmyadmin
Nos vamos hacia alla y ejecutamos:
root#make install clean
Nos va a salir la pantalla donde podemos agregar ciertas funcionalidades, yo en lo personal agrego todas, una vez que le damos click en el boton "OK" empieza la klabaza.
Ya que termina, este guarda sus archivos php en donde freebsd pone a apache:
/usr/local/www
Ingresamos a esa ruta...
cd /usr/local/www/phpMyAdmin
Una vez aqui dentro, dice el manual de phpMyAdmin que debemos crear un folder de nombre config, pero como estamos trabajando con el root, todo lo que hagamos se va a ser con los permisos para el root.
Apache se ejecuta con el usuario propio que es www y el grupo del mismo nombre, entonces una vez creado el folder "config" debemos cambiarle ciertos atributos a ese folder.
Algo asi:
mkdir config
chown www:www config
chmod 660 config
De aqui tenemos que agregar unos alias a apache apuntando a el folder de phpMyAdmin, agregamos algo asi:
Alias /phpMyAdmin /usr/local/www/phpMyAdmin
Allow from all
AllowOverride All
Reiniciamos apache y probamos.
/usr/local/etc/rc.d/apache22 start
Cuando apuntemos a apache en el navegador, debemos irnos a
http://ipserver/phpMyAdmin
Y nos debe arrojar la pantalla de logeo de phpMyAdmin, algo asi:
Lo que sigue es configurar nuestro primer servidor mysql, para ello es necesario agregar a el mismo path de navegador esto:
/setup/
Y nos debe dar una pantalla parecida a esto:
Aqui empezamos la configuracion, si les dice un error que no puede localizar el folder config, chequen sus permisos antes de continuar.
Dentro de ese folder, crean un archivo llamado config.ini.php e igual permisos para apache.
Le damos un click en el boton "New Server" y empezamos...
No hay mucho que hacerle, dan de alta los parametros que creanc convenientes, salvan y existe un boton que dice "Display", le dan un click y les arroja toda la configuracion que ustedes eligie ron, la copean y la pegan en el archivo que crearon arriba config.ini.php, salvan y copean ese archivo a la ruta principal:
cp config.ini.php /usr/local/www/phpMyAdmin/
Se van en su navegar a el folder inicial de phpMyAdmin y ahora si se logean con algun usuario que tengan en mysql y deben llegar a la pantalla principal de phpMyAdmin y les debe arrojar las base de datos que tienen.
Nos vemos!!!
FreeBSD 7.x: Instalando Bacula Server 3.x
Ya compilamos bacula-server con soporte para mysql. Bacula almacena los archivos para crear su base de datos en:
/usr/local/share/bacula/
Asi que nos vamos hasta ahi:
cd /usr/local/share/bacula/
El manual dice que mysql debe estar ya funcionando. Y debemos ejecutar los siguientes scripts:
root#./grant_mysql_privileges
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_privCreate_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
localhost root Y Y Y Y Y Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y Y Y Y 0 00 0
miserver.local root Y Y Y Y Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y Y Y Y Y 00 0 0
127.0.0.1 root Y Y Y Y Y Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y Y Y Y 0 00 0
localhost N N N N N N N N N N N N N N NN N N N N N N N N N N N N 0 00 0
miserver.local N N N N N N N N N N N N N NN N N N N N N N N N N N N N 00 0 0
localhost bacula N N N N N N N N N N N N N N NN N N N N N N N N N N N N 0 00 0
% bacula N N N N N N N N N N N N N N N NN N N N N N N N N N N N 0 0 00
Privileges for bacula granted on bacula.
Luego..
root#./create_mysql_database
Creation of bacula database succeeded.
Por ultimo:
./make_mysql_tables
Creation of Bacula MySQL tables succeeded.
Listo!!!
/usr/local/share/bacula/
Asi que nos vamos hasta ahi:
cd /usr/local/share/bacula/
El manual dice que mysql debe estar ya funcionando. Y debemos ejecutar los siguientes scripts:
root#./grant_mysql_privileges
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_privCreate_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
localhost root Y Y Y Y Y Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y Y Y Y 0 00 0
miserver.local root Y Y Y Y Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y Y Y Y Y 00 0 0
127.0.0.1 root Y Y Y Y Y Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y Y Y Y 0 00 0
localhost N N N N N N N N N N N N N N NN N N N N N N N N N N N N 0 00 0
miserver.local N N N N N N N N N N N N N NN N N N N N N N N N N N N N 00 0 0
localhost bacula N N N N N N N N N N N N N N NN N N N N N N N N N N N N 0 00 0
% bacula N N N N N N N N N N N N N N N NN N N N N N N N N N N N 0 0 00
Privileges for bacula granted on bacula.
Luego..
root#./create_mysql_database
Creation of bacula database succeeded.
Por ultimo:
./make_mysql_tables
Creation of Bacula MySQL tables succeeded.
Listo!!!
FreeBSD 7.X Instalar mysql 5.1
El manual dice:
cd /usr/local/mysql
bin/mysql_install_db --user=mysql
bin/mysqld_safe &
Pero esta mal, la ruta es:
/usr/local/bin/
Asi:
root#cd /usr/local/bin
root#./mysql_install_db --user=mysql
root#sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
mysql mysqld 73127 10 tcp4 *:3306 *:*
root sendmail 650 4 tcp4 127.0.0.1:25 *:*
root sshd 644 3 tcp4 *:22 *:*
Ahi podemos ver el servicio arriba, lo que sigue es agregar el parametro en /etc/rc.conf para que cada que arranquemos el servidor inicie el servicio automaticamente.
Agregamos esto a /etc/rc.conf:
##############################################################
# mysql server 5.1
##############################################################
mysql_enable="YES"
# mysql_limits (bool): Set to "NO" by default.
# mysql_dbdir (str): Default to "/var/db/mysql"
# mysql_args (str): Custom additional arguments to be passed
Si no agregan al menos el parametro: mysql_enable="YES", cuando ejecuten /usr/local/etc/rc.d/mysql-server start, nunca va a ejecutarse el servicio.
Ya si desean modificar los parametros globales de mysql, deben crear el archivo my.cnf en /usr/local/etc, este archivo cuando arranca mysql lo lee.
Animo!!!
cd /usr/local/mysql
bin/mysql_install_db --user=mysql
bin/mysqld_safe &
Pero esta mal, la ruta es:
/usr/local/bin/
Asi:
root#cd /usr/local/bin
root#./mysql_install_db --user=mysql
root#sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
mysql mysqld 73127 10 tcp4 *:3306 *:*
root sendmail 650 4 tcp4 127.0.0.1:25 *:*
root sshd 644 3 tcp4 *:22 *:*
Ahi podemos ver el servicio arriba, lo que sigue es agregar el parametro en /etc/rc.conf para que cada que arranquemos el servidor inicie el servicio automaticamente.
Agregamos esto a /etc/rc.conf:
##############################################################
# mysql server 5.1
##############################################################
mysql_enable="YES"
# mysql_limits (bool): Set to "NO" by default.
# mysql_dbdir (str): Default to "/var/db/mysql"
# mysql_args (str): Custom additional arguments to be passed
Si no agregan al menos el parametro: mysql_enable="YES", cuando ejecuten /usr/local/etc/rc.d/mysql-server start, nunca va a ejecutarse el servicio.
Ya si desean modificar los parametros globales de mysql, deben crear el archivo my.cnf en /usr/local/etc, este archivo cuando arranca mysql lo lee.
Animo!!!
Centos 5.x rsync para sincronizar 2 directorios remotos
Deseo sincronizar el directorio de un servidor en otro servidor como respaldo:
rsync -r -a -v -e "ssh -l root" --delete /opt/DATA/mfg/ root@192.168.2.44:/opt/bakmfg
Con esto hago una copia de un servidor a otro.
rsync -r -a -v -e "ssh -l root" --delete /opt/DATA/mfg/ root@192.168.2.44:/opt/bakmfg
Con esto hago una copia de un servidor a otro.
martes, 3 de noviembre de 2009
FreeBSD, accesando disco externo USB
Cuando prendo el disco aparece lo siguiente en /dev:
da0
da0s1
da0s1c
da0s1d
da0 --> dispositivo
da0s1 --> slice
da0s1c --> particion raw
da0s1d --> esta es la buena...
Ahi que recvisar que todo esta bien con un fsck:
bacula# fsck -p -t ufs /dev/da0s1d
/dev/da0s1d: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/da0s1d: clean, 24606804 free (20 frags, 3075848 blocks, 0.0% fragmentation)
Listo podemos montarla y usarla.
bacula# mkdir usb
bacula# mount -t ufs /dev/da0s1d /mnt/usb/
A usarla, animo!!!
da0
da0s1
da0s1c
da0s1d
da0 --> dispositivo
da0s1 --> slice
da0s1c --> particion raw
da0s1d --> esta es la buena...
Ahi que recvisar que todo esta bien con un fsck:
bacula# fsck -p -t ufs /dev/da0s1d
/dev/da0s1d: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/da0s1d: clean, 24606804 free (20 frags, 3075848 blocks, 0.0% fragmentation)
Listo podemos montarla y usarla.
bacula# mkdir usb
bacula# mount -t ufs /dev/da0s1d /mnt/usb/
A usarla, animo!!!
FreeBSD: Configurar acceso via proxy.
Supongamos que estas detras de una red que esta protegida por un web proxy como squid, y ese proxy tiene la direccion 192.168.1.3 escuchando por el puerto 3128 y ademas se debe uno autentificar, usario+password, debemos hacer esto en freebsd para que nuestro usuario pueda salir por ese proxy.
Abrir el archivo .cshrc, ya que yo uso csh en freebsd y agregar estos parametros:
setenv HTTP_PROXY "http://192.168.1.3:3128"
setenv HTTP_PROXY_AUTH "basic:*:miusuario:password"
Salvamos, nos logeamos de nuevo y revisamos:
root#env
...
REMOTEHOST=192.168.1.55
EDITOR=ee
PAGER=less
HTTP_PROXY=http://192.168.1.3:3128
HTTP_PROXY_AUTH=basic:*:miusuario:password
Aqui podemos ver que ya tenemos a nivel de este usuario los datos de mi proxy, ahora si podemos accesar la web sin problemas.
Aclarando, este equipo no tiene nada grafico todo es atraves de la consola.
Por ultimo, nunca he logrado configurar el proxy con autentificacion cuando lo estoy instalando via ftp, cuando aparece la pantalla de donde elijes que metodo de instalacion vas a usar, ahi solo te pide el ip del proxy y el puerto, aunque pongas la forma larga como:
192.168.1.3:3128@username:password
Nunca me ha funcionado, asi lo que hago es hacerlo manualmente, como?
Bien, una vez que inicia la instalacion, y cuando ya entra a la parte donde tiene que ir a el ftp que elejistes y sale el error que dice, que no puede resolver el nombre del servidor que elejimos, es por que el proxy ya hizo se klabaza.
Aqui ya tenemos una consola alt+f4, ahi podemos ingresar todo, no tenemos todos los comandos, pero si los basicos como: ifconfig, route, set.
Con ifconfig agregamos la ip
ifconfig tarjeta ip netmask, algo asi:
ifconfig fxp0 192.168.1.220 255.255.255.0
Con agregamos nuestro default gateway:
route add default 192.168.1.1
Con set aregamos las variables del proxy:
set HTTP_PROXY http://192.168.1.3:3128
set HTTP_PROXY_AUTH basic:*:username:password
Ahora si podemos elejir la opcion ftp, no la ftp con proxy, solo ftp y ya podran hacer la instalacion via remota, saludos!!!
Abrir el archivo .cshrc, ya que yo uso csh en freebsd y agregar estos parametros:
setenv HTTP_PROXY "http://192.168.1.3:3128"
setenv HTTP_PROXY_AUTH "basic:*:miusuario:password"
Salvamos, nos logeamos de nuevo y revisamos:
root#env
...
REMOTEHOST=192.168.1.55
EDITOR=ee
PAGER=less
HTTP_PROXY=http://192.168.1.3:3128
HTTP_PROXY_AUTH=basic:*:miusuario:password
Aqui podemos ver que ya tenemos a nivel de este usuario los datos de mi proxy, ahora si podemos accesar la web sin problemas.
Aclarando, este equipo no tiene nada grafico todo es atraves de la consola.
Por ultimo, nunca he logrado configurar el proxy con autentificacion cuando lo estoy instalando via ftp, cuando aparece la pantalla de donde elijes que metodo de instalacion vas a usar, ahi solo te pide el ip del proxy y el puerto, aunque pongas la forma larga como:
192.168.1.3:3128@username:password
Nunca me ha funcionado, asi lo que hago es hacerlo manualmente, como?
Bien, una vez que inicia la instalacion, y cuando ya entra a la parte donde tiene que ir a el ftp que elejistes y sale el error que dice, que no puede resolver el nombre del servidor que elejimos, es por que el proxy ya hizo se klabaza.
Aqui ya tenemos una consola alt+f4, ahi podemos ingresar todo, no tenemos todos los comandos, pero si los basicos como: ifconfig, route, set.
Con ifconfig agregamos la ip
ifconfig tarjeta ip netmask, algo asi:
ifconfig fxp0 192.168.1.220 255.255.255.0
Con agregamos nuestro default gateway:
route add default 192.168.1.1
Con set aregamos las variables del proxy:
set HTTP_PROXY http://192.168.1.3:3128
set HTTP_PROXY_AUTH basic:*:username:password
Ahora si podemos elejir la opcion ftp, no la ftp con proxy, solo ftp y ya podran hacer la instalacion via remota, saludos!!!
Suscribirse a:
Entradas (Atom)