Rien de plus simple !
# apt-get install mysql-client mysql-common mysql-server
ATTENTION: a plusieurs reprises, cette installation a necessité une mise à jour du noyau ! Il faut bien examiner les paquets mis a jour/ajoutés/enlevés.
# apt-get install mysql-client mysql-common
Lien: http://dev.mysql.com/doc/refman/5.1/en/passwords.html
![]() |
Aucun mot de passe n'est demandé aprés l'installation. (Mais il me semble qu'on ne peut se connecter qu'en localhost).
$ mysql -u root
Voir la liste des bases de données (pas grand chose au début):
mysql> show databases;
On veut utiliser la bdd 'mysql':
mysql> use mysql;
Voir les tables de la bdd:
mysql> show tables;
Description de la table 'user':
mysql> desc user;
Voir les users declarés dans 'user':
mysql> select Host,User,Password from user;
+-----------+------------------+------------------+ | Host | User | Password | +-----------+------------------+------------------+ | localhost | root | | | bourse2 | root | | | localhost | debian-sys-maint | 5d31XXXXXXXXXXXX | +-----------+------------------+------------------+ 3 rows in set (0.00 sec)
'Root' n'ayant pas de mot de passe, on va lui en mettre un:
mysql> update user set password=password('XXXXXXXX') where user='root' and host='localhost';
Et mysql repond que ca va…
Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
Sans oublier de mettre a jour les 'privileges': (p'tain quel bordel) (sinon, les nouveaux mot de passe sont ignorés pendant longtemps…)
mysql> flush privileges;
Verifions:
mysql> select Host,User,Password from user where user='root'; +-----------+------+------------------+ | Host | User | Password | +-----------+------+------------------+ | localhost | root | 4c9dXXXXXXXXXXXX | | bourse2 | root | | +-----------+------+------------------+ 2 rows in set (0.00 sec)
Les droits de 'Root':
mysql> show grants for root@localhost; +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+ 1 row in set (0.00 sec)
Dorénavant, l'accès par: “mysql -u root” reclame un mot de passe.
$ mysql -u root ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Entrer avec saisie de mot de passe:
mysql -u root -p
mysql> GRANT ALL ON MYDATABASE.* TO thierry@localhost; Query OK, 0 rows affected (0.00 sec)
Voila l'utilisateur 'thierry' créé.
On ne souhaite pas de mot de passe… sinon, on aurait ajouté:
IDENTIFIED BY "mot de passe"
Mais comme l'accès est restreint à “thierry@localhost”, et que le mot de passe sera forcement en clair quelques parts dans les programmes… autant ne pas en mettre.
Si malgré les droits sur la DATABASE
, le chargement d'un fichier avec LOAD DATA INFILE …
retourne Access denied for user 'thierry'@'localhost' (using password: YES)
, alors vous devez faire:
mysql> select user,File_priv from user where user='thierry'; +---------+-----------+ | user | File_priv | +---------+-----------+ | thierry | N | +---------+-----------+ 1 row in set (0.00 sec)
Donc, on pas les privilèges pour charger les fichiers ! alors faire:
mysql> update user set File_priv='Y' where user='thierry' and host='localhost'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
Et puis:
mysql> flush privileges;
Et voila.
Par defaut, MYSQL (5 ieme du nom) restreint l'ecoute TCP/IP a 'localhost'. Pour changer cela, il faut editer le fichier “/etc/mysql/my.cnf” et changer la ligne:
bind-address = 127.0.0.1
Par la ligne:
bind-address = 0.0.0.0
ATTENTION: Bien verifier que les droits sont fixés, avec les mots de passe !
(a verifier que c'est la bonne methode recommandé:)
Et puis, faire:
# /etc/init.d/mysql restart
On peut alors, notamment, utiliser mysql comme suit:
$ mysql -h adresse_du_serveur -u user -p
J'entre (en tant qu'utilisateur 'thierry' bien sur):
thierry@bourse2:~$ mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 to server version: 5.0.22-Debian_3-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
J'ai quoi comme database ?
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | +--------------------+ 1 row in set (0.00 sec)
Il manque 'FBXSERSERV', on va creer ça:
mysql> create database FBXSERSERV; Query OK, 1 row affected (0.00 sec)
Yes!
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | FBXSERSERV | +--------------------+ 2 rows in set (0.00 sec)
Utiliser cette database:
mysql> use FBXSERSERV; Database changed
Ensuite, on attaque la creation des tables et le reste:
Par exemple:
/* La base des clients par IP */ CREATE TABLE client_ip ( client_id INT UNSIGNED NOT NULL AUTO_INCREMENT, ip CHAR(23) NOT NULL, create_dt DATETIME NOT NULL, enable ENUM('Y','N') NOT NULL DEFAULT 'Y', logdata ENUM('Y','N') NOT NULL DEFAULT 'N', UNIQUE (ip), PRIMARY KEY (client_id) ) AUTO_INCREMENT=1000 /* les 1000 1er sont reservés pour on ne sait quoi... */ ;
Et aprés quelques creations, avoir ça par exemple:
mysql> show tables; +----------------------+ | Tables_in_FBXSERSERV | +----------------------+ | client_ip | | msg | | session | | tpe_stat | | x25_stat | +----------------------+ 5 rows in set (0.00 sec)
mysql> use mysql; mysql> select user,host from user; +------------------+-----------+ | user | host | +------------------+-----------+ | root | danstonq | | root | localhost | | le_user_a_virer | localhost | +------------------+-----------+
mysql> delete from user where user='le_user_a_virer' and host='localhost'; Query OK, 1 row affected (0.01 sec)
Mais je ne sais pas s'il y a un truc a faire avec GRANT et compagnie… (A completer ultérieurement)
mysql> drop database nom_de_la_base; Query OK, 0 rows affected (0.71 sec)
Il existe plusieurs méthodes que je n'ai pas testé, mais la suivante a fonctionné a partir d'un sql tout fraichement installé.
# mysqldump -u root -p --all-databases > all-databases.sql
Le fichier all-databases.sql est une serie de commande sql pour reconstruire les bases de données.
Sur un serveur mysql fraichement installé.
# mysql -u root -p < all-databases.sql
Ensuite, j'ai eu quelques difficultés d'identification, alors qu'il suffisait de faire:
mysql> flush privileges;
Mais il y avait encore un problème avec l'user debian-sys-maint (je crois qu'il controle le demarrage et l'arret de mysql… pas trop compris en fait).
Il faut rechercher son mot de passe dans: /etc/mysql/debian.cnf
Ensuite, il faut mettre a jour le password:
mysql> update user set password=password('le_mot_de_passe') where user='debian-sys-maint';
Et enfin:
mysql> flush privileges;
Liens:
![]() mysqlhotcopy ignore silencieusement toutes bases de données de 2 lettres !!!! Lien: http://bugs.mysql.com/bug.php?id=28460 |
Pour installer la version “1.23”, qui n'est pas buggé:
# wget http://backports.debian.org/debian-backports/pool/main/m/mysql-5.1/mysql-server-5.1_5.1.49-1~bpo50+1_i386.deb
(recuperer une version de mysql plus recentes, *sans* l'installer !)
Decompresser quelque part…
# dpkg -x mysql-server-5.1_5.1.49-1~bpo50+1_i386.deb .
et recuperer le fichier dans ./usr/bin/mysqlhotcopy
… Grrrr
Bref, revenons a ce p'tit pense bête:
Il faut nommer les bases a sauver.
Exemple:
# mkdir /var/backups/mysql # mysqlhotcopy --allowold --keepold --method=cp -u <USER> -p <MOT_DE_PASSE> {mysql,BaseSecrete}'./.*/' /var/backups/mysql/
Aprés cela on a la copie *exacte* et *coohérente* . Par exemple, aprés plusieurs sauvegardes:
$ ls -lart /var/backups/mysql/ total 24 drwxr-xr-x 3 root root 4096 sep 27 16:31 .. drwxr-x--- 2 mysql mysql 4096 sep 27 16:48 mysql_old drwxr-x--- 2 mysql mysql 4096 sep 27 16:48 BaseSecrete_old drwxr-x--- 2 mysql mysql 4096 sep 27 16:56 mysql drwxr-x--- 2 mysql mysql 4096 sep 27 16:56 BaseSecrete drwxr-xr-x 6 root root 4096 sep 27 16:56 .
Pour restaurer, il suffit d'arreter “mysql” et de copier l'ensemble des fichiers d'une base (d'un répertoire) dans /var/lib/mysql
$ mysql -u <user> <database> -e "SELECT * FROM <table>" >fichier.txt
Lien: http://www.tinybox.net/astuces/mysqld-root-recovery
Perte de mot de passe root: http://www.korben.info/changer-mot-de-passe-root-mysql.html
Mais aussi: http://www.admin-linux.fr/?p=2911
Lien:
# mysqldump -u root -p wz >wz.sql mysqldump: Got error: 144: Table './wz/Catalg' is marked as crashed and last (automatic?) repair failed when using LOCK TABLES
mysql> use wz; mysql> REPAIR TABLE Catalg; +-----------+--------+----------+-------------------------------------------+ | Table | Op | Msg_type | Msg_text | +-----------+--------+----------+-------------------------------------------+ | wz.Catalg | repair | warning | Number of rows changed from 0 to 12924086 | | wz.Catalg | repair | status | OK | +-----------+--------+----------+-------------------------------------------+ 2 rows in set (2 min 44.91 sec)