Bases de Datos

MySQL 5.5 – Nuevas características

El paso de MySQL 5.5 a estable (Generally Available) el pasado 15 de diciembre ha pasado sin pena ni gloria. Vamos a ver que diferencias importantes tenemos con esta nueva release y como instalar dicha versión, ya que ha sufrido cambios.

Las principales características que de la versión 5.5 de MySQL son las siguientes:

  • Principalmente se ha mejorado InnoDB para mejorar su escalabilidad en sistemas multi-core (SMP):
    • En las plataformas que lo soportan, se usan instrucciones atómicas de la CPU para mejorar el rendimiento de los RW-locks (mutex que permite múltiples lectores). Se ha añadido una variable de estado para saber si la plataforma de una determinada instalación de MySQL admite las instrucciones atómicas llamado Innodb_have_atomic_builtins:

    mysql> show status like 'Innodb_have_atomic%';
    +-----------------------------+-------+
    | Variable_name | Value |
    +-----------------------------+-------+
    | Innodb_have_atomic_builtins | ON |
    +-----------------------------+-------+
    1 row in set (0.00 sec)

    • Es posible configurar múltiples threads de lectura y escritura concurrentes para leer las páginas más rápido:
      mysql> show variables like 'innodb_%_io_threads';
      +-------------------------+-------+
      | Variable_name | Value |
      +-------------------------+-------+
      | innodb_read_io_threads | 4 |
      | innodb_write_io_threads | 4 |
      +-------------------------+-------+
      2 rows in set (0.00 sec)
    • Anteriormente se limitaba el número de IOPS (operaciones de entrada/salida por segundo) mediante un parámetro de compilación (por defecto 100). Se ha añadido la variable innodb_io_capacity para regular dinámicamente dicha restricción y se ha aumentado el valor por defecto a 200 ya que los sistemas modernos cada vez tienen más capacidad:
      mysql> show variables like 'innodb_io_%';
      +--------------------+-------+
      | Variable_name | Value |
      +--------------------+-------+
      | innodb_io_capacity | 200 |
      +--------------------+-------+
      1 row in set (0.00 sec)
  • Se ha cambiado el storage engine por defecto de MyISAM a InnoDB. Este cambio es uno de los sensibles, ya que algunas aplicaciones asumen que si no se especifica es MyISAM
  • Se ha añadido un nuevo schema con datos dinámicos sobre en rendimiento del servidor de bases de datos llamado performance_schema:
    mysql> use performance_schema
    Database changed
    mysql> show tables;
    +----------------------------------------------+
    | Tables_in_performance_schema |
    +----------------------------------------------+
    | cond_instances |
    | events_waits_current |
    | events_waits_history |
    | events_waits_history_long |
    | events_waits_summary_by_instance |
    | events_waits_summary_by_thread_by_event_name |
    | events_waits_summary_global_by_event_name |
    | file_instances |
    | file_summary_by_event_name |
    | file_summary_by_instance |
    | mutex_instances |
    | performance_timers |
    | rwlock_instances |
    | setup_consumers |
    | setup_instruments |
    | setup_timers |
    | threads |
    +----------------------------------------------+
    17 rows in set (0.00 sec)
  • Con solo un pequeño vistazo ya se ve que dicha base de datos es todo un mundo en si misma, por lo que será muy interesante ir viendo que se puede sacar de ella.Por defecto se encuentra desactivada:
    mysql> show variables like 'performance_schema';
    +--------------------+-------+
    | Variable_name | Value |
    +--------------------+-------+
    | performance_schema | OFF |
    +--------------------+-------+
    1 row in set (0.00 sec)
  • Para unificar el sistema de compilación entre Windows y los diferentes UNIX-like se substituye el autoconf por cmake:
    yum install cmake -y
    Ahora para compilar un MySQL deberemos seguir los siguientes pasos: Primero descargamos y descomprimimos:
    wget 'http://www.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.8.tar.gz/from/http://mirrors.ircam.fr/pub/mysql/'
    tar xzf mysql-5.5.8.tar.gz
    cd mysql-5.5.8

    Podemos ver las opciones de compilación en la documentación de MySQL o bien usar la opción -L de cmake para listar las opciones resumidas, combinada con la opción -H para ver su descripción:
    # cmake . -LH
    -- MySQL 5.5.8
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /usr/local/src/mysql-5.5.8
    -- Cache values
    // Choose the type of build, options are: None(CMAKE_CXX_FLAGS or
    CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel
    CMAKE_BUILD_TYPE:STRING=RelWithDebInfo


    // install prefix
    CMAKE_INSTALL_PREFIX:PATH=/usr/local/mysql


    // Set to true if this is a community build
    COMMUNITY_BUILD:BOOL=ON


    // Enable profiling
    ENABLED_PROFILING:BOOL=ON


    // Enable debug sync (debug builds only)
    ENABLE_DEBUG_SYNC:BOOL=ON


    // Installation directory layout. Options are: STANDALONE (as in zip or tar.gz installer), RPM, DEB, SVR4
    INSTALL_LAYOUT:STRING=STANDALONE


    // default MySQL data directory
    MYSQL_DATADIR:PATH=/usr/local/mysql/data


    // MySQL maintainer-specific development environment
    MYSQL_MAINTAINER_MODE:BOOL=OFF


    // Link ARCHIVE statically to the server
    WITH_ARCHIVE_STORAGE_ENGINE:BOOL=OFF


    // Link BLACKHOLE statically to the server
    WITH_BLACKHOLE_STORAGE_ENGINE:BOOL=OFF


    // Use dbug/safemutex
    WITH_DEBUG:BOOL=OFF


    // Compile MySQL with embedded server
    WITH_EMBEDDED_SERVER:BOOL=OFF


    // Options are: none, complex, all
    WITH_EXTRA_CHARSETS:STRING=all


    // Link FEDERATED statically to the server
    WITH_FEDERATED_STORAGE_ENGINE:BOOL=OFF


    // Link INNOBASE statically to the server
    WITH_INNOBASE_STORAGE_ENGINE:BOOL=ON


    // Use bundled libedit
    WITH_LIBEDIT:BOOL=ON


    // Compile with tcp wrappers support
    WITH_LIBWRAP:BOOL=OFF


    // Link PARTITION statically to the server
    WITH_PARTITION_STORAGE_ENGINE:BOOL=ON


    // Link PERFSCHEMA statically to the server
    WITH_PERFSCHEMA_STORAGE_ENGINE:BOOL=ON


    // Generate PIC objects
    WITH_PIC:BOOL=OFF


    // Use bundled readline
    WITH_READLINE:BOOL=OFF


    // Options are : no, bundled, yes (prefer os library if present otherwise use bundled), system (use os library)
    WITH_SSL:STRING=no


    // Compile MySQL with unit tests
    WITH_UNIT_TESTS:BOOL=ON


    // Valgrind instrumentation
    WITH_VALGRIND:BOOL=OFF


    // Which zlib to use (possible values are 'bundled' or 'system')
    WITH_ZLIB:STRING=system

    Añadiendo la opción -A obtendremos el listado completo de opciones de compilación:
    cmake . -LAH
    También tenemos la opción de usar la interfaz gráfica, cmake-gui:

    Listado de opciones con cmake-guiListado de opciones con cmake-gui

    Algunas opciones interesantes son las siguientes:

    • MYSQL_DATADIR=/var/mysql/: Definimos dónde queremos dejar el datadir del MySQL, por ejemplo en /var/mysql
    • CMAKE_INSTALL_PREFIX=/usr/local/mysql: Indicamos dónde instalar el MySQL
    • ENABLE_DEBUG_SYNC=0: Si no se habilita del DEBUG no hace nada, pero nunca esta de más dejarlo quitado
    • WITH_UNIT_TESTS=0: Deshabilitamos los unit-tests
    • WITH_FAST_MUTEXES: No se muy bien porque esta opción se ha deshabilitado por defecto en MySQL 5.5, substituye los mutex por spinlocks

    Por lo tanto el cmake quedaría con las siguientes opciones:
    cmake . -DMYSQL_DATADIR=/var/mysql/ -DENABLE_DEBUG_SYNC=0 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_UNIT_TESTS=0
    A continuación seguimos con la compilación:
    make && make install
    Con la sorpresa que en dicha versión tenemos un porcentaje y colorines:

    Colores en la compilación de MySQL 5.5Colores en la compilación de MySQL 5.5
  • Por defecto, la replicación se hace asíncrona: El master escribe las modificaciones en su binary log sin saber si algún slave lo ha recibido y procesado, pudiendo darse el caso si se usa el slave como método de alta disponibilidad, que se pierdan cambios si se produce un fallo en el master. Con la introducción de replicación semisincrona.La replicación semisincrona se habilita en el master, cuando el slave la soporta, el master espera a que almenos un slave confirme que ha recibido la transacción escribiéndola en el relay log y se ha escrito a disco o a un determinado timeout.

Relacionados

Fuente:

systemadmin.es

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *