TCP and UDP Ports for the vSphere Client

TCP and UDP Ports

Port

Purpose

Traffic Type

443 (Default)

HTTPS access

vSphere Client access to vCenter Server

vSphere Client access to ESXi hosts

vSphere Client access to vSphere Update Manager

Incoming TCP

902 (Default)

vSphere Client access to virtual machine consoles

Incoming and outgoing TCP, outgoing UDP

903

Remote console traffic generated by user access to virtual machines on a specific host.

vSphere Client access to virtual machine consoles

MKS transactions (xinetd/vmware-authd-mks)

Incoming TCP

Como cambiar la zona horaria en Linux desde una terminal

Cambiar la zona horaria de Linux desde una Terminal o línea de comandos es muy sencillo, bastan con ejecutar el comando "tzselect" y elegir nuestra zona horaria, por ejemplo supongamos que vivimos en Mexico y usamos la hora central, lo hacemos de la siguiente forma.
$ tzselect
Retorna un resultado como el siguiente.
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
1) Africa
2) Americas
3) Antarctica
4) Arctic Ocean
5) Asia
6) Atlantic Ocean
7) Australia
8) Europe
9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#?
Seleccionamos el número 2 que es Americas, luego el número 32 que es México y por último el número 1 que es el horario central.
Luego veremos una pantalla como la siguiente.
The following information has been given:Mexico
Central Time - most locations

Therefore TZ='America/Mexico_City' will be used.
Local time is now:      Tue Apr  8 12:35:22 CDT 2014.
Universal Time is now:  Tue Apr  8 17:35:22 UTC 2014.
Is the above information OK?
1) Yes
2) No
#?

Si todo está correcto seleccionamos "1" y listo.
Ahora si queremos que este cambio se haga permanentemente entre reinicios de nuestra PC, agregamos la siguiente línea en nustro archivo .profile
TZ='America/Mexico_City'; export TZ
Otra forma de hacer lo mismo es con los siguientes comandos.
 
$ rm /etc/localtime
$ ln -s /usr/share/zoneinfo/America/Mexico_City /etc/localtime

Respaldo automatizado de MySQL con MySQLDump

Generar archivo my.cnf
[client]
user=user
password=secret
routines
databases

Es conveniente cambiar permisos a este archivo con el comano

chmod 600 my.cnf

mysqldump --defaults-extra-file="my.cnf" database1 database2 database3 > database.sql

 

crontab -e
0 0 * * * mysqldump -u mysqluser -h localhost --routines --all-databases | gzip -9  > alldb.sql.gz > /dev/null

 

MySQL Tunning

C:\ProgramData\MySQL\MySQL Server 5.6

Dentro de [mysqld]

innodb_buffer_pool_size=1024M

wait_timeout = 350

Por defecto mysql cierra una conexión después de 8 horas sin recibir ninguna petición del cliente y sin que el cliente sea notificado de las mismas. En una aplicación web puede ser normal abrir un pool de conexiones desde un servidor (Tomcat p.ej) de forma que siempre haya conexiones de sobra sin usar. Esto en la práctica se traduce en que debemos hacer una de dos: - bien reconfigurar mysql (/etc/mysql/my.cnf) para aumentar el wait_timeout - o bien "refrescar" periodicamente las conexiones del pool para resetear el contador interno de timeout de mysql.

Los servidores de aplicaciones suelen tener también parámetros de configuración que nos ayudan: P.ej, Tomcat incluye también un sistema automático de pool de conexiones que en principio soluciona el problema. En la práctica lo minimiza pero aleatoriamente cada 2 o 3 semanas, por experiencia del que escribe estas líneas, vuelve a fallar (Tomcat versión 5).

Por tanto puede ser una buena opción el desabilitar el wait_timeout editando /etc/mysql/my.conf añadiendo la linea wait_timeout=0.
max_allowed_packet = 20M

En algunos casos se desea grabar archivos en MySQL. Por defecto el motor esta configurado para almacenar archivos con un tamaño máximo de 1MB, este valor se encuentra almacenado en la variable max_allowed_packets la cual determina el tamaño máximo de un paquete. El buffer de paquete se inicializa en net_buffer_lenght , pero puede crecer hasta max_allowed_packet cuando se necesita. Por defecto tiene un valor pequeño de 1MB. A partir de la versión 4 de MySQL, se puede incrementar el valor hasta 1 GB. El valor debe ser múltiplo de 1024. Para cambiar el valor solo se debe ejecutar un comando, es algo muy simple. En este caso se asigna un valor de 100MB

mysql> SET GLOBAL  max_allowed_packet=100*1024*1024;
Query OK, 0 rows affected (0.00 sec)

Después de ejecutar el comando si deseas verificar el valor de la variable max_allowed_packet se debe ejecutar el siguiente comando:

mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.00 sec)

Se debe reiniciar el servicio de MySQL y listo ya puedes almacenar archivos con tamaño máximo de 100MB.
skip-name-resolve

deshabilita la resolución de nombres, por lo que veremos al iniciar MySQL Warnings como los siguientes:

101202 15:43:44 [Warning] 'user' entry '@penny.systemadmin.es' ignored in --skip-name-resolve mode.

Nos esta indicando que no podrá aplicar los GRANTs relacionados con nombres al no poder resolver las IPs de los clientes: deberemos usar la IP en lugar del nombre en los GRANTs.

Al conectarse un cliente, primero va a buscar la inversa de la IP que se ha conectado al resolver, esperará al timeout y luego dejará seguir. En el caso de una aplicación web un tráfico moderado, veremos que se empezarán a colapsar tanto MySQL como Apache ya que se acumularán conexiones esperando el timeout del resolver.

Desactivación de validación de agrupamiento ONLY_FULL_GROUP_BY verificar que exista en el archivo de configuracion la siguiente linea activa:

sql-mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Cómo crear, modificar y eliminar un DSN mediante programación

Cómo crear, modificar y eliminar un DSN mediante programación
Por Enrique Martínez Montejo[Microsoft Most Valuable Professional - Visual Basic]
Última revisión: 14/08/2003

El siguiente artículo explica la manera de configurar un origen de datos
con nombre mediante programación, lo que proporcionará una flexibilidad mayor
a la hora de tener acceso a los datos, ya que el usuario no necesitará
explícitamente utilizar el Adminitrador de orígenes de datos ODBC para crear,
configurar, modificar y eliminar un DSN. Para ello utilizaremos la función API
SQLConfigDataSource incluída en la biblioteca de vínculos dinámicos
ODBC32.DLL, cuya declaración es la siguiente:

Private Declare Function SQLConfigDataSource Lib
"ODBCCP32.DLL" ( _

ByVal hwndParent As Long, ByVal fRequest As Long, _

ByVal lpszDriver As String, ByVal lpszAttributes As String)
As Long

Argumentos de la función

hwndParent

Manipulador de la ventana padre. Si el manipulador es nulo, no se
visualizará ningún cuadro de diálogo de configuración. Si por el contrario le
indicamos el valor de la propiedad hWnd de un formulario, se mostrará
el correspondiente cuadro de diálogo de configuración para validar que todos
los datos sean correctos. Si el orígen de datos con nombre ya existe, el cuado
de diálogo nos preguntará si deseamos sobreescribir el DSN ya existente.

fRequest

Tipo de petición. Éste argumento puede contener uno de los siguientes
valores:

Constante Valor Descripción
ODBC_ADD_DSN 1 Añade un nuevo DSN de usuario.
ODBC_CONFIG_DSN 2 Condigura (modifica) un DSN de usuario ya existente.
ODBC_REMOVE_DSN 3 Elimina un DSN de usuario existente.
ODBC_ADD_SYS_DSN 4 Añade un nuevo DSN de sistema.
ODBC_CONFIG_SYS_DSN 5 Modifica un DSN de sistema ya existente
ODBC_REMOVE_SYS_DSN 6 Elimina un DSN de sistema existente.

lpszDriver

La descripción del controlador que se utilizará. Éste es el nombre
presentado a los usuarios en lugar del nombre del controlador físico (archivo
DLL). Entre otros muchos, algunos valores pueden ser:

Microsoft Access Driver (*.mdb) Para bases de datos Microsoft Access.
Microsoft Excel Driver (*.xls) Para archivos de libros de trabajo de Microsoft Excel.
Microsoft Text Driver (*.txt; *.csv) Para archivos de texto con formato de tabla.
SQL Server Para bases de datos Microsoft SQL Server.
Microsoft dBASE Driver (*.dbf) Para archivos de base de datos dBASE.

Para conocer la descripción de los controladores que puede utilizar en su
sistema, revise las subclaves especificadas en la siguiente clave del Registro
de Windows:

HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INI

lpszAttributes

Lista de los atributos en forma de "nombre de clave=valor". Estas cadenas
deberán estar separadas por terminaciones Null. Los atributos especificados son
generalmente entradas predeterminadas específicas del controlador, y que se
incluyen en el Registro de Windows. No es necesario proporcionar todas las
entradas, ya que el controlador puede solicitárselas al usuario mediante un
cuadro de diálogo, siempre y cuando que en el parámetro
hwndParent se
haya establecido en Null.

Valor de retorno

La función devolverá 1 si ésta ha terminado correctamente, y 0 en caso de
error. Si al llamar a la función no existe ninguna entrada en el Registro de
Windows, la función devolverá 0.

Crear un DSN de usuario para Microsoft Access

Un origen de datos de usuario ODBC almacena la información de conexión al
proveedor de datos indicado, y sólo es visible y utilizable en el equipo
actual por el usuario indicado. Por cada nuevo orígen de datos de usuario, se
creará una subclave en la siguiente clave del Registro de Windows:

HKEY_CURRENT_USERSoftwareODBCODBC.INI

A continuación vamos a crear un nuevo DSN de usuario, que utilizará el
driver de Microsoft Access para conectarse con el origen de datos:

Dim dl As Long               ' Valor devuelto por la función API

Dim sPath As String          ' Ruta de la base de datos

Dim sAttributes As String    ' Aributos

Dim sDriver As String        ' Nombre del controlador

Dim sDescription As String   ' Descripción del DSN

Dim sDsnName As String       ' Nombre del DSN

Const ODBC_ADD_DSN As Long = 1
' Se creará un DSN de usuario

' Establecemos los atributos necesarios

sDsnName = "Ejemplo_DSN_Usuario"

sDescription = "Nuevo DSN de usuario para Access"

sPath = "C:Mis documentosBd1.mdb"

sDriver = "Microsoft Access Driver (*.mdb)"

' Los pares de cadenas acabarán en valor Null

sAttributes = "DSN=" & sDsnName & Chr(0)

sAttributes = sAttributes & "Description=" & sDescription & Chr(0)

sAttributes = sAttributes & "DBQ=" & sPath & Chr(0)

' Indicamos la ruta del archivo de información de grupos de trabajo

sAttributes = sAttributes & "SystemDB=C:WindowsSystemSystem.mdw" & Chr(0)

' El usuario que inicia sesión por defecto

sAttributes = sAttributes & "UID=Admin" & Chr(0)

' La contraseña del usuario por defecto

sAttributes = sAttributes & "PWD=123456" & Chr(0)

' Creamos el nuevo origen de datos de usuario especificado

dl = SQLConfigDataSource(0&, ODBC_ADD_DSN, sDriver, sAttributes)

If (dl = 1) Then

MsgBox "El DSN de usuario se ha creado correctamente."

Else

MsgBox "No se ha podido crear el DSN de usuario
especificado."

End If

Crear un DSN de sistema para Microsoft SQL Server

Un origen de datos de sistema ODBC almacena información acerca de cómo
conectarse al proveedor de datos indicado. Un origen de datos de sistema es
visible para todos los usuarios de un equipo, incluidos los servicios de NT. A
diferencia del lugar donde se almacena la información del DSN de usuario, por
cada nuevo orígen de datos de sistema se creará una subclave en la siguiente
clave del Registro de Windows:

HKEY_LOCAL_MACHINESOFTWAREODBCODBC.INI

A continuación vamos a crear un nuevo DSN de sistema, que utilizará el
driver de Microsoft SQL Server para conectarse con el origen de datos:

Dim dl As Long                          ' Valor devuelto por la función API

Dim sAttributes As String               ' Aributos

Dim sDriver As String                   ' Nombre del controlador

Dim sDescription As String              ' Descripción del DSN

Dim sDsnName As String
' Nombre del DSN

Const ODBC_ADD_SYS_DSN As Long = 4      ' Se creará un DSN de sistema

Const vbAPINull As Long = 0&            ' Puntero NULL

' Establecemos los atributos necesarios

sDsnName = "Ejemplo_DSN_Sistema"

sDescription = "Nuevo DSN de sistema para SQL Server"

sDriver = "SQL Server"

' Los pares de cadenas acabarán en valor Null

sAttributes = "DSN=" & sDsnName & Chr(0)

sAttributes = sAttributes & "Server=(Local)" & Chr$(0)

sAttributes = sAttributes & "Description=" & sDescription & Chr(0)

sAttributes = sAttributes & "Database=pubs" & Chr(0)

' Si deseamos utilizar la autenticación de Windows NT, deberemos de

' especificarlo en la cadena de atributos

sAttributes = sAttributes & "Trusted_Connection=True" & Chr(0)

' Creamos el nuevo origen de datos de usuario especificado.

' Si deseamos que aparezca el cuadro de diálogo, tendremos que

' especificar la propiedad «hWnd» del formulario donde se realiza

' la llamada a la función API.

dl = SQLConfigDataSource(vbAPINull, ODBC_ADD_SYS_DSN, sDriver, sAttributes)

If (dl) Then

MsgBox "Se ha creado el DSN de sistema."

Else

MsgBox "No se ha podido crear el DSN de sistema."

End If

Modificar un DSN de usuario para Microsoft dBASE Driver

Para que la función API modifique los valores que deseemos, necesariamente
tendremos que indicar el nombre del origen de datos de usuario (o de sistema)
así como el nombre del driver ODBC utilizado. Igualmente, el parámetro
fRequest
deberá de tener el valor de la constante ODBC_CONFIG_DSN (para modificar un
DSN de usuario) o
ODBC_CONFIG_SYS_DSN (para modificar un DSN de sistema).

A continuación vamos a modificar la ruta del directorio por defecto que
tenemos especificado en un DSN de usuario, el cual utiliza el driver ODBC de
Microsoft dBASE:

Dim dl As Long                     ' Valor devuelto por la función API

Dim sAttributes As String          ' Aributos

Dim sDriver As String              ' Nombre del controlador

Dim sDsnName As String
' Nombre del DSN

Const ODBC_CONFIG_DSN As Long = 2  ' Se modificará un
DSN de usuario

' Establecemos los atributos necesarios

sDsnName = "dBASE Files"

sDriver = "Microsoft dBASE Driver (*.dbf)"

' Los pares de cadenas acabarán en valor Null

sAttributes = "DSN=" & sDsnName & Chr(0)

sAttributes = sAttributes & "DefaultDir= C:Mis documentos" & Chr(0)

' Modificamos el origen de datos de usuario especificado

dl = SQLConfigDataSource(0&, ODBC_CONFIG_DSN, sDriver, sAttributes)

If (dl = 1) Then

MsgBox "El DSN de usuario se ha modificado correctamente."

Else

MsgBox "No se ha podido modificar el DSN de usuario
especificado."

End If

Si no se especifica el parámetro DefaultDir, el driver ODBC para
dBASE utilizará el directorio actual del sistema, salvo que en la cadena de
conexión especifiquemos explícitamente dicho parámetro.

Eliminar un DSN de sistema

Para eliminar un nombre de origen con nombre, simplemente deberemos de
especificar el nombre del DSN así como el driver ODBC utilizado. El parámetro
fRequest
deberá de tener el valor de la constante ODBC_REMOVE_DSN (para eliminar un DSN
de usuario) o ODBC_REMOVE_SYS_DSN (para eliminar un DSN de
sistema).

El siguiente ejemplo eliminará definitivamente un DSN de sistema:

Dim dl As Long                 ' Valor devuelto por la función API

Dim sDriver As String          ' Nombre del controlador

Dim sDsnName As String         '
Nombre del DSN

Const ODBC_REMOVE_SYS_DSN As Long = 6    ' Se eliminará un DSN
de sistema

' Establecemos los atributos necesarios

' CUIDADO: no dejar espacios en blanco entre el parámetro

' «DSN», el signo igual y el nombre del DSN (DSN=Nombre DSN)

sDsnName = "DSN=Ejemplo_DSN_Sistema"

sDriver = "SQL Server"

' Modificamos el origen de datos de usuario especificado

dl = SQLConfigDataSource(0&, ODBC_REMOVE_SYS_DSN, sDriver, sDsnName)

If (dl = 1) Then

MsgBox "El DSN de sistema se ha eliminado correctamente."

Else

MsgBox "No se ha podido eliminar el DSN de sistema
especificado."

End If

http://mvp-access.es/softjaen/vb6/api/odbc/sjtodbc002.htm

Extraer parte de un archivo tar

Supongamos que tenemos esta estructura de directorios y archivos:

directorio/
|-- subdirectorio-1
|   |-- archivo-11.txt
|   `-- archivo-12.dat
|-- subdirectorio-2
|   `-- archivo-20.ogg
`-- subdirectorio-3

Hemos creado un archivo TAR que contiene este árbol, y lo hemos guardado con el nombre directorio.tar, Posteriormente queremos mostrar el contenido de ese archivo *.tar, lo hacemos de la siguiente forma:

$ tar tvf directorio.tar
drwxr-xr-x usuario/grupo   0 2008-12-05 16:51 directorio/
drwxr-xr-x usuario/grupo   0 2008-12-05 16:51 directorio/subdirectorio-3/
drwxr-xr-x usuario/grupo   0 2008-12-05 16:52 directorio/subdirectorio-1/
-rw-r--r-- usuario/grupo   0 2008-12-05 16:51 directorio/subdirectorio-1/archivo-11.txt
-rw-r--r-- usuario/grupo   0 2008-12-05 16:51 directorio/subdirectorio-1/archivo-12.dat
drwxr-xr-x usuario/grupo   0 2008-12-05 16:52 directorio/subdirectorio-2/
-rw-r--r-- usuario/grupo   0 2008-12-05 16:52 directorio/subdirectorio-2/archivo-20.ogg

Y finalmente, si lo que queremos realmente es extraer sólo uno de los subdirectorios, haremos lo siguiente:

$ tar xvf directorio.tar directorio/subdirectorio-1
directorio/subdirectorio-1/
directorio/subdirectorio-1/archivo-11.txt
directorio/subdirectorio-1/archivo-12.dat

En este caso hemos extraido un subdirectorio entero, pero podemos extraer archivos concretos, además podemos usar wildcards como * o ? en el comando.

¿Y que pasa con los archivos comprimidos con Gzip o con Bzip2? Pues los comandos son prácticamente los mismos, sólo tenemos que añadir la letra z en caso de *.tar.gz o la letra j en el caso de *.tar.bz2.