Différences entre les versions de « Mysql commandes diverses »

De BlaxWiki
Aller à la navigationAller à la recherche
m (a renommé Mysql en Mysql Divers)
 
(50 versions intermédiaires par 5 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
== Synchro ==
[https://{{SERVERNAME}}/BENPERSO/doc-manuel/system/software/Mysql_administration-FR.htm Documentation générale sur mysql] (tiré de http://www.dj-j.net/waka/Linux:Administration_MySQL)


[https://{{SERVERNAME}}/BENPERSO/doc-manuel/system/software/Mysql-cours-FR.pdf Support de cours sql & mysql +] (tiré de http://sebastien.nameche.fr/supports/MySQL.pdf)


* Relance de synchro sur les slave en mysql 5 :
[https://{{SERVERNAME}}/BENPERSO/doc-manuel/system/software/Mysql-cours-bis-FR.pdf Support de cours mysql générique, info base de données relationnelles +] (tiré de http://nbernier.free.fr/documents/mysql.pdf)


stop slave;
[https://{{SERVERNAME}}/BENPERSO/doc-manuel/system/software/Mysql-Referecence_Manuel-FR.pdf Manuel de référence (je ne sais pas si il est tiré du site officiel)]


show databases;
== Commandes divers ==
* Commandes générales
<pre>
- \G à la fin d'une requete sort le résultat en ligne et non en colonne
- \P more : définit le pager sur more, ce qui permet d'afficher page par page
- describe nomdunetable : info sur la structure d'une table
- show full processlist : info sur les requetes en cours
- show variables : donne les variables du serveur mysql
- show variables like '%char%': donne les variables incluant *char*
- use $nomdatabase; show variables like "character_set_database"; show variables like "collation_database" : permet de voir le charset de la base (utf8...)


drop database easy; drop database clarapw;  
- Exemple de création de tables:
CREATE TABLE `pop3_imap_proxy` (`user` varchar(128) NOT NULL,`servername` varchar(255) NOT NULL,`port` varchar(8) default NULL,PRIMARY KEY  (`user`),KEY `idxtblPerdition_user`
(`user`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;


create database easy; create database clarapw; create database internal; create database postfix;
- DUMP : lorsqu'on dump toutes les databases en un seul fichier (mysqldump –all-databases), il est souvent fastidieux de découper le fichier pour récupérer une base de données
particulière. Une option de la commande mysql est faite pour cela : "mysql -o" (--one-database). Il faut juste faire un "create database foo" puis mysql -o foo < all-databases.sql


load data from master;
Si on souhaite juste extraire sous forme de fichier SQL la base qui nous intéresse : sed -n '/^-- Current Database: `BASE_A_EXTRAIRE`/,/^-- Current Database: `/p' dumpcomplet.sql >
mabase.sql


start slave;
Attention toutefois, selon les exports, la langue peut changer et "Current Database" s'écrire alors en français "Base de données". À vous d'adapter cette commande.
</pre>


show slave status \G
* Create, delete, insert, select, update
<pre>
- create user 'root'@'172.26.15.17' identified by 'tVBBF1OO'
- create database `test-ben` (pour créer/droper une base avec un "-", il faut mettre le nom de la base entre ``)
- delete from nom_table where id=1 and name="lkl"
- insert into whitelist set login="smtp@corp.lecroupier.com", passwd="oueteo"
- insert into user (Host,User,Password) values('localhost','enqueteinterne','*0BCE6C0'),('localhost','cram','*2FEB6EC5D5EA08F19281188D74')
- select (count(*)) from user : retourne le nombre
- select if( find_in_set('Migrated',migrated),'','') from easy.mbox
- update mysql.user set password = password('newpasswd') where User="vision" (modifie le password)
- update nom_table set prenom='Jean-Pierre', nom='Papin', ville='Marseille', enfants=3 WHERE id=1 (Si on est sur qu'il n'y a qu un enregistrement à supprimer, on peut rajouter
  limit 1 à la fin dans le cas où nous ne sommes pas sur
- select * from information_schema.tables where engine='MyISAM' and table_schema='$NOMBASE' : trouver les tables en Myisam
</pre>


* Grant
<pre>
- show grants for user@host : info sur les droits de ce user
- grant all privileges on *.* to 'root'@'ip' identified by "mdp" (rajoute un user root pour taper depuis une autre ip que localhost)
- grant all privileges on *.* to 'root'@'ip' with grant option identified by "mdp" /!\ /!\ /!\ TOUJOURS BIEN METTRE UN identified by SINON CELA CREE UN USER SANS MOT DE PASSE /!\/!\
- grant usage on *.* to testuser@localhost identified by "password"; (créé un user sans aucun droit dans la base user, ne sera pas présent dans la base db)
- grant all privileges on bentest.* to testuser@localhost identified by "password"; (créé un user testuser sans aucun droit dans la base user, mais avec tous les droits sur la base
  bentest ; user et droit visible dans la base db)
</pre>


- Relancer la synchro pour 1 seul slave: sur le master, lancer le script /var/db/Replication/Master_Syncher.sh ---no-lock (le laisser lancé), puis sur le slave lancer le script /var/db/Replication/Syncer.sh


Pour resynchroniser tous les slaves, sur le master : /var/db/Replication/Master_Syncher.sh --lock
* UnLock tables
<pre>
Pour voir les tables lockées :
show open tables where in_use>0;


Puis :
Voir la list des process (et voir le pid du process de la table en question)
show processlist;


- Commande de synchro : sur le slave : stop slave / sur le master : SHOW MASTER STATUS; récuperer le nom du fichier
Tuer le process :
et la position / sur le slave :  CHANGE MASTER TO MASTER_LOG_POS = 49575998 , MASTER_LOG_FILE = "mysql-bin.000023"; start slave
kill put_process_id_here;
</pre>


(CHANGE MASTER TO MASTER_HOST="mysql2.co.fr.clara.net", MASTER_USER="clara_replic", MASTER_PASSWORD="cl3r3r3pl1c", MASTER_LOG_FILE="mysql-bin.000001", MASTER_LOG_POS=2452;
* Nombre de connexion par user
slave stop; reset slave;)
<pre>
select count(*) as NB_Connexions, USER , HOST  from INFORMATION_SCHEMA.PROCESSLIST where USER not in ( 'root' , 'replicadmin' )  GROUP BY  USER  order by NB_Connexions desc ;
</pre>


INSERT INTO `user` ( `Host` , `User` , `Password` , `Select_priv` , `Insert_priv` , `Update_priv` , `Delete_priv` , `Create_priv` , `Drop_priv` , `Reload_priv` , `Shutdown_priv` , `Process_priv` , `File_priv` , `Grant_priv` , `References_priv` , `Index_priv` , `Alter_priv` )
== Pb avec mysql 4.1 et client 3.23 ==
VALUES (
'localhost', 'u_cpop_ng', 'xxxxpasswordxx', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'
);


== Divers ==
<pre>
mysql > SET PASSWORD FOR 'postfix'@'localhost' = OLD_PASSWORD('reixaetu');
mysql > flush privileges;


* Création du user wikiuser  et du mot de passe crypté (via identified) et des droits sur la base wikidb :
ou


grant all on wikidb.* to 'wikiuser'@'%' identified by '2igh4xxxx1'
# mysqladmin -uroot! -p -hip_du_serveur! old-password nouveaupassword!


[[Catégorie:System-Clara]]
ou
 
dans le my.cnf en mettant :
set_variable = old_passwords=1 dans la partie [mysqld]
</pre>
 
== Commandes mysql en bash==
 
mysql -u postfix -e "INSERT into mailbox (username,password,name,maildir,domain) values ('$MBOX', '$PASSWD', '$NAME', '$MBOX/', '$DOMAIN');" -pmotdepasse postfix
 
mysqlhotcopy : script Perl qui utilise LOCK TABLES, FLUSH TABLES et cp ou scp pour faire rapidement des sauvegardes de bases. C'est
la méthode la plus rapide pour faire une sauvegarde. C'est aussi le moyen le plus sûr pour copier des tables et bases, mais il ne
peut fonctionner que sur la machine qui contient les fichiers de données, il ne fonctionne qu'avec les tables de type MyISAM et
ISAM.
 
== Reset du password root==
<pre>
1. Arreter le serveur mysql (avec le script d'init)
 
2. Sous le user mysql :
# mysqld --skip-grant-tables --skip-networking --datadir=/data/mysql/data --pid-file=/data/mysql/data/antispam.amesys.fr.pid --socket=/data/mysql/data/mysql.sock
(les options --datadir, --pid-file et --socket sont optionnellesà
 
3. Sous le user root
# mysql --socket=/data/mysql/data/mysql.sock
 
mysql> use mysql;
 
mysql> UPDATE user SET password=PASSWORD('Ch00bAk1') WHERE user="root";
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0
 
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
</pre>
 
== Rsyslog ==
On peut demander à mysql d'envoyer ses logs dans rsyslog (Pas trouvé de moyen simple de faire logguer mysql dans une autre facility/priority)
<pre>
Ajouter au my.cnf :
[mysqld_safe]
syslog
 
Ajouter à rsyslog.conf
daemon.*        /var/log/mysql/error.log;RSYSLOG_TraditionalFileFormat
</pre>
[[Catégorie:Software]]

Version actuelle datée du 12 décembre 2018 à 15:10

Documentation générale sur mysql (tiré de http://www.dj-j.net/waka/Linux:Administration_MySQL)

Support de cours sql & mysql + (tiré de http://sebastien.nameche.fr/supports/MySQL.pdf)

Support de cours mysql générique, info base de données relationnelles + (tiré de http://nbernier.free.fr/documents/mysql.pdf)

Manuel de référence (je ne sais pas si il est tiré du site officiel)

Commandes divers[modifier]

  • Commandes générales
 - \G à la fin d'une requete sort le résultat en ligne et non en colonne
 - \P more : définit le pager sur more, ce qui permet d'afficher page par page
 - describe nomdunetable : info sur la structure d'une table
 - show full processlist : info sur les requetes en cours
 - show variables : donne les variables du serveur mysql
 - show variables like '%char%': donne les variables incluant *char*
 - use $nomdatabase; show variables like "character_set_database"; show variables like "collation_database" : permet de voir le charset de la base (utf8...) 

 - Exemple de création de tables:
CREATE TABLE `pop3_imap_proxy` (`user` varchar(128) NOT NULL,`servername` varchar(255) NOT NULL,`port` varchar(8) default NULL,PRIMARY KEY  (`user`),KEY `idxtblPerdition_user` 
(`user`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 - DUMP : lorsqu'on dump toutes les databases en un seul fichier (mysqldump –all-databases), il est souvent fastidieux de découper le fichier pour récupérer une base de données 
particulière. Une option de la commande mysql est faite pour cela : "mysql -o" (--one-database). Il faut juste faire un "create database foo" puis mysql -o foo < all-databases.sql

Si on souhaite juste extraire sous forme de fichier SQL la base qui nous intéresse : sed -n '/^-- Current Database: `BASE_A_EXTRAIRE`/,/^-- Current Database: `/p' dumpcomplet.sql > 
mabase.sql

Attention toutefois, selon les exports, la langue peut changer et "Current Database" s'écrire alors en français "Base de données". À vous d'adapter cette commande.
  • Create, delete, insert, select, update
 - create user 'root'@'172.26.15.17' identified by 'tVBBF1OO'
 - create database `test-ben` (pour créer/droper une base avec un "-", il faut mettre le nom de la base entre ``)
 - delete from nom_table where id=1 and name="lkl"
 - insert into whitelist set login="smtp@corp.lecroupier.com", passwd="oueteo"
 - insert into user (Host,User,Password) values('localhost','enqueteinterne','*0BCE6C0'),('localhost','cram','*2FEB6EC5D5EA08F19281188D74')
 - select (count(*)) from user : retourne le nombre 
 - select if( find_in_set('Migrated',migrated),'','') from easy.mbox 
 - update mysql.user set password = password('newpasswd') where User="vision" (modifie le password)
 - update nom_table set prenom='Jean-Pierre', nom='Papin', ville='Marseille', enfants=3 WHERE id=1 (Si on est sur qu'il n'y a qu un enregistrement à supprimer, on peut rajouter
   limit 1 à la fin dans le cas où nous ne sommes pas sur
 - select * from information_schema.tables where engine='MyISAM' and table_schema='$NOMBASE' : trouver les tables en Myisam
  • Grant
 - show grants for user@host : info sur les droits de ce user
 - grant all privileges on *.* to 'root'@'ip' identified by "mdp" (rajoute un user root pour taper depuis une autre ip que localhost) 
 - grant all privileges on *.* to 'root'@'ip' with grant option identified by "mdp" /!\ /!\ /!\ TOUJOURS BIEN METTRE UN identified by SINON CELA CREE UN USER SANS MOT DE PASSE /!\/!\
 - grant usage on *.* to testuser@localhost identified by "password"; (créé un user sans aucun droit dans la base user, ne sera pas présent dans la base db)
 - grant all privileges on bentest.* to testuser@localhost identified by "password"; (créé un user testuser sans aucun droit dans la base user, mais avec tous les droits sur la base 
   bentest ; user et droit visible dans la base db)


  • UnLock tables
Pour voir les tables lockées :
show open tables where in_use>0;

Voir la list des process (et voir le pid du process de la table en question)
show processlist;

Tuer le process :
kill put_process_id_here;
  • Nombre de connexion par user
select count(*) as NB_Connexions, USER  , HOST  from INFORMATION_SCHEMA.PROCESSLIST where USER not in ( 'root' , 'replicadmin' )  GROUP BY  USER  order by NB_Connexions desc ;

Pb avec mysql 4.1 et client 3.23[modifier]

mysql > SET PASSWORD FOR 'postfix'@'localhost' = OLD_PASSWORD('reixaetu');
mysql > flush privileges;

ou

# mysqladmin -uroot! -p -hip_du_serveur! old-password nouveaupassword!

ou

dans le my.cnf en mettant :
set_variable = old_passwords=1 dans la partie [mysqld]

Commandes mysql en bash[modifier]

mysql -u postfix -e "INSERT into mailbox (username,password,name,maildir,domain) values ('$MBOX', '$PASSWD', '$NAME', '$MBOX/', '$DOMAIN');" -pmotdepasse postfix

mysqlhotcopy : script Perl qui utilise LOCK TABLES, FLUSH TABLES et cp ou scp pour faire rapidement des sauvegardes de bases. C'est la méthode la plus rapide pour faire une sauvegarde. C'est aussi le moyen le plus sûr pour copier des tables et bases, mais il ne peut fonctionner que sur la machine qui contient les fichiers de données, il ne fonctionne qu'avec les tables de type MyISAM et ISAM.

Reset du password root[modifier]

1. Arreter le serveur mysql (avec le script d'init)

2. Sous le user mysql :
# mysqld --skip-grant-tables --skip-networking --datadir=/data/mysql/data --pid-file=/data/mysql/data/antispam.amesys.fr.pid --socket=/data/mysql/data/mysql.sock
(les options --datadir, --pid-file et --socket sont optionnellesà

3. Sous le user root 
# mysql --socket=/data/mysql/data/mysql.sock

mysql> use mysql;

mysql> UPDATE user SET password=PASSWORD('Ch00bAk1') WHERE user="root";
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

Rsyslog[modifier]

On peut demander à mysql d'envoyer ses logs dans rsyslog (Pas trouvé de moyen simple de faire logguer mysql dans une autre facility/priority)

Ajouter au my.cnf :
[mysqld_safe]
syslog

Ajouter à rsyslog.conf
daemon.*        /var/log/mysql/error.log;RSYSLOG_TraditionalFileFormat