Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Dernière révision Les deux révisions suivantes | ||
mysql [Le 20/12/2016, 13:22] 78.238.154.150 [Utilisateurs] |
mysql [Le 28/04/2018, 11:20] 127.0.0.1 modification externe |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag>Precise Trusty sgbd mysql serveur réseau}} | ||
+ | ---- | ||
+ | |||
+ | ====== MySQL ====== | ||
+ | |||
+ | **[[https://www.mysql.com/|MySQL]]** est un [[wpfr>SGBD|système de gestion de bases de données relationnelles]] (SGBDR) libre, gratuit, performant, très populaire, multi-threadé, multi-utilisateurs... | ||
+ | ===== Installation ===== | ||
+ | |||
+ | Installez, en ligne de commande, le paquet mysql-server.<note important>L'installation de ce paquet doit se faire en utilisant dans un terminal la commande <code>sudo apt-get install mysql-server</code> En effet, en passant par le terminal, l'installation se déroule correctement et notamment vous demande le mot de passe mysql-server </note> | ||
+ | |||
+ | <note>Le support de l'extension [[wpfr>PHP_Data_Objects|PHP Data Objects]] PHP Data Objects (PDO) est installé par défaut avec php5-mysql lors de l'installation de php5.</note> | ||
+ | |||
+ | ===== Utilisation ===== | ||
+ | |||
+ | ==== Démarrage ==== | ||
+ | |||
+ | Pour démarrer le serveur MySQL, tapez la [[:commande_shell|commande]] suivante dans un [[:terminal]]: | ||
+ | |||
+ | sudo service mysql start | ||
+ | |||
+ | |||
+ | ==== Redémarrage ==== | ||
+ | |||
+ | Pour redémarrer le serveur MySQL, tapez la [[:commande_shell|commande]] suivante dans un [[:terminal]]: | ||
+ | sudo service mysql restart | ||
+ | |||
+ | ==== Arrêt ==== | ||
+ | |||
+ | Pour arrêter le serveur MySQL, tapez la [[:commande_shell|commande]] suivante dans un [[:terminal]]: | ||
+ | sudo service mysql stop | ||
+ | |||
+ | ==== Rechargement de la configuration ==== | ||
+ | |||
+ | Pour que MySQL prenne en compte les modifications de sa configuration, [[:commande_shell|commande]] suivante dans un [[:terminal]]: | ||
+ | sudo service mysql reload | ||
+ | |||
+ | ==== Forcer la prise en compte de la nouvelle configuration ==== | ||
+ | |||
+ | Pour forcer MySQL à recharger ses fichiers de configuration, [[:commande_shell|commande]] suivante dans un [[:terminal]]: | ||
+ | sudo service mysql force-reload | ||
+ | |||
+ | ===== Configuration ===== | ||
+ | |||
+ | ==== Lancer la console MySQL ==== | ||
+ | |||
+ | <note important> | ||
+ | Bogue possible rencontré avec le client texte de MySQL : la touche [Suppr] du clavier insère le tilde **~** (au lieu de supprimer). | ||
+ | |||
+ | Pour palier ce bogue, installez le programme rlwrap (pour en savoir plus : //man rlwrap//), [[:tutoriel:comment_installer_un_paquet|installez le paquet]] **[[apt>rlwrap]]** et ajoutez celui-ci avant la commande mysql, exemple : | ||
+ | |||
+ | rlwrap -a mysql -uroot -pvotremotdepasse votrebase | ||
+ | |||
+ | </note> | ||
+ | |||
+ | * Si vous n'avez pas défini de mot de passe (déconseillé) : <code>mysql -u root</code> | ||
+ | * Si vous avez défini un mot de passe : <code>mysql -u root -p</code> et tapez votre mot de passe. | ||
+ | |||
+ | Vous arriverez alors sur un prompt du type : | ||
+ | |||
+ | mysql> | ||
+ | |||
+ | Vous pouvez alors taper vos requêtes MySQL. N'oubliez pas le point-virgule à la fin de la requête. Si vous l'oubliez le prompt passe à la ligne. | ||
+ | |||
+ | <code> | ||
+ | mysql> select * from | ||
+ | -> | ||
+ | </code> | ||
+ | |||
+ | Ce passage vous indique que la requête n'est pas terminée. Vous pouvez entrer vos requêtes de cette façon sur plusieurs lignes et enfin la clôturer avec le « **;** ». | ||
+ | |||
+ | ==== Sélectionner la base de données à utiliser ==== | ||
+ | |||
+ | Soit directement lorsque vous lancez le client MySQL en [[:commande_shell|ligne de commande]]: | ||
+ | |||
+ | mysql -u root -D votre_base | ||
+ | |||
+ | Soit une fois connecté à MySQL en tapant la [[:commande_shell|commande]] suivante dans un [[:terminal]]: | ||
+ | |||
+ | mysql> use votre_base | ||
+ | |||
+ | ==== Ajouter ou changer le mot de passe de root ==== | ||
+ | |||
+ | <note important> | ||
+ | Depuis mysql 5.7 le champ PASSWORD de la description de la base de donnée a été changé en authentication_string. | ||
+ | À partir de cette version, il faut donc remplacer le mot **password** dans les instructions ci-dessous par **authentication_string**. | ||
+ | </note> | ||
+ | |||
+ | Pour changer le mot de passe de l'utilisateur root (qui n'est pas le même que l'utilisateur root du système) : | ||
+ | |||
+ | Si vous êtes déjà connecté dans mysql : | ||
+ | |||
+ | SET password FOR "root"@"localhost" = password('Nouveau_mot_de_passe'); | ||
+ | |||
+ | Sinon depuis un terminal : | ||
+ | |||
+ | sudo mysqladmin -u root password Nouveau_mot_de_passe -p Ancien_mot_de_passe | ||
+ | |||
+ | Vous pourrez avoir besoin de mettre votre mot de passe entre guillemet si celui ci comporte des caractères spéciaux. | ||
+ | |||
+ | Lorsque l'utilisateur root ne possède aucun mot de passe, utiliser cette commande : | ||
+ | |||
+ | sudo mysqladmin -u root password Nouveau_mot_de_passe -p "" | ||
+ | | ||
+ | ==== Redéfinir de force le mot de passe de root ==== | ||
+ | |||
+ | === Méthode 1 === | ||
+ | |||
+ | Une méthode simple : | ||
+ | |||
+ | sudo service mysql reset-password | ||
+ | |||
+ | === Méthode 2 === | ||
+ | |||
+ | Une autre méthode simple qui fonctionne sur Ubuntu versions 8.04 & + : | ||
+ | |||
+ | sudo dpkg-reconfigure mysql-server-5.5 | ||
+ | | ||
+ | Depuis Ubuntu 14.04 (et peut-etre même avant) c'est le paquet mysql-server-5.7 qui est installé. La commande est donc : | ||
+ | |||
+ | sudo dpkg-reconfigure mysql-server-5.7 | ||
+ | |||
+ | === Méthode 3 === | ||
+ | |||
+ | Une méthode plus compliquée : | ||
+ | |||
+ | Si vous avez perdu votre mot de passe root pour MySQL, suivez ces quelques étapes : | ||
+ | |||
+ | On stoppe le serveur MySQL : | ||
+ | |||
+ | sudo service mysql stop | ||
+ | |||
+ | On se connecte au serveur sans tenir compte des privilèges utilisateurs : | ||
+ | |||
+ | sudo /usr/bin/mysqld_safe --skip-grant-tables & | ||
+ | mysql -h localhost | ||
+ | |||
+ | Nous allons utiliser la table contenant les paramètres de MySQL : | ||
+ | |||
+ | <code SQL> | ||
+ | use mysql | ||
+ | </code> | ||
+ | |||
+ | On met en place le nouveau mot de passe : | ||
+ | |||
+ | <code SQL> | ||
+ | update `user` | ||
+ | set password = password('<votre_mot_de_passe>') | ||
+ | where user = 'root' and host = 'localhost'; | ||
+ | </code> | ||
+ | |||
+ | (Placez le nom de la table `user` entre quotes (AltGr + 7) et remplacez ''<votre_mot_de_passe>'' par le mot de passe de votre choix) | ||
+ | |||
+ | <note important> À partir de mysql 5.7 cette instruction deviendra : | ||
+ | |||
+ | <code> | ||
+ | UPDATE mysql.user | ||
+ | SET authentication_string=PASSWORD('NouveauMdP') | ||
+ | WHERE user='root' AND host='localhost'; | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | |||
+ | |||
+ | On quitte le prompt de MySQL : | ||
+ | |||
+ | quit | ||
+ | |||
+ | On stoppe totalement mysqld & mysqld_safe : | ||
+ | |||
+ | sudo mysqladmin shutdown | ||
+ | |||
+ | On redémarre le serveur MySQL en utilisation normale : | ||
+ | |||
+ | sudo service mysql start | ||
+ | |||
+ | ==== Utiliser un autre numéro de port ==== | ||
+ | |||
+ | Pour activer la connexion à MySQL via le port 3306, activez l’accès distant en commentant la ligne suivante dans le fichier **/etc/mysql/mysql.conf.d/mysqld.cnf** ou [**/etc/mysql/mysql.conf.d/mysqld.cnf** avec la version 16 d'Ubuntu] (en ajoutant ''#'' au début de la ligne) : | ||
+ | |||
+ | skip-networking | ||
+ | | ||
+ | ou | ||
+ | | ||
+ | bind-address = 127.0.0.1 | ||
+ | |||
+ | Ensuite, si vous voulez changer de port, il suffit de modifier la ligne suivante du bloc [mysqld] pour y mettre le port voulu | ||
+ | |||
+ | port = 3306 | ||
+ | | ||
+ | FIXME | ||
+ | |||
+ | ==== Connexions entrantes ==== | ||
+ | |||
+ | Par défaut, MySQL n'écoute que les connexions venant de //localhost// (127.0.0.1), c'est-à-dire du système sur lequel il est installé. | ||
+ | |||
+ | Pour pouvoir accéder à MySQL depuis un autre ordinateur, [[:tutoriel:comment_editer_un_fichier|ajoutez la ligne suivante au fichier]] **/etc/mysql/my.cnf** dans la section « ''[mysqld]'' » : | ||
+ | |||
+ | <file> | ||
+ | bind-address = x.x.x.x | ||
+ | </file> | ||
+ | |||
+ | où x.x.x.x est l'adresse ip de l'interface sur laquelle MySQL doit écouter. Cela permet de n'écouter que sur une ip privée si vous avez plusieurs interfaces réseaux. | ||
+ | |||
+ | Pour forcer mysql à écouter sur toutes les interfaces réseau, il suffit de commenter la ligne "bind-address = 127.0.0.1" (ou écrire bind-address = 0.0.0.0) Cela peut être dangereux si votre serveur est connecté à Internet directement. | ||
+ | |||
+ | Redémarrez le service après avoir modifié le fichier de configuration : | ||
+ | <code>sudo /etc/init.d/mysql restart</code> | ||
+ | |||
+ | |||
+ | |||
+ | Pour créer un utilisateur mysql qui est autorisé à se connecter à distance : | ||
+ | |||
+ | se connecter sur mysql en root : | ||
+ | |||
+ | <code>mysql -u root -p</code> | ||
+ | |||
+ | une fois connecté : | ||
+ | <code>grant all privileges on *.* to 'remote_user'@'123.123.123.123' identified by 'user_password';</code> | ||
+ | |||
+ | le ***.*** représente l'accès à l'ensemble des bases de données, si vous voulez autoriser l'accès de l'utilisateur à une seule base de données, remplacez ***.*** par le nom de la base de données. | ||
+ | |||
+ | le **remote_user** est le nom de l'utilisateur qui sera créé. | ||
+ | |||
+ | le **123.123.123.123** représente l'ip à partir de laquelle nous pourrons nous connecter à distance. | ||
+ | |||
+ | Pour autoriser l'accès venant de toutes machines (limité par l'authentification), remplacer l'ip par le symbole **'%'**. | ||
+ | |||
+ | Pour attribuer un mot de passe à l'utilisateur, changer **user_password** par le nouveau mot de passe.. | ||
+ | |||
+ | Pour rendre ces privilèges effectifs : | ||
+ | <code>flush privileges;</code> | ||
+ | |||
+ | |||
+ | ==== Configuration en UTF-8 ==== | ||
+ | |||
+ | Il suffit d'ajouter les deux lignes suivantes à la fin de la section « ''[mysqld]'' » du fichier **/etc/mysql/my.cnf** : | ||
+ | |||
+ | <file> | ||
+ | character-set-server=utf8 | ||
+ | skip-character-set-client-handshake | ||
+ | </file> | ||
+ | |||
+ | NB: en 12.04 remplacez character-set-server=utf8 par character_set_server=utf8 | ||
+ | |||
+ | puis de relancer le serveur mysql : | ||
+ | |||
+ | sudo service mysql restart | ||
+ | |||
+ | Vous pouvez vérifier le résultat une fois loggé dans mysql grâce à la commande suivante : | ||
+ | |||
+ | <code SQL> | ||
+ | SHOW VARIABLES LIKE 'char%'; | ||
+ | </code> | ||
+ | |||
+ | Résultat : | ||
+ | |||
+ | <file> | ||
+ | mysqld> SHOW VARIABLES LIKE 'char%'; | ||
+ | +--------------------------+----------------------------+ | ||
+ | | Variable_name | Value | | ||
+ | +--------------------------+----------------------------+ | ||
+ | | character_set_client | utf8 | | ||
+ | | character_set_connection | utf8 | | ||
+ | | character_set_database | utf8 | | ||
+ | | character_set_filesystem | binary | | ||
+ | | character_set_results | utf8 | | ||
+ | | character_set_server | utf8 | | ||
+ | | character_set_system | utf8 | | ||
+ | | character_sets_dir | /usr/share/mysqld/charsets/ | | ||
+ | +--------------------------+----------------------------+ | ||
+ | 8 rows in set (0.00 sec) | ||
+ | </file> | ||
+ | |||
+ | FIXME | ||
+ | |||
+ | ===== Quelques requêtes SQL ===== | ||
+ | |||
+ | Toutes ces commandes sont à entrer dans le prompt de MySQL une fois connecté au serveur. (Voir comment [[#lancer_la_console_mysql|lancer la console MySQL]] ci dessus.) | ||
+ | |||
+ | |||
+ | ==== Base de donnée ==== | ||
+ | |||
+ | === Utiliser une base de données existante === | ||
+ | |||
+ | <code SQL> | ||
+ | use nom_de_la_base; | ||
+ | </code> | ||
+ | |||
+ | === Créer une base de données === | ||
+ | |||
+ | <code SQL> | ||
+ | create database nom_de_la_base; | ||
+ | </code> | ||
+ | |||
+ | === Liste des bases de données === | ||
+ | |||
+ | <code SQL> | ||
+ | show databases ; | ||
+ | </code> | ||
+ | |||
+ | === Supprimer une base de données === | ||
+ | |||
+ | <code SQL> | ||
+ | drop database nom_de_la_base; | ||
+ | </code> | ||
+ | |||
+ | === Importer une base de données située dans le répertoire courant (base de donnée exportée en .sql) === | ||
+ | |||
+ | <code SQL> | ||
+ | source fichier.sql; | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== Tables ==== | ||
+ | |||
+ | === Liste des tables de la base de données active === | ||
+ | |||
+ | <code SQL> | ||
+ | show tables; | ||
+ | </code> | ||
+ | |||
+ | === Structure d'une table === | ||
+ | |||
+ | <code SQL> | ||
+ | describe nom_table; | ||
+ | </code> | ||
+ | |||
+ | === Renommer une table === | ||
+ | |||
+ | <code SQL> | ||
+ | alter table nom_table rename as nouveau_nom; | ||
+ | </code> | ||
+ | |||
+ | Pour la syntaxe des requêtes SQL, reportez-vous à la [[http://dev.mysql.com/doc/|documentation MySQL]]. | ||
+ | |||
+ | |||
+ | ==== Utilisateurs ==== | ||
+ | |||
+ | === Créer un utilisateur === | ||
+ | |||
+ | <code SQL> | ||
+ | create user "nom_utilisateur"@"localhost"; | ||
+ | </code> | ||
+ | |||
+ | === Définir un mot de passe === | ||
+ | |||
+ | <code SQL> | ||
+ | set password for "nom_utilisateur"@"localhost" = password('mot_de_passe'); | ||
+ | </code> | ||
+ | |||
+ | === Supprimer un utilisateur === | ||
+ | |||
+ | <code SQL> | ||
+ | drop user "nom_utilisateur"@"localhost"; | ||
+ | </code> | ||
+ | |||
+ | === Lister les utilisateurs === | ||
+ | |||
+ | <code SQL> | ||
+ | select user from mysql.user; | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== Privilèges ==== | ||
+ | |||
+ | === Donner tous les droits sur une base de données à un utilisateur précis === | ||
+ | |||
+ | <code SQL> | ||
+ | grant all on nom_base.* to "nom_utilisateur"@"localhost"; | ||
+ | </code> | ||
+ | |||
+ | === Supprimer les droits sur une base de données à un utilisateur précis === | ||
+ | |||
+ | <code SQL> | ||
+ | revoke all privileges on nom_base.* from "nom_utilisateur"@"localhost"; | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ===== Autres opérations ===== | ||
+ | |||
+ | Qt4 avec Mysql: | ||
+ | |||
+ | Installer la librairie pour mysql afin de l'utiliser sous QT : | ||
+ | |||
+ | <code>sudo apt-get install libqt4-sql-mysql</code> | ||
+ | |||
+ | |||
+ | |||
+ | ==== Sauvegarde et importation ==== | ||
+ | |||
+ | Pour **exporter** la base de donnée « maBase », utilisez la commande : | ||
+ | |||
+ | mysqldump -u root -p maBase > maBase_backup.sql | ||
+ | |||
+ | Ceci fera l'export dans un fichier « maBase_backup.sql ». | ||
+ | |||
+ | Pour exporter une table (par exemple //ma_table// )appartenant à une base des données (par exemple //maBase//) : | ||
+ | | ||
+ | mysqldump -u root -p maBase ma_table > ma_table.sql | ||
+ | |||
+ | Ainsi nous aurons une exportation seulement de la table //ma_table// sans toucher à d'autres tables de la base des données | ||
+ | |||
+ | Pour **importer** une base de données ou une sauvegarde sur « maBase », utilisez la commande : | ||
+ | |||
+ | mysql -u root -p maBase < maBase_backup.sql | ||
+ | |||
+ | Puis tapez votre mot de passe. | ||
+ | |||
+ | <note tip> | ||
+ | Si vous souhaitez mettre en place une solution de sauvegarde automatique de bases de données à intervalle régulier, rendez-vous sur le tutoriel traitant de la [[:tutoriel:sauvegarder_automatiquement_ses_bases_de_donnees|sauvegarde automatique de bases de données via cron]]. | ||
+ | </note> | ||
+ | |||
+ | D'autres commandes telles que la suppression des tables, de la base, l'ajout des données dans la base des données, etc. peuvent être trouvées sur le [[http://dev.mysql.com/doc/refman/5.0/fr/sql-syntax.html|site de documentation de MySQL]]. | ||
+ | |||
+ | |||
+ | ==== Restauration à partir du dump du datadir ==== | ||
+ | |||
+ | <note important>Ne fonctionne que pour les tables au format MyISAM.</note> | ||
+ | |||
+ | Si vous n'avez pas pu faire un backup pour une raison quelconque (par exemple, vous récupérez un disque dur dont le système est mort), on peut sauvegarder le répertoire « /var/lib/mysql/ » dans lequel chacune des bases est enregistrée dans un répertoire portant son nom. | ||
+ | |||
+ | Pour restaurer vos bases une par une, suivez la procédure ci-dessous (après avoir d'abord installé une version de mysql-server). | ||
+ | |||
+ | Créer une base de données du même nom que celle que vous voulez restaurer : | ||
+ | |||
+ | echo "CREATE DATABASE MaBaseDeDonnee" | mysql -u root -h localhost -p | ||
+ | |||
+ | Copier les fichiers du dump de la base de données (les *.FRM, *.MYD, *.MYI, *.opt), dans le dossier que MySQL a créé pour votre base de données : | ||
+ | |||
+ | cd ~/MonDossierContenantLeDump/MaBaseDeDonnee | ||
+ | sudo cp * /var/lib/mysql/MaBaseDeDonnee | ||
+ | |||
+ | Changer les droits sur les fichiers copiés : | ||
+ | |||
+ | sudo chmod -R ug+rw /var/lib/mysql/MaBaseDeDonnee/ | ||
+ | sudo chown -R mysql:mysql /var/lib/mysql/MaBaseDeDonnee/ | ||
+ | |||
+ | Voilà, votre base doit correctement fonctionner à présent. | ||
+ | |||
+ | ==== Compacter l'espace utilisé par ibdata1 ==== | ||
+ | |||
+ | Mysql stocke ses fichiers dans le dossier /var/lib/mysql. Il arrive avec le temps et l'utilisation que le fichier ibdata1 occupe un espace disque très important qui ne sera pas récupéré même en supprimant toutes les bases. | ||
+ | |||
+ | Pistes pour comprendre et corriger ce problème : | ||
+ | * [[http://bytes.com/groups/mysql/495219-mysql-ibdata1-compact-space|Supprimer les tables InnoDB pour récupérer l'espace]] | ||
+ | * [[http://bugs.mysql.com/bug.php?id=1287|"Bogue" associé]] | ||
+ | * Exporter toutes les bases de données, arrêter mysql, supprimer le fichier, démarrer sql et importer toutes les bases. | ||
+ | |||
+ | |||
+ | ==== Déplacer ses bases de données MySQL ==== | ||
+ | |||
+ | <note warning>Attention !! lors d'une migration ubuntu14.04 -> 16.04 ne lancez pas la migration sans avoir remis mysql en état d'origine (/var/lib/mysql). Faites les opérations inverses décrites ci-dessous pour remettre vos données dans /var/lib/mysql.</note> | ||
+ | L'emplacement des données de MySQL est indiqué dans la variable **datadir** qui se trouve dans le fichier ''my.cnf''. | ||
+ | Toutefois, il peut exister plusieurs fichiers ''my.cnf'' : | ||
+ | <code> | ||
+ | $ mysqld --verbose --help | head -n13 | tail -n2 | ||
+ | Default options are read from the following files in the given order: | ||
+ | /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf | ||
+ | </code> | ||
+ | Éventuellement ce fichier contient des directives **!includedir**. Il faut alors chercher dans ces répertoires le fichier qui contient **datadir**. | ||
+ | |||
+ | Dans la suite, nous allons déplacer les données dans **/home/mysql**. | ||
+ | |||
+ | Tout d'abord on arrête le service : | ||
+ | <code>$ sudo service mysql stop</code> | ||
+ | [[:tutoriel:comment_modifier_un_fichier|On édite le fichier]] qui contient **datadir** et on met la nouvelle valeur : | ||
+ | <code> | ||
+ | datadir = /home/mysql | ||
+ | </code> | ||
+ | On suppose que l'ancienne valeur de **datadir** était **/var/lib/mysql**. | ||
+ | On déplace les données : | ||
+ | <code>$ sudo mv /var/lib/mysql /home</code> | ||
+ | |||
+ | Malheureusement cela ne suffit pas. | ||
+ | Le premier problème vient du fichier''/usr/share/mysql/mysql-systemd-start'' : | ||
+ | <code> | ||
+ | $ head /usr/share/mysql/mysql-systemd-start -n25 | tail -n16 | ||
+ | sanity () { | ||
+ | if [ ! -r /etc/mysql/my.cnf ]; then | ||
+ | echo "MySQL configuration not found at /etc/mysql/my.cnf. Please create one." | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | if [ ! -d /var/lib/mysql ] && [ ! -L /var/lib/mysql ]; then | ||
+ | echo "MySQL data dir not found at /var/lib/mysql. Please create one." | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | if [ ! -d /var/lib/mysql/mysql ] && [ ! -L /var/lib/mysql/mysql ]; then | ||
+ | echo "MySQL system database not found. Please run mysql_install_db tool." | ||
+ | exit 1 | ||
+ | fi | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Il faut donc créer le répertoire **/var/lib/mysql/mysql** avec les bons droits : | ||
+ | <code>$ sudo mkdir -p /var/lib/mysql/mysql | ||
+ | $ sudo chown -R mysql:mysql /var/lib/mysql | ||
+ | $ sudo chmod -R 700 /var/lib/mysql</code> | ||
+ | |||
+ | Il faut maintenant configurer [[:apparmor|AppArmor]]. D'après ce qui suit, nous devons modifier le fichier ''local/usr.sbin.mysqld'' : | ||
+ | <code> | ||
+ | $ tail /etc/apparmor.d/usr.sbin.mysqld -n3 | ||
+ | # Site-specific additions and overrides. See local/README for details. | ||
+ | #include <local/usr.sbin.mysqld> | ||
+ | </code> | ||
+ | [[:tutoriel:comment_modifier_un_fichier|Modifier le fichier]] ''/etc/apparmor.d/local/usr.sbin.mysqld'' en ajoutant : | ||
+ | <code> | ||
+ | # Allow data dir access | ||
+ | /home/mysql/ r, | ||
+ | /home/mysql/** rwk, | ||
+ | </code> | ||
+ | Rechargez : | ||
+ | <code>sudo service apparmor reload</code> | ||
+ | Redémarrez le service : | ||
+ | <code>sudo service mysql start</code> | ||
+ | Vérifiez le changement : | ||
+ | <code> | ||
+ | $ mysql -u root -p -e 'select @@datadir' | ||
+ | Enter password: | ||
+ | +--------------+ | ||
+ | | @@datadir | | ||
+ | +--------------+ | ||
+ | | /home/mysql/ | | ||
+ | +--------------+ | ||
+ | </code> | ||
+ | |||
+ | ==== Transférer une base de données entre deux serveurs via SSH ==== | ||
+ | |||
+ | === Préambule === | ||
+ | |||
+ | Dans le cadre d'une infra sans serveur spécifique de base de données, et que l'on souhaite partager une base commune. | ||
+ | |||
+ | === Mise en place === | ||
+ | |||
+ | Dans un premier temps il faut remplir deux conditions : | ||
+ | * que l'utilisateur de la base de données soit reconnu par le second serveur | ||
+ | * que l'utilisateur de la base de données soit reconnu par les deux serveurs MySql. | ||
+ | |||
+ | Pour une reconnaissance utilisateur d'un serveur à un autre : [[ssh#authentification_par_un_systeme_de_cles_publiqueprivee|Authentification par clés SSH]] (sans passphrase) | ||
+ | |||
+ | Pour que MySql reconnaisse l'utilisateur sans devoir saisir son mot de passe à chaque commande (dans le cas d'un tâche [[cron|CRON]] par exemple), il faut ajouter un fichier dans le répertoire personnel de cet utilisateur et ce __**sur chaque serveur**__. [[tutoriel:comment_editer_un_fichier|Éditer]]/créer le fichier **~/.my.cnf** | ||
+ | |||
+ | <file> | ||
+ | [mysql] | ||
+ | user=nom_utilisateur | ||
+ | password=mot_de_passe_utilisateur | ||
+ | |||
+ | [mysqldump] | ||
+ | user=nom_utilisateur | ||
+ | password=mot_de_passe_utilisateur | ||
+ | </file> | ||
+ | Protéger le : | ||
+ | |||
+ | chmod 600 ~/.my.cnf | ||
+ | | ||
+ | Transférer depuis le serveur **A** vers le **B** : | ||
+ | |||
+ | mysqldump nom_bdd_serveur_A | ssh utilisateur_serveur_B@ip_serveur_B mysql nom_bbd_serveur_B | ||
+ | | ||
+ | Exemple de commande en tache [[cron|CRON]] : | ||
+ | |||
+ | 10 0 * * * mysqldump nom_bdd_serveur_A | ssh utilisateur_serveur_B@ip_serveur_B mysql nom_bbd_serveur_B >/dev/null #Mise à jour BDD | ||
+ | ===== Administrer MySQL via une une interface Web ===== | ||
+ | |||
+ | Il est possible d’administrer un serveur MySQL via une interface Web avec [[:phpMyAdmin]]. D'autres outils sont également disponibles et vous en trouverez une liste non exhaustive sur la page [[:mysql_outils|Outils MySQL]]. | ||
+ | |||
+ | ===== Liens ===== | ||
+ | |||
+ | * [[https://www.mysql.com/|Le site officiel de MySQL]] [en] | ||
+ | * [[http://www.mysql.fr/|Le site officiel francophone]] [fr] | ||
+ | * [[http://www.addedbytes.com/cheat-sheets/mysql-cheat-sheet/|Memento MySQL]] [en] | ||
+ | * [[http://www.system-linux.eu/index.php?category/Mysql|Aller plus loin avec MySQL]] [fr] | ||
+ | * [[http://www.generation-linux.fr/index.php?post/2007/12/17/9-cours-mysql|En savoir plus sur les commandes Mysql]] [fr] -> 3 petits cours sur MySQL à télécharger (PDF) | ||
+ | * [[http://www.system-linux.eu/index.php?post/2008/12/29/Configure-et-Installation-de-mysql|Installation à la main]] [fr] | ||
+ | * La page dédiée aux [[:mysql_outils|outils MySQL]] | ||
+ | * [[:greensql|GreenSQL : Pare-feu applicatif SQL]] | ||
+ | * [[http://www.system-linux.eu/index.php?post/2009/06/28/Proteger-son-server-Mysql-avec-GreenSQL|Protéger son serveur MySQL avec GreenSQL]] [fr] | ||
+ | * [[http://mysql.developpez.com/|La section dédiée à MySQL sur Developpez.com]] [fr] | ||
+ | * La page des [[:SGBD]]. | ||
+ | * [[:MariaDB]] -> Le serveur alternatif 100% compatible MySQL | ||
+ | * [[.:?do=showtag&tag=mysql|La liste des pages taguées avec MySQL]] | ||
+ | |||
+ | ---- | ||
+ | |||
+ | //Contributeurs : [[utilisateurs:_Enchained]], Hugo, Oscar Nsarhaza, [[utilisateurs:Ner0lph]], [[:utilisateurs:david96|david96]], Gounlaf, [[utilisateurs:McPeter]].//[[utillisateurs:Rewiiz]], ernest-le-voyage |