Mysql

De Admin -- TALEVAS.
(Différences entre les versions)
(Tunnel SSH)
Ligne 118 : Ligne 118 :
 
  -f pour faire passer la connection en background
 
  -f pour faire passer la connection en background
 
  -N ne laisse pas passer de commandes
 
  -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

Version du 23 février 2008 à 17:35

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

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



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