O chestie ce lipsește de multicel în mysqldump este opțiunea de a putea da un “rename” la o bază de date în fișierul de dump. Din moment ce nu pot aștepta la infinit pentru ca acest lucru să apară în versiunea standard, rămân două alternative:
- aplicații de dump ce știu deja să facă aceasta
- un pic de lucru cu sed prin fișierul de dump
Din moment ce nu am găsit decât o chestie în Python ce nu știu exact ce face, am ales a doua variantă, ceva mai rumegabilă. Să zicem că am scriptul dbdump în directorul curent, cu privilegiu de execuție:
#!/bin/sh mysqldump -u $1 -B $2 --skip-comments -xvnp > $3.sql sed -i "s/USE \`$2\`;/USE \`$3\`;/g" $3.sql pbzip2 -fv $3.sql |
Invocarea este simplă: ./dbdump mysql_username database_to_dump new_name
Mai departe face totul de unul singur. Dă dump, modifică numele bazei de date și face o compresie cu pbzip2 (Parallel bzip2). Se poate modifica să funcționeze cu bzip2 standard, dar pe servere multi-core și / sau multi-procesor merită efortul de a instala pbzip2.
Opțional, pentru puturoși precum subsemnatul, se mai poate trânti o linie în script ce să mute arhiva pe noul server:
scp -i transfer.pem $3.sql.bz2 transfer@example.com:$3.sql.bz2 |
Am pus sintaxa pentru oameni plictisiți de parole de SSH, recte subsemnatul, folosind o cheie privată. Nu e musai, dar e mai comod, în special dacă sunt mai multe baze de date de transferat.