Questo documento spiega come aggiornare MySQL alla più recente versione disponibile. Attualmente ci sono tre versioni di MySQL supportate in Portage:
Ci sono due versioni addizionali attualmente ma non sono supportate. Con questo si intende che i bug riportati verranno corretti con una priorità molto bassa e possono mancare funzionalita'. Il funzionamento di questo documento non è garantito con le seguenti versioni:
Questo passo richiede di (ri)muovere alcuni file dall'ambiente di produzione,
quindi la prima cosa da fare è archiviare una copia del
# 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
Assicurarsi di aggiornare lo script di avvio
Si inizia con l'esportare i dati, questi verranno importati nella nuova
versione di MySQL. Si utilizza
# mysqldump-500 \ --defaults-file=/etc/mysql/my.cnf \ --user=root \(Sostituire 'your_password' con la propria password di root MySQL) --password='your_password' \ --host=localhost \ --all-databases \ --opt \ --allow-keywords \ --flush-logs \ --hex-blob \ --master-data \ --max_allowed_packet=16M \ --quote-names \ --result-file=BACKUP_MYSQL_4.0.SQL
E' stato creato un file chiamato
Avviare il server senza connettività 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 # cat <<- EOF > /etc/conf.d/mysql NOCHECK=1 DEBUG=3 mysql_slot_500=( "skip-networking" "skip-grant-tables" "socket=/tmp/mysqld.sock" ) EOF # /etc/init.d/mysql start # mysql-500 --defaults-file=/etc/mysql-500/my.cnf --socket=/tmp/mysqld.sock < BACKUP_MYSQL_4.0.SQL # /etc/init.d/mysql stop # mv /etc/conf.d/mysql.orig /etc/conf.d/mysql
Se esistono applicazioni che continuano a
Per essere sicuri che le applicazioni interagiscano correttamente con il
server appena installato, fare delle prove. Praticamente qualsiasi
applicazione legge delle impostazioni di configurazione nelle quali è
possibile specificare quale "porta" di rete oppure quale "socket" utilizzare
per connettersi al database server. Semplicemente, eseguire il server su una
porta alternativa (ad esempio 3307) e impostare la propria applicazione (o
una copia di essa) per connettersi con i paramentri voluti. Prestare
attenzione al fatto che molte applicazioni cercheranno di leggere la sezione
Prima di passare al nuovo server MySQL, si deve impostare la seguente
variabile in
# nano -w /etc/conf.d/mysql(Add the following line:) mysql_slot_500=( )
Quando si è soddisfatti dei risultati, si possono rimuovere le impostazioni di test, fermare il vecchio server e fare ripartire il nuovo:
# killall mysqld # /etc/init.d/mysql stop zap start
Dis-installare la vecchia versione e rendere di default quella nuova. Il
comando "unmerge" non sara' in grado di rimuovere alcuni file, come 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 # for i in /usr/lib/*mysql* do [[ -z "$( readlink -f $i )" ]] && [[ -L $i ]] && rm $i done(emergere app-admin/eselect-mysql se non lo si ha già fatto) # eselect mysql list # eselect mysql set 1 # eselect mysql show
Una volta rimosso il vecchio MySQL, si possono re-installare i pacchetti che
lo utilizzano. Notare che per trovare e reinstallare i pacchetti è necessario
il programma
# revdep-rebuild --soname libmysqlclient.so.12 -- -p -v # revdep-rebuild --soname libmysqlclient.so.12
(Sostituire 'your_password' con la propria password di root MySQL) # 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 si sono incontrati problemi nella fase di aggiornamento, si è pregati di
riportarli sul nostro