• User Attivo

    Mysqlhotcopy

    Ciao ragazzi!
    Scrivo qui perchè spero di avere al soluzione ad un problema che mi affligge da un bel pò di giorni.

    In pratica stò cercando di effettuare la copia di un database sul server utilizzando i comandi che ho a disposizione e di utilizzare la copia per prelevare dati.

    Ho due database: DATABASE_1 E DATABASE_2

    Ho provato vari strumenti fra cui cp -r , rsync , mysqldump e ripristino con mysql ed ora sto provando con il MYSQLHOTCOPY

    Al momento applico questa procedura:

    1. creo DATABASE_2 e imposto nome utente e password (DATABASE_1 è gia attivo)
    2. applico la seguente procedura:

    mysqlhotcopy DATABASE_1 /var/lib/mysql/DATABASE_2 -u nomeutenteD1 -p passwordD1

    per D1 intendo nome utente e password del DATABASE_1

    Avvio la procedura e in risposta mi viene restituito:

    Can't hotcopy to '/var/lib/mysql/DATABASE_2/DATABASE_1' because directory
    already exist and the --allowold or --addtodest options were not given.

    Cosa devo fare? Io ormai sono nel pallone.... :dull:


  • Super User

    Hai provato ad aggiungere --allowold alla fine della riga?
    Io lo uso in questo modo

    mysqlhotcopy database /home/mysql/backup/ --password=XXXXXX --allowold

    e funziona


  • User Attivo

    Grazie per la risposta.

    In questo modo però fai un semplice backup.
    Quello che servirebbe a me e copiare i contenuti del DATABASE_1 all'interno del DATABASE_2 e possibilmente nella directory /var/lib/mysql/DATABASE_2 dove posso richiamarlo.

    Non hai mai fatto una prove del genere?


  • Super User

    Non l'ho mai fatto ma penso sia la stessa cosa, non dovrebbe cambiare molto.
    Ci sarà da fare attenzione ai permessi dei files


  • User Attivo

    Infatti mi viene restituita questa risposta....

    mysqlhotcopy DATABASE_1 /var/lib/mysql/DATABASE_2 -u nomeutenteD1 -p passwordD1 --allowold

    Deleting previous 'old' hotcopy directory ('/var/lib/mysql/DATABASE_2/DATABASE_1_old')

    Existing hotcopy directory renamed to '/var/lib/mysql/DATABASE_2/DATABASE_1_old'

    Locked 10 tables in 0 seconds.

    DBD::mysql::db do failed: Access denied; you need the RELOAD privilege for this operation at /usr/bin/mysqlhotcopy line 477.

    Sincermente non sò quali permessi e come impostarli...


  • Super User

    O esegui l'operazione come root oppure usando un tool tipo phpmyadmin vai in privilegi e concedi il permesso di RELOAD all'utente in questione


  • User Attivo

    Scusa ma non sono molto esperto...

    In pratica intendi che devo fare cosi:

    mysqlhotcopy DATABASE_1 /var/lib/mysql/DATABASE_2 -u root -p passwordD1 --allowold


  • User Attivo

    Credo di aver capito il funzionamento infatti ora mi esegue la copia ma ho ancora un piccolo problema... che in pratica risulta essere i l più grande.

    Fatta la copia non riesco a vedere il risultato se non riavvio Mysql.
    Mi spiego meglio.

    Se mi collego al DATABASE_2 con un qualsiasi file in php non vedo gli aggiornamenti effettuari fino a quando non viene riavviato mysql.

    Come posso risolvere quest'ultimo problema?


  • User Attivo

    Scusa se intervengo ancora ma in pratica non vede l'aggiornamento perche non vengono copiate solo le tabelle del DATABASE_1 all'interno del DATABASE_2 ma tutto il DATABASE_1

    ed ottengo questo: /var/lib/mysql/DATABASE2/DATABASE1/tabelle

    invece dovrei avere: /var/lib/mysql/DATABASE2/tabelle

    Esiste un modo per superare questo ostacolo?

    Grazie ancora...


  • Super User

    Mi sa che in questo modo non puoi fare in quanto il comando in automatico crea la cartella DATABASE_1
    A questo punto puoi provare con rsync, e fare qualcosa del genere
    rsync -a -v --delete /var/lib/mysql/DATABASE_1 /var/lib/mysql/DATABASE_2


  • User Attivo

    Ho gia provato con questo comando:

    rsync -auv --delete /var/lib/mysql/DATABASE_1/* /var/lib/mysql/DATABASE_2/

    La copia viene eseguita perfettamente ma in pratica non vedo gli aggiornamenti fino a quando non riavvio mysql.

    Si può superare questo problema?

    Fra -auv --delete e -a -v --delete

    che differenza c'è?