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 del documento corrente non è garantito con queste ultime due.
Questo passo richiede di (ri)muovere alcuni file dall'ambiente di produzione, quindi la prima cosa da fare è archiviare una copia del server corrente, (si tralasciano i dati per ora). Fatto questo, è possibile rimuovere i file che creerebbero un conflitto con la versione "slotted" di MySQL, quindi verrà 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
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 dalla versione slotted di MySQL. Notare il suffisso -500 al nome del programma mysqldump, è 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
Esiste 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 # 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
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 di esse cercheranno di leggere la sezione
Quando si è soddisfatti dei risultati, si possono rimuovere le impostazioni di test, fermare il vecchio server e fare ripartire il nuovo. Fare 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-installare la vecchia versione e rendere di default quella nuova. Il
comando "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, 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
# 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