Les nouveautés de MySQL 5.1 — (part 3/5)
MySQL Cluster : support des données sur disque
MySQL propose une solution de haute disponibilité : MySQL Cluster. Cette technologie permet de mettre en place une architecture cluster shared nothing à l’aide de tables au format NDBCluster. Jusqu’à MySQL 5.0, MySQL Cluster ne fonctionnait qu’entièrement en mémoire. Ceci excluait donc certaines bases de données trop volumineuses. La nouvelle version 5.1 lève cette limitation en permettant de mettre les données sur disque.
Pour enregistrer ses données sur le disque, il faut au préalable définir deux nouveaux objets : un LOGFILE GROUP et un TABLESPACE.
LOGFILE GROUP : permet gérer les undo log et le crash-recovery
Pour créer un logfile group:
CREATE LOGFILE GROUP lg_1 ADD UNDOFILE 'undo_1.dat' INITIAL_SIZE 16M UNDO_BUFFER_SIZE 2M ENGINE NDB; ALTER LOGFILE GROUP lg_1 ADD UNDOFILE 'undo_2.dat' INITIAL_SIZE 12M ENGINE NDB;
TABLESPACE : pour stocker les données. A noter que le tablespace utilise le logfile group créé
On peut maintenant créer la table et l’associer au tablespace
Création d’un tablespace:
CREATE TABLESPACE ts_1 ADD DATAFILE 'data_1.dat' USE LOGFILE GROUP lg_1 INITIAL_SIZE 32M ENGINE NDB; ALTER TABLESPACE ts_1 ADD DATAFILE 'data_2.dat' INITIAL_SIZE 48M ENGINE NDB;
Création d’une table au format NDBCluster avec données sur disque:
CREATE TABLE 'City' ( 'ID' int(11) NOT NULL AUTO_INCREMENT, 'Name' char(35) NOT NULL DEFAULT '', 'Population' int(11) NOT NULL DEFAULT '0', PRIMARY KEY ('ID') ) TABLESPACE ts_1 STORAGE DISK ENGINE=NDB;
Les tables de journalisation
MySQL offre la possibilité de journaliser l’activité du serveur. en activant le general log. Il est aussi est possible de journaliser seulement les requêtes lentes (celles qui s’exécutent en un temps supérieur au seuil que vous aurez préalablement fixé) en activant le slow_query_log.
MySQL 5.1 permet toujours de journaliser ces informations dans un fichier, et ajoute la possibilité de le faire en plus dans une table.
Cerise sur le gâteau, la journalisation peut être démarrée ou arrêtée à chaud.
Les commandes SHOW VARIABLES LIKE ‘general_log’ et SHOW VARIABLES LIKE ‘log_output’ permettent, respectivement, de savoir si le general_log est activé et sous quelle forme.
Pour afficher l’état du general_log:
mysql> SHOW VARIABLES LIKE 'general_log'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | general_log | OFF | +---------------+-------+ 1 row in set (0.03 sec) mysql> SHOW VARIABLES LIKE 'log_output'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | TABLE | +---------------+-------+
Le general_log peut être activé dynamiquement avec la commande SET :
mysql> SET GLOBAL general_log = 1; Query OK, 0 rows affected (0.04 sec)
Le format de sortie peut lui aussi être changé dynamiquement :
+---------------------+-------------------------+-----------+----------- +--------------+---------------------------------------+ | event_time | user_host | thread_id | server_id | command_type | argument | +---------------------+-------------------------+-----------+----------- +--------------+---------------------------------------+ | 2008-02-21 15:51:06 | daz[daz] @ localhost [] | 10 | 51 | Query | SET GLOBAL log_output = ‘TABLE, FILE' | | 2008-02-21 15:51:06 | daz[daz] @ localhost [] | 10 | 51 | Query | SELECT * FROM mysql.general_log | +---------------------+-------------------------+-----------+----------- +--------------+---------------------------------------+ 2 rows in set (0.00 sec)
mysql> SET GLOBAL log_output = 'TABLE,FILE'; Query OK, 0 rows affected (0.00 sec)
Les mêmes opérations sont possibles sur le slow_query_log :
mysql> SHOW VARIABLES LIKE 'slow_query_log'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | slow_query_log | ON | +----------------+-------+ 1 row in set (0.00 sec) mysql> SELECT * FROM mysql.slow_log; +------------+----------------------+-----------+-----------+---------------+-----+ | start_time | user_host query_time | lock_time | rows_sent | rows_examined | db | | last_insert_id | insert_id | server_id | sql_text ----------------------------------------------------------------------------------- | 2008-02-21 15:57:13 | daz[daz] @ localhost [] | 00:00:00 | 00:00:00 | 0 | 0 | | test | 0 | 0 | 51 | SELECT * FROM mysql.slow_log | | 2008-02-21 15:57:38 | daz[daz] @ 640m [192.168.1.106] | 00:00:00 | 00:00:00 | 268 | | 268 | mysql | 0 | 0 | 51 | SELECT * FROM information_schema. GLOBAL_VARIABLES G | | 2008-02-21 15:57:43 | daz[daz] @ localhost [] | 00:00:00 | 00:00:00 | 2 | 2 | test | | 0 | 0 | 51 | SELECT * FROM mysql.slow_log | +------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec)
(à suivre… Le moteur de stockage CSV & Le support de XML/XPath)
Architecte Solution Cloud chez Oracle
MySQL Geek, Architecte, DBA, Consultant, Formateur, Auteur, Blogueur et Conférencier.
—–
Blog: www.dasini.net/blog/en/
Twitter: https://twitter.com/freshdaz
SlideShare: www.slideshare.net/freshdaz
Youtube: https://www.youtube.com/channel/UC12TulyJsJZHoCmby3Nm3WQ
—–
[…] (à suivre… MySQL Cluster & general log, slow query log dans une table) […]
[…] (<- précédent) […]