Mysql
(→Tunnel SSH) |
(→Utils) |
||
| (2 révisions intermédiaires par un utilisateur sont masquées) | |||
| Ligne 160 : | Ligne 160 : | ||
== Utils == | == Utils == | ||
| − | + | http://www.computerworld.com/s/article/9218765/10_essential_MySQL_tools_for_admins | |
| − | MysqlDump | + | === MysqlDump === |
--extended-insert, -e | --extended-insert, -e | ||
Utilise la nouvelle syntaxe multi-ligne INSERT. (Cela donne des insertions plus courtes et plus efficaces). | 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 | + | === SKIP === |
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = X | 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