Ohje MySQL 4:n tai 5.0:n päivitykseen
1.
Suora päivitys, suositus välillä 4.1 ⇒ 5.0
Myisam-engine MySQL 4.1:ssä on riittävän valmis suoraan päivitykseen
major-versioiden välillä:
Huomaa:
Tämä ei päde jos käytetään MERGE-tauluja. Silloin suora päivitys tuottanee
ongelmia. Nämä taulut pitää dumpata ja luoda uudestaan ja palauttaa sisällöt
käsin päivitettäessä. Jollet tiedä miten tämä tapahtuu, suorita
päivitys vanhemmista MySQL:n versioista.
|
Tähän tarvitaan kahta shelliä, koska lukot ovat sessiokohtaisia.
Koodilistaus 1.1: Suora päivitys 4.1 5.0 |
# quickpkg dev-db/mysql
# alias MYSQL="mysql --user=root --password="
# DATADIR=$(MYSQL --batch --raw --silent --skip-column-names \
--execute='SHOW variables LIKE "datadir";' \
| sed -e 's|datadir[ \t]||')
# mysql --user=root --password=
mysql> FLUSH TABLES WITH READ LOCK;
# MYSQL --execute="FLUSH TABLES WITH READ LOCK;"
# tar -cjpvf ~/mysql.$(date +%F"T"%H-%M).tar.bz2 \
/etc/conf.d/mysql /etc/mysql/my.cnf "${DATADIR}"
mysql> UNLOCK TABLES;
mysql> quit
# tar -tjvf ~/mysql.*.tar.bz2
# emerge -av ">dev-db/mysql-5.0"
# dispatch-conf
# revdep-rebuild
# /etc/init.d/mysql restart
# mysql_upgrade_shell --user=root --password= \
--protocol=tcp --datadir="${DATADIR}"
# /etc/init.d/mysql restart
# unset DATADIR
# unalias MYSQL
|
2.
MySQL-päivitys vanhasta versioista
Käyttäjien, jotka päivittävät vanhemmasta (<4.0.24) MySQL-versiosta,
täytyy ensin asentaa MySQL 4.0.25. Jos sinulla on jo käytössäsi tämä
versio, voit jättää väliin tämän osan ja
siirtyä seuraavaan.
Koodilistaus 2.1: Suora päivitys |
# emerge -av --buildpkg "<mysql-4.1"
|
3.
Nykyisten tietojen varmuuskopiointi
Tärkeää:
Ensiöavaimet toimivat eri tavoin eri MySQL:issä, Gentoon bugi 108502 sisältää
lisätietoja liittyvistä ongelmista. Suositeltavaa on etsiä arvoja 0 tai
vähemmän ja korvata ne arvoiksi 1 tai enemmän.
|
Yksi tärkeimmistä tehtävistä, mikä jokaisen tietokannoista vastaavan
järjestelmänvalvojan tulee suorittaa, on varmuuskopionti. Ja se menee näin:
Koodilistaus 3.1: Varmuuskopioidaan kaikki tietokannat |
# mysqldump \
-uroot \
--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
|
Nyt sinulta pitäisi löytyä tiedosto nimeltä, BACKUP_MYSQL_4.0.SQL,
mitä voidaan myöhemmin käyttää tietojen palauttamiseen. Tiedot ovat kuvattu
MySQL:n SQL-kielellä (Structured Query Language).
Nyt on hyvä aika todeta tehdyn varmuuskopionnin toimivuus.
4.
Päivittäminen tuoreemmasta MySQL-versiosta
Jos hyppäsit kohdan 1 yli, sinun täytyy nyt luoda varmuuskopio nykyisestä
tietokanta-palvelimen (ei tietojen) versiosta:
Koodilistaus 4.1: Binääri-pakettien varmuuskopionti |
# quickpkg dev-db/mysql
|
Nyt poistetaan nykyinen versio ja kaikki siihen liittyvät tieto:
Koodilistaus 4.2: Poistetaan MySQL |
# /etc/init.d/mysql stop
# emerge -C mysql
# tar cjpvf ~/mysql.$(date +%F"T"%H-%M).tar.bz2 /etc/mysql/my.cnf /var/lib/mysql/
# ls -l ~/mysql.*
# rm -rf /var/lib/mysql/ /var/log/mysql
|
Huomaa:
Nyt sinulla pitäisi olla kaksi erillaista varmuuskopiota: SQL, mikä on
siirrettävissä eri MySQL versioiden välillä, ja toinen, joka mahdollistaa
tietokantojen nopean palautuksen. Tästä kerrotaan tarkemmin myöhemmässä
vaiheessa tätä ohjetta.
|
Sen jälkeen, kun olet poistanut vanhan MySQL-asennuksen, voit asentaa tilalle
uuden. Huomaa, että revdep-rebuild on välttämätön rakennettaessa
uudelleen MySQL linkityksiä.
Koodilistaus 4.3: Päivitetään binäärit |
# emerge -av ">mysql-4.1"
# etc-update
# revdep-rebuild
|
Määrittele nyt asetukset juuri asennettuun MySQL-versioon ja käynnistä palvelu
uudelleen.
Koodilistaus 4.4: Määrittele MySQL:n perusasetukset |
# emerge --config =mysql-4.1.
# /etc/init.d/mysql start
|
Lopuksi voit tuoda varmuuskopiot, jotka loit kohdassa 2:
Tärkeää:
Oletuksena asetustiedostossa /etc/mysql/my.cnf on päällä
binäärimuotoinen lokikirjoitus (log-bin). Tähän lokiin kirjoitetaan
kaikki transaktiot, jotka voivat muuttaa dataa. Isoissa tietokannoissa
(yli 1 gigan) tämä luo nopeasti kookkaita lokeja. Jos levytilaa on vähän,
lokien poistaminen käytöstä saattaa auttaa.
|
Tärkeää:
Oletusmerkistö Gentoon MySQL:ssä 4.1:stä lähtien on UTF-8. Jos
lähdedatassa oli ASCII-alueen ulkopuolisia merkkejä, tietokannan
merkistö saattaa tarvita säilyttää vanhana korvaamalla utf8:t
latin1:llä tiedostossa /etc/mysql/my.cnf. Lisää
aiheesta kerrotaan
merkistömuunnos-kappaleessa.
|
Tärkeää:
Ylläpidollisen mysql-kannan, joka sisältää käyttäjänimet ja
salasanat, pitää olla UTF-8:na.
|
Vanhemmat mysqldumpit saattavat viedä tauluja väärässä järjestyksessä
foreign key -constraintienn kanssa. Tämän voi kiertää SQL:llä seuraavasti:
Koodilistaus 4.5: Korjataan foreign keyt |
SET FOREIGN_KEY_CHECKS=0
SET FOREIGN_KEY_CHECKS=1
|
Koodilistaus 4.6: Palautetaan SQL-varmuuskopio |
# cat BACKUP_MYSQL_4.0.SQL \
| mysql \
-uroot \
--password='' \
-hlocalhost \
--max_allowed_packet=16M
# mysql_fix_privilege_tables \
--defaults-file=/etc/mysql/my.cnf \
--user=root \
--password=''
|
Jos nyt käynnistät uudelleen MySQL-palvelun ja kaikki on mennyt niinkuin
pitikin, sinulla on nyt toimiva versio 4.1.x!
Koodilistaus 4.7: Käynnistä MySQL uudelleen |
# /etc/init.d/mysql restart
|
Jos kohtaat ongelmia päivittäessäsi, ilmoitathan niistä
Gentoon bugzillaan.
5.
Palautetaan vanha MySQL 4.0-asennus
Jos et ole tyytyväinen MySQL 4.1:een, on mahdollista palata takaisin MySQL
4.0:aan.
Koodilistaus 5.1: Paluu vanhaan |
# /etc/init.d/mysql stop
# emerge -C mysql
# rm -rf /var/lib/mysql/ /var/log/mysql
# emerge --usepkgonly "<mysql-4.1"
# tar -xjpvf mysql.<aika>.tar.bz2 -C /
# /etc/init.d/mysql start
|
Tärkeää:
Jos muita mysql-sovelluksia on asennettu päivityksen jälkeen, pitää
suorittaa revdep-rebuild, joka varmistaa että ohjelmat linkittävät
oikeaan mysqlclient.sohon.
|
6.
Merkistömuunnos
Johdanto
Tämä ei ole täydellinen opas muunnoksiin vaan lyhyt ohje, josta saa
vähän tietoa mitä saattaa joutua tekemään.
Tietokannan muunnos on monimutkainen tehtävä ja vaikenee datan
monipuolistuessa. Sarjallistetut oliot ja binääridata ovat esimerkiksi
vaikeasti hallittavia muunnoskohteita.
Indeksit
Jokainen UTF-8-merkki on indeksin kannalta 3 tavua. MySQL-indeksien ko’on
yläraja on 1000 tavua (767 InnoDB-tauluissa). Huomaa, että rajat on annettu
tavuissa, vaikka sarakkeiden koko lasketaan merkeissä.
MySQL:ssä voi myös tehdä indeksejä sarakkeiden osista, josta voi olla apua.
Alla muutama esimerkki:
Koodilistaus 6.1: Indeksointi prefikseillä |
$ mysql -uroot -p'' test
mysql> SHOW variables LIKE "version" \G
*************************** 1. row ***************************
Variable_name: version
Value:
1 row in set (0.00 sec)
mysql> CREATE TABLE t1 (
-> c1 varchar(255) NOT NULL default '',
-> c2 varchar(255) NOT NULL default ''
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> ALTER TABLE t1
-> ADD INDEX idx1 ( c1 , c2 );
mysql> ALTER TABLE t1
-> ADD INDEX idx1 ( c1(165) , c2(165) );
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> CREATE TABLE t2 (
-> c1 varchar(255) NOT NULL default '',
-> c2 varchar(255) NOT NULL default ''
-> ) ENGINE=MyISAM DEFAULT CHARSET=sjis;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER TABLE t2
-> ADD INDEX idx1 ( c1(250) , c2(250) );
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> CREATE TABLE t3 (
-> c1 varchar(255) NOT NULL default '',
-> c2 varchar(255) NOT NULL default ''
-> ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER TABLE t3
-> ADD INDEX idx1 ( c1 , c2 );
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
|
Ympäristö
Järjestelmän pitää tukea käytettyä UTF-8-lokaalia. Lisätietoja tästä löytää
UTF-8-oppaasta ja
Paikallisasetusoppaasta.
Tässä esimerkissä asetamme ympäristön suomenkieliseksi UTF-8-järjestelmäksi
käyttäen järjestelmänlaajuista asetustiedostoa
/etc/env.d/02locale:
Koodilistaus 6.2: /etc/env.d/02locale-asetukset |
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
|
Muista ajaa env-update && source /etc/profile muokkaamisen
jälkeen.
Iconv
Iconv, kuuluu pakettiin sys-libs/glibc. Sitä käytetään
tekstitiedostojen muunnoksessa merkistöjen välillä. Myös pakettia
app-text/recode voi käyttää.
Koodilistaus 6.3: Using iconv |
$ iconv -f ISO-8859-15 -t UTF-8 file1.sql > file2.sql
$ iconv -f ISO2022JP -t UTF-8 file1.sql > file2.sql
|
Iconv muuntaa sql-kannan vaikka käyttöympäristö ei ole
UTF-8-asetuksilla.
SQL-muunnokset
SQL-skripteissä voi käyttää CONVERT()- ja CAST()-funktioita
muunnosten toteuttamiseen.
Apache
UTF-8:n käyttö apachessa vaatii asetuksia tiedostossa httpd.conf:
AddDefaultCharset, CharsetDefault, CharsetSourceEnc.
Jos lähdetiedostot eivät ole UTF-8:aa, nekin pitää muuntaa iconvilla
tai recodella.
Tämän dokumentin sisältö ja suomennos kuuluu
Creative Commons - Nimi mainittava-Sama lisenssi 2.5 -lisenssin
piiriin.
|