MySQL/Manipulation de base

Création

modifier
 CREATE DATABASE Nom_de_la_base;

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

En ligne de commande

modifier
  • mysqladmin create permet de le faire en ligne de commande[1].
  • Sinon :
 echo 'CREATE DATABASE IF NOT EXISTS ma_base COLLATE utf8mb4_unicode_ci;'|mysql -u root

Suppression

modifier
 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

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[2].

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;

Avec mysqldump

modifier
Pour plus de détails voir : MySQL/mysqldump.

Avec des outils de modélisation

modifier

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

phpMyAdmin

modifier
Pour plus de détails voir : MySQL/PhpMyAdmin.

MySQL Workbench

modifier

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

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.

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

OpenOffice Base et ODBC

modifier

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

Pour 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


À 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
  • 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.

À partir d'un fichier compressé :

gunzip < ~/my_dump.xml.gz | mysql -u my_user -p my_base

Références

modifier