04. november 2002 - 10:28Der er
36 kommentarer og 1 løsning
Nybegynder: InnoDB
Hej eksperter For lige at få det på plads, så er jeg totalt nybegynder indenfor php, mysql og phpmyadmin ;o)
Jeg har installeret MySQL version 3.23.53-max. Jeg skal nu have oprettet en database med nogle tabeller. Der skal kunne bruges foreign keys og jeg har efterhånden fundet ud af, at jeg så skal bruge InnoDB tabeller. Jeg kan bare ikke lige finde ud af, hvordan jeg så skal få det til at fungere! Jeg har været inde og læse på www.mysql.com og www.innodb.com. Jeg har også fundet ud af, at jeg i min my.ini som minimum skal tilføje innodb_data_file_path
Er der nogen, der kan hjælpe mig med at få InnoDB op at køre? Jeg har siddet og rodet med det hele dagen i går og vil nu virkelig gerne have det til at fungere, da jeg er ved at skrive opgave. Jeg vil give 100 point, men så skal det altså også fungere.
A simple `my.cnf' example. Suppose you have a computer with 128 MB RAM and one hard disk. Below is an example of possible configuration parameters in `my.cnf' or `my.ini' for InnoDB. We assume you are running MySQL-Max-3.23.50 or later, or MySQL-4.0.2 or later. This example suits most users, both on Unix and Windows, who do not want to distribute InnoDB datafiles and log files on several disks. This creates an auto-extending data file `ibdata1' and two InnoDB log files `ib_logfile0' and `ib_logfile1' to the datadir of MySQL (typically `/mysql/data'). Also the small archived InnoDB log file `ib_arch_log_0000000000' ends up in the datadir.
[mysqld] # You can write your other MySQL server options here # ... # Data file(s) must be able to # hold your data and indexes. # Make sure you have enough # free disk space. innodb_data_file_path = ibdata1:10M:autoextend # Set buffer pool size to # 50 - 80 % of your computer's # memory set-variable = innodb_buffer_pool_size=70M set-variable = innodb_additional_mem_pool_size=10M # Set the log file size to about # 25 % of the buffer pool size set-variable = innodb_log_file_size=20M set-variable = innodb_log_buffer_size=8M # Set ..flush_log_at_trx_commit # to 0 if you can afford losing # some last transactions innodb_flush_log_at_trx_commit=1
Check that the MySQL server has the rights to create files in datadir.
Note that datafiles must be < 2G in some file systems! The combined size of the log files must be < 4G. The combined size of datafiles must be >= 10 MB.
When you for the first time create an InnoDB database, it is best that you start the MySQL server from the command prompt. Then InnoDB will print the information about the database creation to the screen, and you see what is happening. See below next section what the printout should look like. For example, in Windows you can start `mysqld-max.exe' with:
Det er en Windows maskine jeg kører på. Det link du har sendt er vedr. version 4.0.5-beta og jeg har version 3.23.53-max. Jeg HAR været inde og kigge på mysql.com, men kan altså ikke gennemskue, hvad det lige er jeg skal gøre. Du må altså meget gerne poste dit eget eksempel - jeg er bare lost og vil så gerne videre.
Eksemplet du har sendt til mig, er ikke ukendt for mig. Jeg har selvfølgelig set det på mysql.com (eller var det innodb.com?). Sikkert et ret dumt spørgsmål, men kan jeg bare copy/paste det ind i min my.ini?
Jeg forsøger så at copy/paste det ind i my.ini, men... flere spørgsmål. 1. Hvad skal jeg så gøre bagefter? 2. Kan du så også give en forklaring på, hvad det betyder? Fx innodb_data_file_path = ibdata1:10M:autoextend Hvad er det så lige det betyder? Og de andre også, hvis du kan give mig en forklaring.
Nu har jeg copy/pastet det første eksempel ind i my.ini, oprettet bibliotekerne c:\mysql/iblogs og c:\mysql\ibdata og genstartet computeren. Da jeg så gik ind i phpmyadmin og ville oprette tabeller havde jeg nu også muligheden for at vælge innodb - FEDT! Men... 1. Hvordan markerer jeg en attribut som foreign key? 2. Når jeg har oprettet en tabel og skal til at oprette en tabel mere, så kommer den med følgende fejlmeddelelse:
Fejl The additional Features for working with linked Tables have been deactivated. To find out why click here.
Når jeg så klikker på linket, kommer følgende frem:
PMA Database ... not OK[ Dokumentation ] General relation features Disabled
Det skal lige siges, at jeg altså også havde dette problem før! Men hvordan enabler jeg så General relation features?
$cfg['Servers'][$i]['pmadb'] string Starting with version 2.3.0 phpMyAdmin offers a lot of features to work with master / foreign - tables. To use those as well as the bookmark feature you will need to create a new db.
To use this functionality as superuser create a new database: create a new database for phpmyadmin: CREATE DATABASE phpmyadmin; Note that "controluser" must have SELECT, INSERT, UPDATE and DELETE privileges on this database. Here is a query to set up those privileges (using "phpmyadmin" as the database name, and "pma" as the controluser): GRANT SELECT,INSERT,UPDATE,DELETE ON phpmyadmin.* to 'pma'@'localhost'; do not give any other user rights on this database. enter the databasename in $cfg['Servers'][$i]['pmadb']
Jeg kan bare ikke gennemskue det med pma - hvordan, hvor osv. I øvrigt hører det her vel egentlig slet ikke ind under denne kategori vel?
SORRY - Hvad gør jeg dog galt? Jeg kan ikke se noget fra dig. Jeg er lige kommet på ICQ i dag, så har endnu ikke helt sat mig ind i det. Vent lige lidt - jeg checker det lige.
nzc>> Ja det kan jeg godt se er MEGET irriterende! Jeg har nu læst indlæggene igennem og som jeg ser det er der flere 'problemer'. Hvad er det, der helt konkret er dit problem?
Her er et eksempel på min kode til oprettelse af en innodb tabel:
/* Denne query sørger for at oprette tabellen kunde som en INNODB tabel. Feltet postnr refererer til feltet postnummer i tabellen postnummer. Der laves derfor index på feltet postnr */
mysql_query("CREATE TABLE kunde ( kundeid INT(4) NOT NULL AUTO_INCREMENT, firmanavn VARCHAR(50) NOT NULL, gade VARCHAR(50) NOT NULL, postnr INT(15) NOT NULL REFERENCES postnummer (postnummer) ON DELETE SET NULL, land VARCHAR(30) NOT NULL, telefon VARCHAR(20) NOT NULL, telefax VARCHAR(20), mail VARCHAR(40), PRIMARY KEY (kundeid), INDEX kunde_postnr (postnr)) TYPE = INNODB");
Jeg har rygende travlt i dag, men vil gerne forsøge at hjælpe dig, hvis jeg kan. Det er lidt længe siden, så det hele er ikke helt frisk i erindring og jeg er derfor nødt til lige at kigge på tingene igen. Stil derfor endelig spørgsmål, så vil jeg kigge herind en gang imellem, når jeg har tid.
det med TYPE = INNODB ka jeg jo ikke få til at virke da der er noget andet jeg skal sætte op inden. Alt det der med my.cnf som du vist har fået hjælp til her
nzc>> Undskyld den sene reaktion, men det har været en travl weekend. Jeg ved jo ikke om du har fået det til at virke nu, men... Jeg er absolut ikke blevet ekspert indenfor området, men det lykkedes mig da at få mit til at fungere. Jeg copy/pastede blot følgende ind i min my.ini: # You can write your other MySQL server options here # ... # Data file(s) must be able to # hold your data and indexes. # Make sure you have enough # free disk space. innodb_data_file_path = ibdata1:10M:autoextend # Set buffer pool size to # 50 - 80 % of your computer's # memory set-variable = innodb_buffer_pool_size=70M set-variable = innodb_additional_mem_pool_size=10M # Set the log file size to about # 25 % of the buffer pool size set-variable = innodb_log_file_size=20M set-variable = innodb_log_buffer_size=8M # Set ..flush_log_at_trx_commit # to 0 if you can afford losing # some last transactions innodb_flush_log_at_trx_commit=1
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.