Mysql
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