Trucs MYSQL

Pour se connecter:

 
    mysql -u root -p
 
Pour se connecter directement dans la db et ignorer le CTRL-C:
 
    mysql --sigint-ignore cours -u root -p
 
Pour voir les db:
 
    show databases;
 
Pour créer une database:
 
    create database cours;
 
Pour selectionner la database:
 
    use cours
    
Pour voir quelle database est utilisée:
 
    select database();
 
Pour créer une table:
 
    create table user(id int primary key auto_increment, nom varchar(50), prenom varchar(50));
    
Pour voir le schéma de la table:
 
    show create table user;
 
Pour voir la description de la table:
 
    desc user;
    
    ou
    
    desc database.table;
 
Pour voir les tables:
 
    show tables;
 
Pour voir le status des tables:
 
    show table status from db_cchd_acd;
    
    ou
    
    show table status from db_cchd_acd where Name='t_cchd_acd';
    
Pour introduire une valeur:
 
    insert into user values('','toto','tutu');
    insert into user values('','toto1','tutu2');
    
Pour le contenu de la table:
 
    select * from user;
 
Pour voir les users de mysql:
 
    use mysql
    select host,user from user;
    
    ou
    
    select host,user from mysql.user;
 
Pour créer un utilisateur:
 
    CREATE USER 'toto'@'localhost' IDENTIFIED BY 'tutu';
    GRANT ALL ON cours.* TO 'toto'@'localhost';
    
    ou plus restreint, seulement un select sur une table:
    
    CREATE USER 'toto'@'localhost' IDENTIFIED BY 'tutu';
    GRANT SELECT ON cours.user TO 'toto'@'localhost';
 
Pour connaitre les pivilèges d'un utilisateur:
 
    si on a donne seulement pour une table
    
    select * from tables_priv where user='toto';
 
    si on a donne pour toute une database
    
    select * from db where user='toto';
 
Pour supprimer un utilisateur:
 
    drop user toto@localhost;
 
Pour changer le password d'un utilisateur:
 
    UPDATE mysql.user SET Password=PASSWORD('titi') WHERE user='toto';
    FLUSH PRIVILEGES;
 
Pour importer des donnees venant d'un fichier csv:
 
    mysql -u root -p -e "LOAD DATA LOCAL INFILE '/home/zuzu/users.csv' INTO TABLE cours.user FIELDS TERMINATED BY ',';"
 
Pour exporter des données venant d'un fichier csv (attention mysql utilise le compte mysql pour écrire le fichier !):
 
    mysql -u root -p -e "SELECT * INTO OUTFILE '/tmp/user2.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' FROM cours.user;"
 
Pour backuper la base de donnée:
 
    mysqldump cours -u root -p > baclup_db_cours.sql
 
Pour restaurer le backup dans une nouvelle base de donnée:
 
    mysql -u root -p -e "create database toto;"
    mysql toto -u root -p < backup_db_cours.sql
 
 
 
Pour faire une réplication master/slave
***************************************
 
Principe de base, quand on réplique une base de donnée mysql, en fait on ne réplique que les modifications depuis une certaine date depuis un log de transaction binaire, il faut donc récuperer via un mysqldump la base d'origine antérieure à cette date !
 
Plus d'info sur:
 
    http://dev.mysql.com/doc/refman/5.5/en/replication-howto.html
 
 
 
SUR LE SERVEUR MASTER IL FAUT FAIRE:
 
Eteindre le seveur mysql avec:
 
    sudo /etc/init.d/mysql stop
 
Editez le fichier my.cnf avec 
 
    sudo gedit /etc/mysql/my.cnf &
 
Ajoutez-y les lignes suivantes dans la section [mysqld]:
 
    log-bin
    server-id=1
    
Et il faut encore commenter (autrement on ne peut pas utiliser mysql via le réseau) la ligne:
 
    #bind-address = 127.0.0.1    
 
Redémarrer le seveur mysql avec:
 
    sudo /etc/init.d/mysql start
 
Se connecter:
 
    mysql -h localhost -u root -p
 
Créer l'utilisateur pour la replication:
 
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'%' IDENTIFIED BY 'repl';
 
On récupère le nom du fichier binaire, et son offset avec:
 
    mysql> SHOW MASTER STATUS;
 
par exemple:
 
...
mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000001 |      106 |              |                  | 
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
...
 
Puis il faut faire un dump de la base que l'on veut répliquer avec:
 
mysqldump cours -u root -p > cours_bkp.sql
 
 
 
SUR LE SERVEUR SLAVE IL FAUT FAIRE:
 
Eteindre le seveur mysql avec:
 
    sudo /etc/init.d/mysql stop
 
Editez le fichier my.cnf avec 
 
    sudo gedit /etc/mysql/my.cnf &
 
Ajoutez-y les lignes suivantes dans la section [mysqld]:
 
    server-id=2
 
Redémarrer le seveur mysql avec:
 
    sudo /etc/init.d/mysql start
 
Récupérer le backup fait sur le master par:
 
    mysql -u root -p -e 'create database cours'
    mysql cours -u root -p < cours_bkp.sql
 
Se connecter:
 
    mysql -h localhost -u root -p
 
Puis faire:
 
    CHANGE MASTER TO MASTER_HOST='128.178.1.197', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_LOG_FILE='mysqld-bin.000001', MASTER_LOG_POS=106;
puis:
 
    START SLAVE;
 
On peut vérifier que cela tourne bien en faisant:
 
    SHOW SLAVE STATUS;
    
    
 
 
 
 
 
Christian Zufferey / Jean-Pierre Dupertuis, 110621.1606