 |
Pour utiliser mysql, il faut utiliser l'outil "mysql" qui se trouve dans le répertoire /bin. Le
nom d'utilisateur et le mot de passe doivent être créés par un administrateur système.
Par défaut, l'utilisateur "root" est créé et il n'a pas de mot de passe.
Commande pour lancer mysql (sous Unix) :
./mysql -h localhost -u root -p
MySQL vous demande d'entrer le mot de passe.
Si vous ne l'avez pas changé, appuyez juste sur "Entrée".
Si vous souhaitez lancer mysql avec un autre utilisateur, vous n'avez qu'à saisir :
./mysql -h localhost -u nom_utilisateur -pmot_de_passe
MySQL vous demande d'entrer le mot de passe.
L'option "-h localhost" n'est pas obligatoire, vous pouvez donc ne pas la mettre. Elle ne sert
que si vous avez besoin de préciser un port par exemple ("-h localhost:1523" par exemple).
Pour plus d'informations sur les utilisateurs, cliquez sur ce lien.
| | | | | | | | | 2. Requêtes et commandes utiles avec MySQL
|  |  |  |
|
Pour pouvoir exécuter une requête, il faut dans un premier temps taper le texte de la requête,
puis, lancer la commande avec ";" et "entrée".
| Fonctions Utiles |
Description |
| SHOW DATABASES; |
Affiche la liste des bases de données |
| SHOW TABLES; |
Affiche les tables de la base utilisée |
| SHOW COLUMNS FROM nom_table; |
Affiche les champs de la table nom_table |
| USE nom_base |
Utilise la base nom_base |
Par défaut, après l'installation de mysql, il existe 2 bases : MySQL et Test.
La base MySQL contient les paramètres de configuration de MySQL.
La base Test permet de faire des tests de tables !
Vous n'aviez pas deviné hein !
Pour avoir la liste des bases :
mysql> show databases;
+----------+
| database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)
Nous allons donc étudier le contenu de la base MySQL.
D'abord, on doit préciser la base à utiliser.
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
Pour avoir la liste des tables :
mysql> show tables;
+-----------------+
| tables_in_mysql |
+-----------------+
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user |
+-----------------+
6 rows in set (0.00 sec)
Il existe donc 6 tables dans la base MySQL. Ces tables permettent de définir les droits d'accès et donc les utilisateurs de MySQL.
Nous allons donc voir la structure de ses tables, leur contenu, et ensuite comment les utiliser.
Voici les différents champs de la table :
mysql> describe user;
+-----------------+-----------------+------+-----+---------+-------+
| field | type | null | key | default | extra |
+-----------------+-----------------+------+-----+---------+-------+
| host | char(60) binary | | pri | | |
| user | char(16) binary | | pri | | |
| password | char(16) binary | | | | |
| select_priv | enum('n','y') | | | n | |
| insert_priv | enum('n','y') | | | n | |
| update_priv | enum('n','y') | | | n | |
| delete_priv | enum('n','y') | | | n | |
| create_priv | enum('n','y') | | | n | |
| drop_priv | enum('n','y') | | | n | |
| reload_priv | enum('n','y') | | | n | |
| shutdown_priv | enum('n','y') | | | n | |
| process_priv | enum('n','y') | | | n | |
| file_priv | enum('n','y') | | | n | |
| grant_priv | enum('n','y') | | | n | |
| references_priv | enum('n','y') | | | n | |
| index_priv | enum('n','y') | | | n | |
| alter_priv | enum('n','y') | | | n | |
+-----------------+-----------------+------+-----+---------+-------+
17 rows in set (0.00 sec)
Chaque ligne de cette table correspond au droit d'un utilisateur pour le host défini (ce qui représente la clé),
en précisant pour chaque clé le mot de passe, ainsi que les droits. Ces droits correspondent à la fonction
autorisée suivi du "_priv" qui définit le nom de la colonne. On peut donc autoriser l'utilisateur à faire
des Select (affichage du contenu d'une table),
des Insert (ajout d'un enregistrement dans une table),
des Update (modification d'un enregistrement existant),
des Delete (effacer des enregistrements de la table),
des Create (création de tables dans la base courante),
des Drop (suppression de tables),
des Reload (arrêt et rechargement de mysql),
des Shutdown (arrêt de mysql),
des Process (),
des File (),
des Grant (),
des References (),
des Index (),
des Alter (modifier la structure d'une table).
Par défauts, tout est interdit, on peut ajouter des droits un à un !
Nous verrons plus loin comment ajouter un utilisateur et lui donner des droits.
La table Host contient les informations permettant de préciser les droits d'accès aux bases pour tel ou tel Host.
Le Host est le nom donné au serveur. Par exemple, on peut ajouter un Host 'Adresse' qui ne contiennent que les
informations sur des personnes, un Host 'Cocktail' avec toutes les informations sur les cocktails de la base,
et le host 'localhost' qui est défini en standard et qui accèderait à tout.
Grâce à la table User, on peut alors croiser avec celle-ci de manière à ce qu'un utilisateur puisse accéder à un ensemble de base,
mais à aucun autre.
mysql> describe host;
+-----------------+-----------------+------+-----+---------+-------+
| field | type | null | key | default | extra |
+-----------------+-----------------+------+-----+---------+-------+
| host | char(60) binary | | pri | | |
| db | char(64) binary | | pri | | |
| select_priv | enum('n','y') | | | n | |
| insert_priv | enum('n','y') | | | n | |
| update_priv | enum('n','y') | | | n | |
| delete_priv | enum('n','y') | | | n | |
| create_priv | enum('n','y') | | | n | |
| drop_priv | enum('n','y') | | | n | |
| grant_priv | enum('n','y') | | | n | |
| references_priv | enum('n','y') | | | n | |
| index_priv | enum('n','y') | | | n | |
| alter_priv | enum('n','y') | | | n | |
+-----------------+-----------------+------+-----+---------+-------+
12 rows in set (0.00 sec)
Pour chaque ligne, la clé se trouve sur les champs "Host" et "Db". On comprend ainsi que chaque ligne permet de définir pour
chaque Host et chaque base, les droits dont il dispose. Les informations sont les mêmes que pour la table User avec quelques
options en moins. Il reste donc :
Select (affichage du contenu d'une table),
Insert (ajout d'un enregistrement dans une table),
Update (modification d'un enregistrement existant),
Delete (effacer des enregistrements de la table),
Create (création de tables dans la base courante),
Drop (suppression de tables),
Grant (),
References (),
Index (),
Alter (modifier la structure d'une table).
Les options en moins correspondent au fonctionnement de mysql qui restent accessible uniquement à la configuration
et l'utilisation de MySQL...
La Table Db permet en fait les mêmes restrictions et permissions que la table Host, mais en ajoutant dans la clé le champs User.
Cette clé permet donc de définir les droits pour chaque utilisateur, base et host.
mysql> describe db;
+-----------------+-----------------+------+-----+---------+-------+
| field | type | null | key | default | extra |
+-----------------+-----------------+------+-----+---------+-------+
| host | char(60) binary | | pri | | |
| db | char(64) binary | | pri | | |
| user | char(16) binary | | pri | | |
| select_priv | enum('n','y') | | | n | |
| insert_priv | enum('n','y') | | | n | |
| update_priv | enum('n','y') | | | n | |
| delete_priv | enum('n','y') | | | n | |
| create_priv | enum('n','y') | | | n | |
| drop_priv | enum('n','y') | | | n | |
| grant_priv | enum('n','y') | | | n | |
| references_priv | enum('n','y') | | | n | |
| index_priv | enum('n','y') | | | n | |
| alter_priv | enum('n','y') | | | n | |
+-----------------+-----------------+------+-----+---------+-------+
13 rows in set (0.00 sec)
On retrouve donc les mêmes options que pour la table host :
Select (affichage du contenu d'une table),
Insert (ajout d'un enregistrement dans une table),
Update (modification d'un enregistrement existant),
Delete (effacer des enregistrements de la table),
Create (création de tables dans la base courante),
Drop (suppression de tables),
Grant (),
References (),
Index (),
Alter (modifier la structure d'une table).
L'intérêt de cette table est de limiter encore un peu plus les droits pour chaque utilisateur.
Les droits existants sont alors remplacés par les droits définis dans cette table.
La table Tables_priv permet de limiter encore un peu plus les droits. On se retrouve ici dans le cas d'un utilisateur à qui
on donne accès sur une table d'une base pour un host spécifique. La clé porte d'ailleurs sur ces 4 champs :
Host, Db, User, Table_name. Les options sont dans le champ "Table_priv" et dans le champs "Column_priv".
mysql> describe tables_priv;
+-------------+----------------------------------------------+------+-----+-------+-----+
| field | type | null | key |default|extra|
+-------------+----------------------------------------------+------+-----+-------+-----+
| host | char(60) binary | | pri | | |
| db | char(64) binary | | pri | | |
| user | char(16) binary | | pri | | |
| table_name | char(60) binary | | pri | | |
| grantor | char(77) | | mul | | |
| timestamp | timestamp(14) | yes | |null | |
| table_priv | set('select','insert','update','delete', | | | | |
| | 'create', 'drop','grant','references', | | | | |
| | 'index','alter') | | | | |
| column_priv | set('select','insert','update','references') | | | | |
+-------------+----------------------------------------------+------+-----+-------+-----+
8 rows in set (0.00 sec)
L'affichage du résultat a été un peu modifié de manière à pouvoir afficher toutes les informations
Le champ Table_priv permet donc de définir les droits sur la table Table_name
(Select, Insert, Update, Delete, Create, Drop, Grant, References, Index et Alter).
Le champ Column_priv permet quand à lui de modifier les infos pour une colonne (Select, Insert, Update, References).
mysql> describe columns_priv;
+-------------+----------------------------------------------+------+-----+-------+-----+
| field | type | null | key |default|extra|
+-------------+----------------------------------------------+------+-----+-------+-----+
| host | char(60) binary | | pri | | |
| db | char(64) binary | | pri | | |
| user | char(16) binary | | pri | | |
| table_name | char(64) binary | | pri | | |
| column_name | char(64) binary | | pri | | |
| timestamp | timestamp(14) | yes | |null | |
| column_priv | set('select','insert','update','references') | | | | |
+-------------+----------------------------------------------+------+-----+-------+-----+
7 rows in set (0.00 sec)
La table function permet de définir des fonctions dans MySQL. Un fonction MySQL est...
mysql> describe func;
+-------+------------------------------+------+-----+----------+-------+
| field | type | null | key | default | extra |
+-------+------------------------------+------+-----+----------+-------+
| name | char(64) binary | | pri | | |
| ret | tinyint(1) | | | 0 | |
| dl | char(128) | | | | |
| type | enum('function','aggregate') | | | function | |
+-------+------------------------------+------+-----+----------+-------+
4 rows in set (0.00 sec)
Attention, les utilisateurs de votre système (si vous êtes sous Unix) et les utilisateurs
MySQL sont totalement dissociés. C'est-à-dire que MySQL gère sa propre base d'utilisateurs, et que par consequent les logins
et mot de passe n'ont aucun rapport avec ceux du système.
Il est possible d'utiliser la commande 'show variables;' en direct, ou de préciser 'show global variables;' ou encore
'show session variables;'. En fonction de la configuration, ces 2 commandes renverront les mêmes informations.
mysql> show variables;
+---------------------------------+------------------------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------------------------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| automatic_sp_privileges | ON |
| back_log | 50 |
| basedir | c:\wamp\bin\mysql\mysql5.0.51a\ |
| binlog_cache_size | 32768 |
| bulk_insert_buffer_size | 8388608 |
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | c:\wamp\bin\mysql\mysql5.0.51a\share\charsets\ |
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
| completion_type | 0 |
| concurrent_insert | 1 |
| connect_timeout | 5 |
| datadir | c:\wamp\bin\mysql\mysql5.0.51a\data\ |
| date_format | %Y-%m-%d |
| datetime_format | %Y-%m-%d %H:%i:%s |
| default_week_format | 0 |
| delay_key_write | ON |
| delayed_insert_limit | 100 |
| delayed_insert_timeout | 300 |
| delayed_queue_size | 1000 |
| div_precision_increment | 4 |
| keep_files_on_create | OFF |
| engine_condition_pushdown | OFF |
| expire_logs_days | 0 |
| flush | OFF |
| flush_time | 1800 |
| ft_boolean_syntax | + -><()~*:""&| |
| ft_max_word_len | 84 |
| ft_min_word_len | 4 |
| ft_query_expansion_limit | 20 |
| ft_stopword_file | (built-in) |
| group_concat_max_len | 1024 |
| have_archive | YES |
| have_bdb | NO |
| have_blackhole_engine | YES |
| have_compress | YES |
| have_crypt | NO |
| have_csv | NO |
| have_dynamic_loading | YES |
| have_example_engine | YES |
| have_federated_engine | YES |
| have_geometry | YES |
| have_innodb | YES |
| have_isam | NO |
| have_merge_engine | YES |
| have_ndbcluster | NO |
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| have_query_cache | YES |
| have_raid | NO |
| have_rtree_keys | YES |
| have_symlink | YES |
| hostname | FRODON |
| init_connect | |
| init_file | |
| init_slave | |
| innodb_additional_mem_pool_size | 2097152 |
| innodb_autoextend_increment | 8 |
| innodb_buffer_pool_awe_mem_mb | 0 |
| innodb_buffer_pool_size | 15728640 |
| innodb_checksums | ON |
| innodb_commit_concurrency | 0 |
| innodb_concurrency_tickets | 500 |
| innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir | |
| innodb_doublewrite | ON |
| innodb_fast_shutdown | 1 |
| innodb_file_io_threads | 4 |
| innodb_file_per_table | OFF |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_flush_method | |
| innodb_force_recovery | 0 |
| innodb_lock_wait_timeout | 50 |
| innodb_locks_unsafe_for_binlog | OFF |
| innodb_log_arch_dir | |
| innodb_log_archive | OFF |
| innodb_log_buffer_size | 1048576 |
| innodb_log_file_size | 10485760 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | .\ |
| innodb_max_dirty_pages_pct | 90 |
| innodb_max_purge_lag | 0 |
| innodb_mirrored_log_groups | 1 |
| innodb_open_files | 300 |
| innodb_rollback_on_timeout | OFF |
| innodb_support_xa | ON |
| innodb_sync_spin_loops | 20 |
| innodb_table_locks | ON |
| innodb_thread_concurrency | 8 |
| innodb_thread_sleep_delay | 10000 |
| interactive_timeout | 28800 |
| join_buffer_size | 131072 |
| key_buffer_size | 9437184 |
| key_cache_age_threshold | 300 |
| key_cache_block_size | 1024 |
| key_cache_division_limit | 100 |
| language | c:\wamp\bin\mysql\mysql5.0.51a\share\english\ |
| large_files_support | ON |
| large_page_size | 0 |
| large_pages | OFF |
| lc_time_names | en_US |
| license | GPL |
| local_infile | ON |
| log | OFF |
| log_bin | OFF |
| log_bin_trust_function_creators | OFF |
| log_error | c:\wamp\logs\mysql.log |
| log_queries_not_using_indexes | OFF |
| log_slave_updates | OFF |
| log_slow_queries | OFF |
| log_warnings | 1 |
| long_query_time | 10 |
| low_priority_updates | OFF |
| lower_case_file_system | ON |
| lower_case_table_names | 2 |
| max_allowed_packet | 1048576 |
| max_binlog_cache_size | 4294967295 |
| max_binlog_size | 1073741824 |
| max_connect_errors | 10 |
| max_connections | 255 |
| max_delayed_threads | 20 |
| max_error_count | 64 |
| max_heap_table_size | 16777216 |
| max_insert_delayed_threads | 20 |
| max_join_size | 4294967295 |
| max_length_for_sort_data | 1024 |
| max_prepared_stmt_count | 16382 |
| max_relay_log_size | 0 |
| max_seeks_for_key | 4294967295 |
| max_sort_length | 1024 |
| max_sp_recursion_depth | 0 |
| max_tmp_tables | 32 |
| max_user_connections | 0 |
| max_write_lock_count | 4294967295 |
| multi_range_count | 256 |
| myisam_data_pointer_size | 6 |
| myisam_max_sort_file_size | 107374182400 |
| myisam_recover_options | OFF |
| myisam_repair_threads | 1 |
| myisam_sort_buffer_size | 8388608 |
| myisam_stats_method | nulls_unequal |
| named_pipe | OFF |
| net_buffer_length | 16384 |
| net_read_timeout | 30 |
| net_retry_count | 10 |
| net_write_timeout | 60 |
| new | OFF |
| old_passwords | OFF |
| open_files_limit | 1285 |
| optimizer_prune_level | 1 |
| optimizer_search_depth | 62 |
| pid_file | c:\wamp\bin\mysql\mysql5.0.51a\data\FRODON.pid |
| port | 3306 |
| preload_buffer_size | 32768 |
| profiling | OFF |
| profiling_history_size | 15 |
| protocol_version | 10 |
| query_alloc_block_size | 8192 |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 8388608 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
| query_prealloc_size | 8192 |
| range_alloc_block_size | 2048 |
| read_buffer_size | 61440 |
| read_only | OFF |
| read_rnd_buffer_size | 258048 |
| relay_log_purge | ON |
| relay_log_space_limit | 0 |
| rpl_recovery_rank | 0 |
| secure_auth | OFF |
| secure_file_priv | |
| shared_memory | OFF |
| shared_memory_base_name | MYSQL |
| server_id | 0 |
| skip_external_locking | ON |
| skip_networking | OFF |
| skip_show_database | OFF |
| slave_compressed_protocol | OFF |
| slave_load_tmpdir | C:\Windows\TEMP\ |
| slave_net_timeout | 3600 |
| slave_skip_errors | OFF |
| slave_transaction_retries | 10 |
| slow_launch_time | 2 |
| sort_buffer_size | 207864 |
| sql_big_selects | ON |
| sql_mode | |
| sql_notes | ON |
| sql_warnings | OFF |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
| storage_engine | InnoDB |
| sync_binlog | 0 |
| sync_frm | ON |
| system_time_zone | Paris, Madrid |
| table_cache | 510 |
| table_lock_wait_timeout | 50 |
| table_type | InnoDB |
| thread_cache_size | 12 |
| thread_stack | 196608 |
| time_format | %H:%i:%s |
| time_zone | SYSTEM |
| timed_mutexes | OFF |
| tmp_table_size | 13631488 |
| tmpdir | C:\Windows\TEMP\ |
| transaction_alloc_block_size | 8192 |
| transaction_prealloc_size | 4096 |
| tx_isolation | REPEATABLE-READ |
| updatable_views_with_limit | YES |
| version | 5.0.51a-community-nt |
| version_comment | MySQL Community Edition (GPL) |
| version_compile_machine | ia32 |
| version_compile_os | Win32 |
| wait_timeout | 28800 |
+---------------------------------+------------------------------------------------+
| | | | | | | | | 5. 2. Modification des variables
|  |  |  |
|
Selon les variables que vous souhaitez changer, vous pourrez utiliser la commande 'set' comme vu ci-dessous.
mysql> show variables like 'wait%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> set wait_timeout=28400;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'wait%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28400 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> set wait_timeout=28800;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'wait%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.00 sec)
Par contre, selon les variables, cette solution ne fonctionne pas forcément, comme vous pouvez le voir dans le cas suivant :
mysql> set global global_log=off;
ERROR 1193 (HY000): Unknown system variable 'global_log'
mysql> set global log=off;
ERROR 1193 (HY000): Unknown system variable 'log'
Pour pouvoir modifier ces valeurs, il faut passer par le fichier de configuration... C'est une super transition vers le
paragraphe suivant !
| | | | | | | | | 5.2.2. Méthode par le fichier de configuration
|  |  |  |
|
Le fichier de configuration (normalement 'my.ini' ou 'mysql.ini') contient toutes les options de démarrage (qui pour certaines
peuvent également être mise directement en ligne de commandes du lancement de mysql). Pour modifier un paramètre dans ce fichier,
il suffit de l'ajouter dedans. Contrairement au fichier de configuration de Apache, l'option peut être ajoutée à n'importe quel
endroit du fichier, il n'y a pas de gestion de groupe ou de paragraphe. Ceci n'empêche pas une organisation du fichier de conf
afin que chacun puisse s'y retrouver.
Par exemple, vous souhaitez ajouter les logs sur toutes les requêtes entrantes, vous ajoutez la ligne suivant sous windows :
log=c:/logs/mysql/query.log
ou sous linux :
log=/var/log/mysql/query.log
Il vous suffit ensuite de redémarrer votre service 'mysql', et les requêtes entrantes seront toutes logguées.
Attention seulement à vérifier 2 choses avant de modifier les paramètres :
- le paramètre existe-t-il déjà dans le fichier ini ?
- les fichiers et répertoires passés en paramètre existent-ils sur mon disque ?
|