Tietokannan päivitys epäonnistui

Started by bdonner, 28.03.15 - klo:21:09

Previous topic - Next topic

bdonner

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

Ere Maijala

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

bdonner

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

Ere Maijala

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

bdonner

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.

Ere Maijala

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