MySQL/Manipulation de base

Un livre de Wikilivres.
Aller à : navigation, rechercher


Création[modifier | modifier le wikicode]

 CREATE DATABASE Nom_de_la_base;

mysqladmin create permet de le faire en ligne de commande.

NB : dans MySQL, CREATE SCHEMA est un parfait synonyme de CREATE DATABASE, contrairement à d'autres SGBD comme Oracle ou SQL Server.

Suppression[modifier | modifier le wikicode]

 DROP DATABASE Nom_de_la_base;

mysqladmin drop permet de le faire en ligne de commande. Le paramètre -f force celle-ci sans poser de question.

Renommage[modifier | modifier le wikicode]

Dans les versions 5.1.x il existait une commande RENAME DATABASE db1 TO db2;, mais elle a été retirée suite à des pertes de données[1].

Il reste toutefois la ligne de commande pour le faire en plusieurs étapes :

 mysqladmin create Nom_de_la_nouvelle_base
 mysqldump --opt Nom_de_la_base | mysql Nom_de_la_nouvelle_base
 mysqladmin drop -f Nom_de_la_base

Une autre option avec les droits root, est de renommer le répertoire de la base :

 cd /var/lib/mysql/
 /etc/init.d/mysql stop
 mv Nom_de_la_base/ Nom_de_la_nouvelle_base/
 /etc/init.d/mysql start

Après renommage, il convient de migrer les permissions :

 UPDATE mysql.db SET `Db`='Nom_de_la_nouvelle_base' WHERE `Db`='Nom_de_la_base';
 FLUSH PRIVILEGES;

Copie[modifier | modifier le wikicode]

Avec mysqldump[modifier | modifier le wikicode]

mysqldump peut sauvegarder les bases, il suffit de réinjecter son résultat dans d'autres bases.

# Premièrement, nettoyer la base de destination :
 mysqladmin drop -f base2
 mysqladmin create base2
# Ensuite, copier la base1 dans la base2 :
 mysqldump --opt base1 | mysql base2

Backup[modifier | modifier le wikicode]

Pour définir le backup automatique d'une base tous les soirs à minuit[2], sous Linux :

 $ crontab -e
0 0 * * * /usr/local/bin/mysqldump -uLOGIN -PPORT -hHOST -pPASS base1 | gzip -c > `date “+\%Y-\%m-\%d”`.gz

Avec des outils de modélisation[modifier | modifier le wikicode]

Ces logiciels permettent de représenter les tables sous formes de diagrammes.

phpMyAdmin[modifier | modifier le wikicode]

Pour plus de détails voir : phpMyAdmin.

MySQL Workbench[modifier | modifier le wikicode]

MySQL Workbench permet également la migration depuis d'autres bases de données, telles que Microsoft SQL Server[3].

Par rapport à phpMyAdmin, il a l’inconvénient de devoir être installé, mais a l'avantage de pouvoir modifier des tables en changeant de champ au clavier, comme dans un tableur.

DBDesigner[modifier | modifier le wikicode]

DBDesigner est en licence GNU GPL, mais ne peut pas être considéré comme un freeware car il requiert un compilateur Kylix non gratuit.

Il rencontre une erreur de connexion à MySQL sur la version 4 : unable to load libmysqlclient.so. Pour la résoudre :

  • Installer les "Shared compatibility libraries"Télécharger MySQL pour version 5.0).

Sous Linux :

  • Remplacer le fichier libmysqlclient.so de DBDesigner par le nouveau :
 sudo ln -sf /usr/lib/libmysqlclient.so.10 /usr/lib/DBDesigner4/libmysqlclient.so
  • Trouver et installer kylixlibs3-unwind-3.0-rh.4.i386.rpm
  • Trouver un vieux xorg (ex : xorg-x11-libs-6.8.2-37.FC4.49.2.1.i386.rpm depuis FC4) et l'extraire :
 rpm2cpio x.rpm | cpio -i
  • Récupérer libXft.so.1.1 dans ce package et l'installer :
 sudo cp libXft.so.1.1 /usr/lib
 ldconfig

Maintenant DBDesigner4 peut se connecter à MySQL5.

Kexi[modifier | modifier le wikicode]

Il existe aussi Kexi de Calligra Suite, téléchargeable sur http://userbase.kde.org/Calligra/Download/fr.

OpenOffice Base et ODBC[modifier | modifier le wikicode]

Configuration typique :

  • Soit une base MySQL appelée mysqlhost.
  • OpenOffice.org sur la machine cliente (Debian GNU/Linux dans l'exemple).
  • Connexion via ODBC.

Sur le client, installer mysql-client :

 aptitude install mysql-client

Sous Fedora/CentOS :

 yum install mysql

Avant d'installer ODBC, test la connexion distante localement :

 $ mysql -h mysqlhost -u user1 mysqldatabase -p
 Enter password: PassUser1

Il faut créer la base mysqldatabase et l'utilisateur user1 sur mysqlhost.

 mysql> show databases;
 +--------------------+
 | Database           |
 +--------------------+
 | information_schema |
 | mysqldatabase      |
 +--------------------+
 2 rows in set (0.00 sec)
 ....
 mysql> quit;
 Bye

Toujours sur la machine cliente :

 aptitude install libmyodbc unixodbc

Pour Fedora/CentOS :

 yum install mysql-connector-odbc unixODBC

Les fichiers /etc/odbc.ini et /etc/odbcinst.ini sont créés.

odbcinst.ini déclare le pilote ODBC disponible. Exemple pour Debian :

[MySQL]
Description     = MySQL driver
Driver          = /usr/lib/odbc/libmyodbc.so
Setup           = /usr/lib/odbc/libodbcmyS.so
CPTimeout       =
CPReuse         =
FileUsage       = 1

for CentOS:

[MySQL]
Description     = ODBC for MySQL
Driver          = /usr/lib/libmyodbc3.so
Setup           = /usr/lib/libodbcmyS.so
FileUsage       = 1


Maintenant odbcinst est utilisable :

# odbcinst -j
unixODBC 2.2.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
USER DATA SOURCES..: /root/.odbc.ini

Pour d'autres options : man odbcinst

Il faut créer au moins un DSN (Data Source Name ou Data Set Name), parce que chaque connexion ODBC avec OOo est initialisée avec.

Pour créer un DSN, il existe différente possibilités :

  • Modifier /etc/odbc.ini (concerne tous les utilisateurs)
  • Modifier ~/.odbc.ini (concerne un seul utilisateur)
  • Utilise les applications graphiques comme ODBCConfig (Debian : unixodbc-bin, Fedora : unixODBC-kde).

Finalement, ces applications graphiques modifient /etc/odbc.ini ou ~/.odbc.ini.

Par exemple, un fichier /etc/odbc.ini (le nom du DSN est entre crochets []) :

[MySQL-test]
Description     =       MySQL ODBC Database
TraceFile       =       stderr
Driver          =       MySQL
SERVER          =       mysqlhost
USER            =       user1
PASSWORD        =
DATABASE        =       mysqldatabase

Dans ce cas, le DSN est appelé MySQL-test.

Ensuite pour tester, utiliser la commande isql :

$ isql -v MySQL-test user1 PassUser1
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> show databases;
+-------------------+
| Database          |
+-------------------+
| information_schema|
| mysqldatabase     |
+-------------------+
2 rows affected
2 rows returned
SQL> quit;

Depuis OOo :

-> File
 -> New
  -> Database
-> Connecting to an existing database
 -> MySQL
   -> Next
-> Connect using ODBC
 -> Next
-> Choosing a Data Source
 -> MySQL-test
  -> Next
-> Username : user1 (tick password required)
-> Yes, register the database for me
-> Finish


A ce stade, le programme est connecté à la base mysqldatabase en tant que user1. Il reste donc le mot de passe à rentrer.

Ensuite, Java est requis dans les Wizards uniquement (lors de création directe JRE est inutile) :

  • Wizard pour créer un formulaire.
  • Wizard pour créer des rapports.
  • Wizard pour créer des requêtes.
  • Wizard pour créer tables.

Les distributions GNU/Linux fournissent généralement OpenOffice avec IcedTea (openjdk-6-jre/java-1.6.0-openjdk) ou GCJ (java-gcj-compat/java-1.4.2-gcj-compat) donc les fonctionnalités basées sur du Java fonctionnent.

Restauration[modifier | modifier le wikicode]

  • Sous Linux, le mot de passe est demandé après entrée de la commande :
mysql -h localhost -u root -p MaBase < MaBase.sql
  • Sous Windows, par défaut le compte root n'a pas de mot de passe et MySQL n'est pas dans les variables d'environnement donc on utilise son chemin absolu :
"C:\Program Files (x86)\EasyPHP\binaries\mysql\bin\mysql.exe" -h localhost -u root MaBase < MaBase.sql

Contrairement aux importations de PhpMyAdmin il n'y a pas de limite. Par exemple on peut charger une base de 2 Go en cinq minutes.

Références[modifier | modifier le wikicode]