Newsgroup: it.comp.os.linux.sys
Titolo: Migrazione db

Ho due server MySQL (a dire il vero, uno dei due è Percona).
Devo migrare alcuni database dal server 1 al server 2
 
server1=mysql
server2=percona
 
ogni volta che migro tramite mysqldump, eventuali accenti
prenseti nei dati delle tabelle, vengono spaccati nonostante
il charset corretto sia in fase di dump, sia in fase di create table
 
Penso si spacchi l'accento quando l'output di mysqldump viene girato
su disco
 
mysqldump .... > file.sql
 
Avete idea di come fare a trasferire tutto senza perdere gli accenti?
Se faccio "mysqldump server1 | mysqldump server2"  pensate possa
aiutare?
 
Non posso testare tutti i database, sono troppi, e prima di procedere
vorrei avere conferma.
 
-- 
Non tocca a noi dominare tutte le maree del mondo,
il nostro compito è di fare il possibile per la
salvezza degli anni nei quali viviamo,
sradicando il male dai campi che conosciamo.

 faccio "mysqldump server1 | mysqldump server2"  pensate possa aiutare?
 
problema di locale?
 
LANG,LC_COLLATE,LC_ALL etc
 

 LANG,LC_COLLATE,LC_ALL etc
 
Di quale dei 2 o 3 server?
 
Il database sorgente, il database di destinazione o
l'eventuale macchina sulla quale appoggio gli sql provenienti dal dump?
 
Io non so a priori quali siano i locale usati dai clienti, non posso
configurarli tutti su tutti e 3 i server.
 
Se faccio "mysqldump | mysql" tra i due server, dovrei bypassare i
locale delle macchine ?


 configurarli tutti su tutti e 3 i server.
 
Forzali creando uno script sh che legga se stesso finche` non raggiunge una 
stringa di controllo (e.g. EOF). Di esempi del genere ne trovi a bizeffe in 
giro su internet
 
Enrico
 

 giro su internet
 
Non ho proprio capito.

 Non ho proprio capito.
#!/bin/sh
LANG=it_IT
DUMP=`awk '/^__DUMP_BELOW__/ {print NR + 1; exit 0; }' $0`
tail -n+$DUMP $0 | mysql
__DUMP_BELOW__
Enrico


Continuo a non seguirti.
Come può servirmi tutto ciò?
Poi non credo sia il locale il problema, bensì il charset.
Sul database di origine è impostato giusto ed i caratteri si vedono
correttamente ma so già che se li esporto e poi reimporto, nonostante
sia riportato lo stesso charset nel create table, i caratteri vengono
spaccati, probabilmente mysql fa qualche conversione

 charset del server 1.
Il charset indicato nella configurazione serve solo come default,
nel caso non sia specificato nel file sql.
Nel mio caso, invece, il charset è specificato dentro la create table
presente nel file sql di dump.
Non può essere diversamente, ho svariati database tutti con charset
differenti, se usasse solo quello della configurazione, non sarebbe
possibile usare più di un charset per volta cosa invece
possibilissima.

 server2=percona
Che versioni sono ?
4? 5.0? 5.0.x? 5.1?

 4? 5.0? 5.0.x? 5.1?
5.1


 5.1
Prima della 5.1.38 i character sets in mysqldump erano una opzione che 
veniva bellamente ignorata.
Mysql adesso (e postgres anni fa, quando anche lui ebbe problemi) è un 
dito al culo nella gestione dei set di caratteri.
1) Fai un mysqldump con --default-character-set=utf8
2) verifichi che quello che ti è uscito sia effettivamente UTF-8
3) nel dubbio ci fai un giro con iconv per convertire quello che non è 
UTF-8 a UTF-8
4) reimporti assicurandoti che il client sia in UTF-8. Questo lo fai con 
'SET character_set_results="utf8\"' prima di rielaborare tutta la 
pappardella del dump (che magari ti prendi un "source $file" dalla CLI di 
mysql.
Insomma, in bocca al lupo.
Queste cose sono sempre dei discreti PITA.

 mysql.
Spero esista una opzione di mysql da usare a linea di comando, perchè
se per ogni
DB devo settare tale variabile bestemmio.
Io di charset non ci capisco una fava, UTF-8 dovrebbe essere in grado
di contenere
tutte le lettere accentate, caratteri strani, geroglifici e
quant'altro ?

 Uhm, non so la release, dopo ci guardo.
Origine:
$ mysql -V
mysql  Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (x86_64) using
readline 5.2
Destinazione:
$ mysql	-V
mysql  Ver 14.14 Distrib 5.1.57, for debian-linux-gnu (x86_64) using
readline 5.1
La destinazione è Percona.
Potrei mettere anche la 5.5, ma ho paura di spaccare qualche
applicativo web.

 dito al culo nella gestione dei set di caratteri.
Ho io la soluzione.
Faccio un lock di tutti i database che devo spostare.
Blocco a livello di iptables l'accesso al server.
Faccio un bel flush tables in modo da scrivere su disco le eventuali cache.
Poi rsync, di tuttii database (altrimenti non potrei copiare
selettivamente le tabelle innodb, non avendo un file specifico) brutale,
ma efficace e senza problemi di charset.
Perdo solo la possibilità di convertire gli innodb attuali
in singoli file per tabella.


 Come può servirmi tutto ciò?
 
A nulla direi, e` stata una settimana rognosa ed ero convinto di tutt'altro 
quando ho scritto i due post ^_^;
 
Enrico

 quando ho scritto i due post ^_^;
 
Però, adesso mi dici cosa intendi "tutt'altro" perchè quello script
li non vedo proprio in che modo possa servire anche ad altre persone.


 li non vedo proprio in che modo possa servire anche ad altre persone.
 
Ad esempio, ad uno script del genere concateno un tgz di oracle in modo che 
mi installi l'applicativo, lo configuri e crei il database. In sostanza, 
quello e` il concetto di script per creare un file autoestraente
 
Enrico