mysqldump cu rename

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:

  1. aplicații de dump ce știu deja să facă aceasta
  2. 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.