El futuro de MySql

Como comentaba en el post anterior, la compra de Sun por parte de Oracle ha levantado alarmas sobre el futuro de MySQL, una de las bases de datos más utilizadas (si no la-más-utilizada) en el mundo del desarrollo web, fundamentalmente por su carácter de software libre — sin ir más lejos, cientos de CMS como WordPress, Joomla o Drupal la utilizan de forma preferente o exclusiva, por lo que la posibilidad de que Oracle decidiera detener su desarrollo para favorecer sus propios sistemas de bases de datos (propietarios y de pago) se presenta para algunos como una amenaza real al futuro de sus aplicaciones.

Pero… ¿existen verdaderamente razones para estas preocupaciones? Creo que no, y es más, creo que temer por el futuro de MySQL es no entender las ventajas del software libre, o peor aún, pensar que “software libre = software gratis”… Habría que agregar también que es en puntos como este donde se aprecia la diferencia práctica entre el código abierto y el software libre: a pesar de las diferentes concepciones que podríamos encontrar al respecto (por ejemplo, la definición “oficial” de código abierto, de la Open Source Initiative se parece más bien a una definición de software libre), podríamos reducir didáctica e ilustrativamente su diferencia al hecho de que en su sentido más básico, “código abierto” hace referencia al simple hecho de que es posible ver el código fuente de un programa. En este sentido, cualquier programa escrito en un lenguaje interpretado (PHP, Perl, Python, Ruby [on Rails]) distribuido públicamente caería en la definición de “código abierto” (a menos que por alguna razón “especial” su autor decidiera ofuscar el código).

Un ejemplo de lo anterior podría ser Movable Type, que en lo fundamental siempre ha sido de “código abierto”: el programa es puro código fuente interpretado, pero hasta hace poco no existía la libertad de distribuir una versión modificada, la que existe sólo a partir de su licenciamiento con la GPL. Es entonces cuando las cuatro libertades para usuarios de software cobran sentido: no se trata de una razones puramente filosóficas o políticas (aunque también lo es) ni de una posición utópica o radical (como si ello fuera algo malo)… software libre no es lo mismo que código abierto.

¿Y qué tiene que ver esto con MySQL? Que justamente, su carácter de software libre asegura un futuro protegido: si Oracle decide detener su desarrollo, cualquier grupo de desarrollo podrá tomar la última versión publicada bajo la GPL y continuar el desarrollo, creando un fork… con otro nombre (si Oracle decide proteger su marca), con nuevas metas, con otras personas participando; agregando nuevas características o simplemente mejorando su seguridad y rendimiento o con cualquier otro plan de desarrollo.

No es una posibilidad utópica: ha pasado un montón de veces y seguirá pasando. Ubuntu es un fork de Debian, WordPress es un fork de b2, Webkit es un fork de KHTML e incluso el sistema operativo de Apple, Mac OS X es un fork de Nextstep, que a su vez es un fork de BSD (que es una variante de UNIX).

¿Y si Oracle no detiene el desarrollo de MySQL sino que lo transforma en un producto de software libre de pago? Está dentro de sus libertades, mientras siga publicando su código fuente. Y esto tampoco sería el peor de los escenarios: del mismo modo, cualquier grupo podría dedicarse a distribuir ejecutables compilados a partir del código fuente, y en este caso también hay referentes —CentOS es una distribución de GNU/Linux compilada a partir del código fuente liberado por Red Hat, una distribución comercial de Linux (y una de las de mayor tradición).

De cualquier modo, los primeros pasos para asegurar el futuro de MySQL ya se han dado: uno de los creadores de esta base de datos ha anunciado la creación de la Open Database Alliance para coordinar el desarrollo colaborativo en torno a MySQL.

Y los más paranoicos se alegrarán de saber que ya existen un par de fork’s totalmente compatibles con MySQL y que fácilmente podría convertirse en su sucesor: MariaDB, una rama de MySQL desarrollada en comunidad que mantendrá la compatibilidad con los nuevos lanzamientos de MySQL, y Drizzle, un fork modular basado en MySQL 6.0 y desarrollado por los propios ingenieros de MySQL (ahora SUN) … y quién sabe, si Oracle decide finalmente jubilar a MySQL, quizás podríamos tener un sucesor que no sea solamente una copia sino una nueva y mejor base de datos.

Oracle compra Sun

El anuncio se realizo el día de hoy. De acuerdo a los comunicados de prensa de SUN y de Oracle (en inglés) anunciando el movimiento.

Después de que las conversaciones de adquisición con IBM no se concretaron, Oracle, en una movida sorpresa, llegó a un acuerdo para comprar Sun por 7.400 millones de dólares.

Según su comunicados el motivo más importante recae en dos de las propiedades más valiosas de Sun: Java y Solaris.

La Junta Directiva de Sun aprobó la compra de forma unánime, se hará efectiva en verano después de que los accionistas y el gobierno estadounidense den su aprobación.

Recordemos también que Sun compró MySQL hace un poco más de un año, lo cual significa que ahora pasa a ser controlado por Oracle.

Lo realmente procupante de esta operación es el futuro de MySQL como el manejador de bases de datos estandard de aplicaciones web y hasta hace poco de ERPS y aplicaciones de misión critica. Es por muchos conocido que muchas empresas empezaron a migrar sus aplicaciones de misión critica y core bussines a MySQL. Esto obedecía principalmente a la situación económica, a el hecho de que MySQL tenia ahora el motor transaccional innodb que le permitía cumplir con los estandares de ACID (ACID compliant) y por supuesto a que en manos de SUN podrías obtener un buen contrato de soporte 24 x 7 365 y en tu idioma. Muchos pensamos que estos factores mostraban a MySQL como un producto bien madurado y por evolución natural lo colocaría en una posición de líder indiscutible en la industria de los RDBMS.

Sin embargo en mi muy particular punto de vista, es una movida muy conveniente para Oracle, ya que la mayoría de las aplicaciones de Oracle están desarrolladas en Java. Por lo que ahora sera capaz de ofrecer soluciones completas (Hardware, Software y Tupperware), usando sus recién adquiridos; los míticos servidores T con procesadores Sparc, el sistema operativo Solaris, BEA Web logic como application server y por supuesto Oracle 10g como RDBMS, lo que dejaría a MySQL y a Glassfish fuera del esquema principal de negocio y por supuesto, muy probablemente dejaran de recibir soporte en algún tiempo.

Y pensando en que Oracle no ha figurado por ser una empresa cercana al open source, al menos a la comunidad que lo conforma, entonces nos queda pensar que el impacto para los productos (al menos los que compiten con su catalogo actual), seria negativo

Si esto sucede seria una verdadera lastima y el impacto para la red puede ser muy fuerte ya que MySql esta instalado en la gran mayoría de los web servers en el mundo y por supuesto el hecho de que el acuñado termino LAMPP perderia la «M». Me han contactado ya muchos miembros de la comunidad open source y algunos tienen ya la idea muy clara de que debemos empezar a buscar un reemplazo digno. Algunos ya están probando Firebird, otros de hecho están pensando en formar ya un nuevo proyecto en que se incluya código de Postgresql y Firebird y hacer un nuevo RBDMS incluyendo alguno de los motores opensource ya existentes que tenga soporte de ACID .

Afortunada o desafortunadamente no sabemos que rumbo vaya a tomar Oracle al respecto pero para algunos es ya un hecho que se acerca la muerte de MySQL como standard de la comunidad Open Source, algunos incluso lo piensan de ese modo – según sus palabras «No trabajaría con el de nuevo si pertenece a ORACLE.»

Instalar Oracle 10g release 2 en Ubuntu Edgy

Lo primero es descargarnos desde el sitio de oracle (www.oracle.com) el fichero con la base de datos. Tienes que tener cuenta en oracle, si no es tu caso registrate en la propia pagina web.

10201_database_linux32.zip (668,734,007 bytes) (cksum – 2737423041)

Guardamos el archivo descargado y lo descomprimimos en una carpeta. Observa que al descomprimir hay un fichero denominado “runInstaller“, este es el fichero que usaremos para iniciar la instalacion de Oracle. pero no ahora, antes tenemos que realizar una serie de comprobaciones y crear al usuario de oracle.

Para la correcta instalacion asegurate de tener instalados los siguientes paquetes:

gcc
libaio
lesstif2
lesstif2-dev
make
rpm
libc6
libstdc++5
binutils
libmotif

comprueba que los tienes instalados por ejemplo consultando via Synaptic y si no los tienes instalalos mediante apt-get

como root crea las siguientes enlaces simbolicos:


ln -s /usr/bin/awk /bin/awk
ln -s /usr/bin/rpm /bin/rpm
ln -s /usr/bin/basename /bin/basename

La documentacion de Oracle dice que el sistema debe tener 512Mb minimo de RAM y 1 Gb de swap.

Para ver la cantidad de RAM y swap ejecuta:

grep MemTotal /proc/meminfo

Para ver el espacio libre en disco ejecuta:

df -k

Es necesario tambien a justar algunos parametros del kernel. Para ver la configuración actual de nuestro sistema ejecuta:

/sbin/sysctl -a | grep sem/sbin/sysctl -a | grep shm/sbin/sysctl -a | grep file-max/sbin/sysctl -a | grep ip_local_port_range

Ahora edita el fichero /etc/sysctl.conf y añade o modifica estas líneas:


kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

Al reiniciar se leera la configuración del kernel de /etc/sysctl.conf y se aplicaran los cambios. Pero si queremos que los cambios se apliquen inmediatamente ejecutamos:

/sbin/sysctl -p

Para ver los límites del shell ejecutamos:

ulimit -a, que nos mostrará algo parecido a esto:

core file size (blocks, -c) 0data seg size (kbytes, -d)
unlimitedfile size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 2047
virtual memory (kbytes, -v) unlimited

Por defecto, hay un límite por usuario, de 1024 descriptores de fichero, y 2047 procesos. Editamos el fichero /etc/security/limits.conf para modificar estos valores:

* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536

Las dos últimas líneas imponen un límite inicial de 1024, pero permiten que un usuario aumente el límite a 65536 usando el comando ulimit -n 65536. Las dos primeras líneas limitan el número de procesos.

Añade lo siguiente a /etc/pam.d/login:

session required /lib/security/pam_limits.so

pam_limits.so es el módulo que procesa la configuración del fichero /etc/security/limits.conf que cambiamos antes.

creamos ahora el usuario de oracle y los grupos:

Para ver si ya existen escribe:
grep oinstall /etc/group
grep dba /etc/group
grep nobody /etc/group
id oracle
id nobody

Si no existen crealos con:


/usr/sbin/groupadd oinstall
/usr/sbin/groupadd dba
/usr/sbin/groupadd nobody
/usr/sbin/useradd -c “Oracle Software Owner” -g oinstall -G dba oracle
/usr/sbin/useradd -g nobody nobody
# cambiamos el password del usuario oracle
passwd oracle

Si tienes problemas usa el menu principal (Administracion > Usuarios y grupos) para crear el usuario oracle y añadirlo a los grupos oracle y dba. Seria tambien recomendable que le dieras
permisos de administracion.

Creamos el directorio base de oracle (/u01/app/oracle), y opcionalmente un directorio de datos para las bases de datos que creemos (/u02/oradata):

mkdir -p /u01/app/oracle
mkdir -p /u02/oradata
chown -R oracle :o install /u01 /u02
chmod -R 775 /u01 /u02

Cuando no creamos un directorio de datos, oracle usa /u01/app/oracle/oradata. Cada base de datos ocupa un subdirectorio del directorio de datos.

conectate como usuario oracle y añade esto al fichero /home/oracle/.bash_profile:

umask 022
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=/u01/app/oracle/product/10.1.0/db_1; export ORACLE_HOME
ORACLE_SID=test; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
ORACLE_OWNER=oracle; export ORACLE_OWNER
#TNS_ADMIN=/home/oracle/config/10.1.0 export TNS_ADMIN
NLS_LANG=SPANISH_SPAIN.WE8ISO8859P1; export NLS_LANG
#ORA_NLS10=${ORACLE_HOME}/db_1/nls/data; export ORA_NLS10
CLASSPATH=${CLASSPATH}:${ORACLE_HOME}/jdbc/lib/classes12.zip
LD_LIBRARY_PATH=${ORACLE_HOME}/lib; export LD_LIBRARY_PATH
DISABLE_HUGETLBFS=1; export DISABLE_HUGETLBFS
TEMP=/tmp; export TEMP
TMPDIR=/tmp; export TMP
PATH=$PATH:/u01/app/oracle/product/10.1.0/db_1/bin; export PATH

Crea tambien estos directorios:

mkdir -p /home/oracle/config/10.1.0
mkdir /var/lock/subsys

Vale nos va tocando ya la instalacion grafica:

si estamos en una maquina diferente a la que queremos instalar oracle tenemos que exportar el display en nuestra maquina local y ejecutar:

xhost +
su
export display :0.0

para dar permisos sobre nuestro entorno de ventanas. luego nos conectamos a la maquina remota donde queremos ejecutar la instalacion y exportamos la variable DISPLAY

export DISPLAY=<tu ip local>:0.0

En el caso de que queramos instalar sobre la misma maquina donde nos encontramos (como en el ejemplo). basta con iniciar las X como usuario “oracle” y en el escritorio abrir una consola de comandos. nos desplazamos hacia la carpeta donde descomprimimos el fichero con la base de datos y ejecutamos:

./runInstaller -ignoreSysPreReqs

Ponemos el flag “-ignoreSysPreReqs” porque por defecto se espera instalar en una maquina Red Hat, y fallaria la comprobacion de seguridad al comprobar que nuestro sistema operativo no es ese. con este flag le forzamos a que continue la instalacion independientemente del sistema que tengamos.

Comienza el proceso de instalación:

Aparece la pantalla de bienvenida.Pulsa en continuar:

Selecciona el tipo de instalación. Yo elegí Standard:

Comprueba si tu maquina cumple los requisitos necesarios (Yo no los pase pero continue):

Selecciona Opción de configuración:

Selecciona la configuración de la base de datos:

Especificar Opciones de configuración:

Seleccionar opción de conexión a la base de datos:

Pulsa en Continuar:

Especificar opciones de copia de seguridad (seleccione valores por defecto):

Te pide password para los usuarios de la base de datos, yo seleccione la misma para todos, usa alguna que recuerdes fácilmente:

Resumen de opciones seleccionadas:

Comienza el proceso de instalación de ficheros en el sistema:

Llega un momento que se detiene y nos pide ejecutar 2 scripts:

abres una consola de comandos como “root” los ejecutas y vuelves a pulsar el botón de continuar:

Pulsa en continuar:

Pulsa en continuar:

Ejecución de los servicios automáticos. Pulsa en continuar:

Termina la instalación de la base de datos y al finalizar te indica las rutas URL de las aplicaciones (anotarlas):

Ejemplo de sesion mediante iSQLPlus:

   

Ejemplo de administración de la base de datos con la aplicación web. nota: debes loguearte como sys o dba y con la opcion “sysdba” no normal.

Con esta aplicación web puedes administrar toda la base de datos y crear por ejemplo las tablas de la base de datos y los usuarios que accederán a ellas:

Aunque yo la verdad prefiero el modo consola (con sqlplus) o en su defecto usar el TOAD.

Para arrancar Oracle en modo consola:

te conectas como usuario oracle, asegúrate que tienes cargadas las variables de entornor, ORACLE_HOME, ORACLE_SID, etc. entonces desde consola:

primero paras el listener:

lsnrctl
stop
exit;

despues te conectas a sqlplus:

sqlplus /nolog
connect sys@test as sysdba
startup


Para parar oracle en modo consola:

primero activa el listener:

lsnrctl
start
exit

y luego te conectas con sqlplus:

sqlplus /nolog
connect sys as sysdba
shutdown

o puede que necesites hacer un shutdown immediate

shutdown inmediate

en el caso de que no se cerrara correctamente haz un ps -ef | grep oracle y vete matando los procesos.