Questo documento spiega come aggiornare MySQL alla piu' recente versione disponibile. Attualmente ci sono tre versioni di MySQL supportate in portage:
Questo passo richiede di (ri)muovere alcuni file dall' ambiente di produzione,
quindi la prima cosa da fare 'e archiviare una copia del server corrente,
(tralasciamo i dati per ora).
Fatto questo, 'e possibile rimuovere i file che creerebbero un conflitto con la versione
"slotted" di MySQL, quindi verra' installata una versione che si affianchi a quella corrente.
# quickpkg dev-db/mysql # rm -rf /usr/include/mysql /usr/bin/mysql_config # for tmpfile in /usr/lib/*mysql* ; do mv "${tmpfile}" "${tmpfile}.TMP" ln -s "${tmpfile}.TMP" "${tmpfile}" done # emerge -av =dev-db/mysql-5.0.18-r30
Assicurati di aggiornare lo script di avvio /etc/init.d/mysql utilizzando etc-update o dispatch-conf.
Iniziamo con l'esportare i dati, questi verranno importati nella nuova
versione di mysql.
Stiamo per utilizzare mysqldump dalla versione slotted di MySQL.
Notare il suffisso "-500" al nome del programma mysqldump, 'e ricavato
dalla versione 5.0.x .
# mysqldump-500 \ --defaults-file=/etc/mysql/my.cnf -uroot \ --password='your_password' \ -hlocalhost \ --all-databases \ --opt \ --allow-keywords \ --flush-logs \ --hex-blob \ --master-data \ --max_allowed_packet=16M \ --quote-names \ --result-file=BACKUP_MYSQL_4.0.SQL
Ora esiste un file chiamato
Avviare il server senza connettivita' di rete e senza utilizzare il controllo degli utenti, e quindi eseguire lo script SQL:
# mv /etc/conf.d/mysql /etc/conf.d/mysql.orig # echo ' NOCHECK=1 DEBUG=3 mysql_slot_500=( "skip-networking" "skip-grant-tables" ) ' > /etc/conf.d/mysql # /etc/init.d/mysql-500 start # mysql-500 --defaults-file=/etc/mysql-500/my.cnf < BACKUP_MYSQL_4.0.SQL # mv /etc/conf.d/mysql.orig /etc/conf.d/mysql # /etc/init.d/mysql-500 stop
Se 'e essere sicuri che le applicazioni interagiscano correttamente
con il server appena installato, fate delle prove, praticamente qualsiasi
applicazione legge delle impostazioni di configurazione nelle quali 'e
possibile specificare quale "porta" di rete oppure quale "socket" utilizzare
per connettersi al database server.
Semplicemente, eseguite il server su una porta alternativa (ad esempio 3307)
e impostate la vostra applicazione o una copia di essa per connettersi con
i paramentri voluti.
Prestate attenzione al fatto che molte di esse cercheranno di leggere la sezione
"[client]" del file /etc/mysql/my.cnf.
Quando siete soddisfatti dei risultati, rimuovete le impostazioni di test,
fermate il vecchio server e fate ripartire il nuovo.
Fate anche in modo che sia quest'ultimo a partire all' avvio della macchina.
# rc-update del mysql default # rc-update add mysql-500 default # /etc/init.d/mysql stop # /etc/init.d/mysql-500 start
Dis-installa la vecchia versione e rendi quella nuova la predefinita.
Il comando di "unmerge" non sara' in grado di rimuovere alcuni file,
quelli spostati precedentemente in
# emerge --unmerge --pretend mysql # emerge --unmerge "=dev-db/mysql-4.0.26" # cd /etc # mv mysql mysql.$(date +%F_%H-%M) # rm -rf /usr/lib/*.TMP # rm -rf /usr/lib/*.TMP # for i in /usr/lib/*mysql* ; do readlink -f $i || [[ -L $i ]] && rm $i done # eselect mysql list # eselect mysql set 1 # eselect mysql show
Una volta rimosso il vecchio MySQL, puoi re-installare i pacchetti che lo
utilizzano. Nota che per trovare e reinstallare i pacchetti 'e necessario
il programma
# revdep-rebuild --soname libmysqlclient.so.12 -- -p -v # revdep-rebuild --soname libmysqlclient.so.12
# mysql_fix_privilege_tables-500 \ --defaults-file=/etc/mysql-500/my.cnf \ --user=root \ --password='your_password' # mysql -uroot -p'your_password' mysql -e "FLUSH PRIVILEGES;" # for tbl in $( mysql --silent -uroot -p'your_password' -e 'USE mysql ; SHOW TABLES LIKE "help%";' ) do mysql -uroot -p'your_password' -e "use mysql ; TRUNCATE TABLE ${tbl};" done # mysql -uroot -p'your_password' mysql < /usr/share/mysql/fill_help_tables.sql
Se avete incontrato problemi nella fase di aggiornamento, siete pregati di
riportarli sul nostro