Ceci est une ancienne révision du document !
MySQL
Benchmark de MySQL
SELECT benchmark(100000000,1+2);
Reset un mot de passe root perdu
sudo /etc/init.d/mysql stop sudo mysqld_safe --skip-grant-tables & mysql > update mysql.user set password = password('VOTRENOUVEAUMOTDEPASSE') where user = 'root'; > flush privileges; > exit sudo /etc/init.d/mysql stop sudo /etc/init.d/mysql start
Dump des privilèges des utilisateurs
mysql -B -N $@ -e "SELECT DISTINCT CONCAT( 'SHOW GRANTS FOR ''', user, '''@''', host, ''';' ) AS query FROM mysql.user" | \ mysql $@ | \ sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/## \1 ##/;/##/{x;p;x;}'
Réplication Master-Master
- Serveur 1 : 192.168.88.101
- Serveur 2 : 192.168.88.102
Principe : Le serveur 1 sera à la fois master pour le serveur 2 et le slave pour serveur 2 et inversement.
Remarque : Il est possible en adaptant un peu cette configuration de synchroniser que certaine bases.
- Instalation sur les deux machines des paquets mysql-server et mysql-client
- Sur serveur 1 :
- Editer le fichier /etc/mysql/my.cnf
- Ajouter dans [mysqld] :
server-id = 1 log_bin = /var/log/mysql/mysql-bin.log
- Commenter la ligne :
bind-address = 127.0.0.1
- Exécuter la requête SQL suivante :
grant replication slave on *.* to 'replication'@192.168.88.102 identified by 'mdpslave';
- Redémarrer le service MySQL
- Sur serveur 2 :
- Editer le fichier /etc/mysql/my.cnf
- Ajouter dans [mysqld] :
server-id = 2 log_bin = /var/log/mysql/mysql-bin.log
- Commenter la ligne :
bind-address = 127.0.0.1
- Ajouter dans [mysqld] :
master-host = 192.168.88.101 master-user = replication master-password = mdpslave master-port = 3306
- Redémarrer le service MySQL
- Exécuter la requête SQL suivante :
start slave;
- Pour savoir si la réplication se passe correctement exécuter la requête suivante :
show slave status\G;
- Le résultat de cette requête devrais être a peu près :
*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.88.101 Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 263 Relay_Log_File: mysqld-relay-bin.000003 Relay_Log_Pos: 408 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes ...
- Les valeurs Slave_IO_Running et Slave_SQL_Running doivent être à Yes.
- Cette vérification est également possible depuis serveur 1 en exécutant la requête SQL suivante :
show master status;
- Le résultat de cette requête devrais être a peu près :
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 106 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
- Exécuter ensuite la requête SQL suivante :
grant replication slave on *.* to 'replication'@192.168.88.101 identified by 'mdpslave2';
- Sur serveur 1 :
- Editer le fichier /etc/mysql/my.cnf
- Ajouter dans [mysqld] :
master-host = 192.168.88.102 master-user = replication master-password = mdpslave2 master-port = 3306
- Redémarrer le service MySQL
- Exécuter la requête SQL suivante :
start slave;
- Vérifier que la synchronisation se passe correctement dans se sens également en exécutant la requête SQL :
show slave status\G;
- Le résultat de cette requête devrais être a peu près :
*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.88.102 Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 263 Relay_Log_File: mysqld-relay-bin.000003 Relay_Log_Pos: 408 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes ...
- Les valeurs Slave_IO_Running et Slave_SQL_Running doivent être à Yes.
- Sur serveur 2, la requête SQL suivante
show master status;
devrais retourner à peut près la même chose que sur serveur 1
La synchronisation est normalement opérationnel.
Si ça se passe mal
- Si vous rencontrez une erreur du type :
Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’
Voici la solution à appliquer
- Sur le slave :
stop slave;
- Sur le master :
flush logs; show master status; — Noter le nom du log et la position
- Sur le slave :
CHANGE MASTER TO MASTER_LOG_FILE=’log-bin.00000X′, MASTER_LOG_POS=106; start slave;