MayaLabs Discussion Area

Suomeksi (Finnish only) => MLInvoiceen liittyvä keskustelu => Topic started by: bdonner on 28.03.15 - klo:21:09

Title: Tietokannan päivitys epäonnistui
Post by: bdonner on 28.03.15 - klo:21:09
Hei, avasin uusinta mlinvoice-tiedostopakettiversiota 1.11.1 vanhan version 1.9.7 päälle, kun menin sitten mlinvoice-webbisivulleni niin asennusscripti yritti päivittää tietokantaa muttei onnistunut. Minulla on mysqli päällä php:ssä ja ajan pari muuta komponenttia, jotka käyttävät mysqli:ta.  Mitä pitäisi tällaisessa tapauksessa tehdä?

Kiitos!

T. Benjamin
Title: Re: Tietokannan päivitys epäonnistui
Post by: Ere Maijala on 29.03.15 - klo:09:10
PHP:n virhelokista pitäisi löytyä selitys sille, miksei päivitys onnistunut (etsi kohtaa "Database upgrade query failed"). Sieltä näkyy myös lista sql-komennoista, jotka voi suorittaa käsin esim. phpMyAdminissa päivityksen tekemiseksi.

--Ere
Title: Re: Tietokannan päivitys epäonnistui
Post by: bdonner on 29.03.15 - klo:10:57
Kiitos Ere, lähden kokeilemaan manuaalisia sql-päivityksiä. Virheviesti lokissa on:

ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_swedish_ci' failed

sekä sen jälkeen

Query 'ALTER TABLE mlinvoice_product ADD COLUMN purchase_price decimal(15,5) NULL' failed: (1060) Duplicate column name 'purchase_price'


Voiko phpMyAdminissa turvallisesti suorittaa koko jonon komentoja samalla, vai pitääkö ottaa komento kerrallaan?

T. Benjamin
Title: Re: Tietokannan päivitys epäonnistui
Post by: Ere Maijala on 29.03.15 - klo:14:56
phpMyAdminissa pitäisi pystyä suorittamaan monta komentoa kerrallaan, mutta pitää varmistaa, että jokaisen komennon lopussa on puolipiste. Pääset tässä tapauksessa kuitenkin helpommalla: aja vain komennot tällaiseen riviin asti (sisältäen tämän):

REPLACE INTO mlinvoice_state (id, data) VALUES ('version', '32')

mutta jätä väliin tämä:

ALTER TABLE mlinvoice_product ADD COLUMN purchase_price decimal(15,5) NULL

Sen jälkeen automaattisen päivityksen pitäisi pystyä hoitamaan loput. Vähän mysteeriksi nyt jää, miten tuo sarake on jo olemassa.

--Ere
Title: Re: Tietokannan päivitys epäonnistui
Post by: bdonner on 29.03.15 - klo:17:03
Kiitos, pääsen kohtaan 31 asti, mutta sen jälkeen oleva taulukon luonnti ei onnistu, saan virhettä #1005 - Can't create table 'outooric_mlinvoice.mlinvoice_stock_balance_log' (errno: 150)  kun yritän suorittaa alla olevaa:

CREATE TABLE mlinvoice_stock_balance_log (
  id int(11) NOT NULL auto_increment,
  time timestamp NOT NULL default CURRENT_TIMESTAMP,
  user_id int(11) NOT NULL,
  product_id int(11) NOT NULL,
  stock_change int(11) NOT NULL,
  description varchar(255) NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (user_id) REFERENCES mlinvoice_users(id),
  FOREIGN KEY (product_id) REFERENCES mlinvoice_product(id)
) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_swedish_ci



Jos ymmärrän virhekoodin selityksiä http://stackoverflow.com/questions/9018584/error-code-1005-cant-create-table-errno-150 oikein, niin joku aikaisemmista avainkenttien määrityksistä ei olisi onnistunut oikein, mutta virheitä näistä en ole saanut.
Title: Re: Tietokannan päivitys epäonnistui
Post by: Ere Maijala on 30.03.15 - klo:18:12
Syy tähän selvisi. Kyseessä vanhaa perua oleva tietokanta, jossa osa tauluista on vielä MyISAM-tyyppisiä. Uusi InnoDB-taulu ei pysty käsittelemään viittauksia näihin, vaan palauttaa virheilmoituksen. Täytyy siis tehdä tuohon tietokannan päivitykseen lisäys, että muutetaan vanhat taulut InnoDB-tauluiksi. Myös tähän kuitenkin liittyy komplikaatioiden mahdollisuus, koska MyISAM-tauluissa ei ole valvottu viite-eheyksiä.

--Ere