Gentoo Logo

Ohje MySQL 4:n tai 5.0:n päivitykseen

Sisällysluettelo:

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='your_password'"
# DATADIR=$(MYSQL --batch --raw --silent --skip-column-names \
     --execute='SHOW variables LIKE "datadir";' \
  | sed -e 's|datadir[ \t]||')
(Tämä tehdään toiselta shelliltä, korvaa salasana salasanallasi)

# mysql --user=root --password='salasana'
mysql> FLUSH TABLES WITH READ LOCK;
# MYSQL --execute="FLUSH TABLES WITH READ LOCK;"
(Palaa ensimmäiselle shellille:)
# tar -cjpvf ~/mysql.$(date +%F"T"%H-%M).tar.bz2 \
/etc/conf.d/mysql /etc/mysql/my.cnf "${DATADIR}"
(Toisella shellillä:)
mysql> UNLOCK TABLES;
mysql> quit
(Ensimmäisellä shellillä:)
# 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='your_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='salasana' \
  -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"
(Myös dispatch-confia voi käyttää)
# 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.<mikroversio>
# /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='salasana' \
     -hlocalhost \
     --max_allowed_packet=16M

# mysql_fix_privilege_tables \
     --defaults-file=/etc/mysql/my.cnf \
     --user=root \
     --password='salasana'

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"
(korvaa <aika> sillä, mitä käytit varmuuskopiodessasi.)
# 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'salasana' test

mysql> SHOW variables LIKE "version" \G
*************************** 1. row ***************************
Variable_name: version
    Value: 5.0.24-log
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 );
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes

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ää Gentoo-wikisivuilta UTF-8 ja Localization HOWTO.

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

(latin1:stä UTF-8:ksi)
$ iconv -f ISO-8859-15 -t UTF-8 file1.sql > file2.sql

(japanista UTF-8:ksi)
$ 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.



Tulostettava muoto

Tämä sivu on viimeksi päivitetty 4. kesäkuuta 2007

Tämän tekstin alkukielistä versiota ei enää ylläpidetä

Tiivistelmä: MySQL 5 löytyy pian Gentoon portagepuusta epävaakaana versiona. Tässä on päivitysohje kaikille halukkaille testaajille.

Michael Kohl
Tekijä

Francesco Riosa
Tekijä

rogk
Kääntäjä

Flammie Pirinen
Vastuullinen kääntäjä

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.