Mysql

De Admin -- TALEVAS.
(Différences entre les versions)
(Tunnel SSH)
(Utils)
 
(8 révisions intermédiaires par 4 utilisateurs sont masquées)
Ligne 24 : Ligne 24 :
  
 
-----
 
-----
 +
 +
== change root password ==
 +
 +
shell> mysql -u root
 +
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('nouveau_mot');
 +
mysql> SET PASSWORD FOR ''@'%' = PASSWORD('nouveau_mot');
 +
 +
 +
== Purge bin log ==
 +
 +
PURGE MASTER LOGS TO 'mysql-bin.010';
 +
PURGE MASTER LOGS BEFORE '2003-04-02 22:46:26';
  
 
== connection en local ==
 
== connection en local ==
Ligne 32 : Ligne 44 :
 
  -E =>  presentation à la vertical plutôt qu'a l'horizontal
 
  -E =>  presentation à la vertical plutôt qu'a l'horizontal
 
  --socket => permet de prendre un autre service que celui par defaut
 
  --socket => permet de prendre un autre service que celui par defaut
 
  
 
------
 
------
 +
 +
== AJouter un deamon ==
 +
 +
copie du fichier init
 +
cp -r /etc/init.d/mysql /etc/init.d/mysql-new-name
 +
 +
copie et modification du my.cnf
 +
cp -r /etc/mysql/my.cnf /etc/mysql/my-new-name.cnf
 +
 +
On oublie pas de le modifier avec les nouveaux params
 +
En gros il faut changer toutes les références à l'autre répertoire, sock, pid
 +
on oublie pas de créer le répertoire avec les data et d'y donner les droits à l'utilisateur mysql
 +
Il faut l'initialiser
 +
/usr/bin/mysql_install_db --datadir=/var/lib/mysql-new-name
  
 
== replication ==
 
== replication ==
Ligne 132 : Ligne 157 :
 
On change le CHANGE MASTER à laquelle il faut ajouter la directive MASTER_PORT=PORT
 
On change le CHANGE MASTER à laquelle il faut ajouter la directive MASTER_PORT=PORT
 
  mysql> CHANGE MASTER TO MASTER_HOST='localhost', MASTER_USER='root', MASTER_PASSWORD='********', MASTER_PORT=13306
 
  mysql> CHANGE MASTER TO MASTER_HOST='localhost', MASTER_USER='root', MASTER_PASSWORD='********', MASTER_PORT=13306
 +
 +
 +
== Utils ==
 +
http://www.computerworld.com/s/article/9218765/10_essential_MySQL_tools_for_admins
 +
=== MysqlDump ===
 +
--extended-insert, -e
 +
Utilise la nouvelle syntaxe multi-ligne INSERT. (Cela donne des insertions plus courtes et plus efficaces).
 +
 +
=== mysqldump only some tables ===
 +
mysql -u root -p DatabaseName -e "show tables;" |grep TablePrefix > /tmp/liste-tables
 +
mysqldump -u root -p DatabaseName --tables `cat /tmp/liste-tables`
 +
 +
=== SKIP ===
 +
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = X

Version actuelle en date du 16 septembre 2011 à 07:53

Sommaire

MYSQL

désactiver les logs binaires qui prennent plein de place pour rien sur une machine en prod.

vim /etc/mysql/my.cnf
commenter la ligne log-bin et la suivante.


Déplacer le répertoire de stockage des bases de données.

cp -rp /var/lib/mysql /home (par exemple)

vim /etc/mysql/my.cnf

modifier la ligne "datadir"

#datadir                                        = /var/lib/mysql
datadir                                         = /home/mysql


mysqladmin -u root flush-privileges password ******** --socket=/var/run/mysqld/mysqld-ns37682.sock

change root password

shell> mysql -u root
mysql> SET PASSWORD FOR @'localhost' = PASSWORD('nouveau_mot');
mysql> SET PASSWORD FOR @'%' = PASSWORD('nouveau_mot');


Purge bin log

PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2003-04-02 22:46:26';

connection en local

mysql -u root -p******* -E --socket=/var/run/mysqld/mysqld-ns37682.sock
user
password
-E =>  presentation à la vertical plutôt qu'a l'horizontal
--socket => permet de prendre un autre service que celui par defaut

AJouter un deamon

copie du fichier init

cp -r /etc/init.d/mysql /etc/init.d/mysql-new-name

copie et modification du my.cnf

cp -r /etc/mysql/my.cnf /etc/mysql/my-new-name.cnf

On oublie pas de le modifier avec les nouveaux params En gros il faut changer toutes les références à l'autre répertoire, sock, pid on oublie pas de créer le répertoire avec les data et d'y donner les droits à l'utilisateur mysql Il faut l'initialiser

/usr/bin/mysql_install_db --datadir=/var/lib/mysql-new-name

replication

la doc sur le site de mysql => [1]

On lock les tables en écriture

mysql> FLUSH TABLES WITH READ LOCK;

On lance le dump de toutes les données.

mysqldump -u USER -p****** -A > /PATH/TO/DUMPFILE

On récupère la position du master

mysql> SHOW MASTER STATUS;
*************************** 1. row ***************************
            File: ns20587.000012
        Position: 8330324
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

autre présentations en fonction de la façon de se loguer ( -E )

mysql> SHOW MASTER STATUS;
+----------------+----------+--------------+------------------+
| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------+----------+--------------+------------------+
| ns20587.000012 |  8707042 |              |                  |
+----------------+----------+--------------+------------------+


On unlock les tables

mysql> UNLOCK TABLES;

On restaure les données sur le slave après les y avoir transféré.

mysql -u USER -p******** < /PATH/TO/DUMPFILE

On donne les au slave les instructions pour qu'il aille chercher sur le master les infos dans les fichiers bin.

mysql> CHANGE MASTER TO MASTER_HOST='HOSTNAME', MASTER_USER='USER', MASTER_PASSWORD='********', MASTER_LOG_FILE='FILE', MASTER_LOG_POS=POSITION;

On peu ensuite vérifier que le slave se synchronise bien (l'autre vue sans le -E est illisible pour moi ...)

mysql> SHOW SLAVE STATUS;
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: vpn.talevas.com
                Master_User: root
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: ns20587.000012
        Read_Master_Log_Pos: 8726915
             Relay_Log_File: mysqld-relay-bin.000008
              Relay_Log_Pos: 1508334
      Relay_Master_Log_File: ns20587.000012
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB:
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 0
        Exec_Master_Log_Pos: 8726915
            Relay_Log_Space: 1508334
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: 0


Tunnel SSH

Ouvre le port 133006 sur la machine local

ssh -f -N -L 13306:localhost:3306 root@rps.talevas.com
-f pour faire passer la connection en background
-N ne laisse pas passer de commandes
[-L [bind_address:]port:host:hostport]

Se connecter à distance à un serveur MySQL protégé par un firewall (par exemple), via un serveur SSH, qui sert alors de relais:

ssh -f -N -L local-port:mysql-server:mysql-port user@ssh-server

Ce qui donne, par exemple:

ssh -f -N -L 3306:192.168.1.10:3306 jrandom@host.domain
Le client SSH écoute au port 3306, relaie les paquets au serveur SSH, qui les relaie au serveur MySQL (ici 192.168.1.10).

Si le serveur SSH est aussi le serveur MySQL:

ssh -f -N -L 3306:127.0.0.1:3306 jrandom@host.domain

Ensuite reste à dire au slave comment se connecter.

mysql> SLAVE STOP;

On change le CHANGE MASTER à laquelle il faut ajouter la directive MASTER_PORT=PORT

mysql> CHANGE MASTER TO MASTER_HOST='localhost', MASTER_USER='root', MASTER_PASSWORD='********', MASTER_PORT=13306


Utils

http://www.computerworld.com/s/article/9218765/10_essential_MySQL_tools_for_admins

MysqlDump

--extended-insert, -e
Utilise la nouvelle syntaxe multi-ligne INSERT. (Cela donne des insertions plus courtes et plus efficaces).

mysqldump only some tables

mysql -u root -p DatabaseName -e "show tables;" |grep TablePrefix > /tmp/liste-tables
mysqldump -u root -p DatabaseName --tables `cat /tmp/liste-tables`

SKIP

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = X