Avatar billede trumf Nybegynder
03. juni 2004 - 02:16 Der er 51 kommentarer og
1 løsning

semiautomatisk oprettelse af db og bruger

Hejsa eksperter

Jeg kunne godt tænke mig at have et script til at kopiere strukturen af en mysql database til en ny database, som jeg i scriptet selv kan bestemme navnet på, og samtidig oprette en bruger til den nye database. (ikke root)
Scriptet skal kunne aktiveres fra et website.

Jeg tænkte på om man kunne lave noget i stil med:
select *
into <table2>
from <table1>
bare med en hel DB
select *
into (create request.form("DBnavn"))
from <db1>
og derefter oprette en bruger på samme måde...

eller måske noget med at få fat i cmd fra ASP/PHP og så hente et dump ind (Jeg har allerede den DB jeg vil lave en kopi af i et dump med create table osv.), og lave en replace i linien med create db til det nye navn defineret i en form, og så skyde det hele af...
Jeg tænker at det er en god løsning, men kan ikke lige gennemskue med hvilken bruger jeg skal connecte til db... skal jeg lave en user med root priv ? dette er dog nok en alvorlig sikkerhedsbrist, da IUSER vil have adgang til den...

Jeg håber dette er til at forstå, ellers spørg.

På forhånd tak
Avatar billede dennismp Nybegynder
03. juni 2004 - 02:26 #1
Kan du ikke bare bruge kommandoen (hvis det er unix)
mysqldump -u .. -h .. -p gammeldatabase | mysql -u .. -h .. -p nydatabase ?

eller

mysqldump -u .. -h .. -p gammeldatabase >dump.sql
mysql -u .. -h .. -p nydatabase <dump.sql
Avatar billede trumf Nybegynder
03. juni 2004 - 11:47 #2
Det er win2k3, men det skal aktiveres fra et website, så der skal importeres en værdi fra en htmlform ind i cmd så det nye navn kan komme med
Avatar billede dennismp Nybegynder
03. juni 2004 - 12:06 #3
jow, udover at det skal testes grundigt, så er det da set før :)
Avatar billede trumf Nybegynder
03. juni 2004 - 12:41 #4
Jeg sidder og roder lidt med at lave en fil med ASP, som jeg feks kalder lavDB.cmd som jeg så vil kalde fra et script. Jeg kan jo selv bestemme hvad der skal stå i denne fil, så der kan der jo indsættes SQL til at oprette den nye DB

Jeg har bare lidt problemer med user og password...

og for at det ikke skal være løgn, så er jeg vist kommet til at ændre root password så jeg ikke kan få fat i noget... :-)
Avatar billede trumf Nybegynder
03. juni 2004 - 13:47 #5
hvordan er det lige at man ændrer root password ?
Avatar billede trumf Nybegynder
03. juni 2004 - 13:48 #6
altså fra command
Avatar billede trumf Nybegynder
03. juni 2004 - 13:56 #7
hvordan ændrer jeg et password på root, hvis jeg er kommet til at ændrer det uden at kryptere det første gang?
Avatar billede dennismp Nybegynder
03. juni 2004 - 14:22 #8
Avatar billede trumf Nybegynder
03. juni 2004 - 17:49 #9
Når jeg kører dette fra cmd så virker det, men ikke når det køres fra en batch! hvorfor ?

c:\mysql\bin\mysqladmin -u root -ppwd CREATE newdb
Avatar billede dennismp Nybegynder
03. juni 2004 - 17:58 #10
Hvad sker der, når du kører det som en match?
Avatar billede trumf Nybegynder
03. juni 2004 - 18:03 #11
command vinduet blinker (åbner og lukker) bare, så jeg kan ikke nå at se hvilken fejl der kommer
Avatar billede dennismp Nybegynder
03. juni 2004 - 18:11 #12
Heh, jeg kan ikke stave til match :).

Kan du ikke bare bruge command.com og så køre scriptet derfra?

eller tilføje pause (mener jeg der er noget der hedder - er ikke 100%) som den sidste linje din din batchfil ?
Avatar billede trumf Nybegynder
03. juni 2004 - 18:17 #13
Man kan lave pause i dos når der feks skrives dir /p men det virker ikke sammen med det andet her!
Avatar billede trumf Nybegynder
03. juni 2004 - 18:41 #14
ahh har fundet ud af at man kan hente et script fra en fil mens man arbejder i cmd\mysql (\. filnavn), så nu får jeg fejlene :-)
Avatar billede trumf Nybegynder
03. juni 2004 - 19:27 #15
Dette er scriptet:
CREATE database IF NOT EXISTS newdb;
CREATE TABLE newdb.newtbl (ID tinyint(3) unsigned NOT NULL auto_increment) TYPE=MyISAM;
INSERT INTO newdb.newtbl VALUES (1);
fejl:
der kan kun være et autoincrement-felt og det skal være indexeret
Avatar billede dennismp Nybegynder
03. juni 2004 - 19:33 #16
prøv at tilføje primary.. så får du indexet også.
CREATE TABLE newdb.newtbl (ID tinyint(3) unsigned NOT NULL auto_increment primary key) TYPE=MyISAM;
Avatar billede trumf Nybegynder
03. juni 2004 - 20:41 #17
OK fedt, så skal vi bare have lavet en user med adgang til den DB. Det kan vel ikke være så svært
Avatar billede dennismp Nybegynder
03. juni 2004 - 20:46 #18
GRANT ALL ON newdb.* TO 'bruger'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
Avatar billede trumf Nybegynder
03. juni 2004 - 20:48 #19
OK så kører det også...
Avatar billede trumf Nybegynder
03. juni 2004 - 20:50 #20
ja, jeg gjorde det sådan i stedet, er det ikke OK ?
INSERT INTO mysql.user VALUES ('localhost','newdbuser',PASSWORD('newdbuserpass'),'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0);
INSERT INTO mysql.db VALUES ('localhost','newdb','newdbuser','Y','Y','Y','Y','Y','Y','N','N','N','N','Y','N');
Avatar billede dennismp Nybegynder
03. juni 2004 - 20:52 #21
Jow det tror jeg nok (så vidt jeg ved er GRANT bare et "alias" for de inserts du viser) bare tilføj FLUSH PRIVILEGES; så mysql gen-indlæser tabellen.
Avatar billede trumf Nybegynder
03. juni 2004 - 20:57 #22
okidoki

så kommer den sjove del hvor det skal laves i et script der kan kaldes fra et web...
Avatar billede trumf Nybegynder
03. juni 2004 - 21:01 #23
nu laver jeg en fil og lægger dette ind:

c:\mysql\bin\mysql -u root -ppwd mysql
CREATE database IF NOT EXISTS newdb;
CREATE TABLE newdb.newtbl (ID tinyint(3) unsigned NOT NULL auto_increment primary key) TYPE=MyISAM;
INSERT INTO newdb.newtbl VALUES (1);
INSERT INTO mysql.user VALUES ('localhost','newdbuser',PASSWORD('newdbuserpass'),'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0);
INSERT INTO mysql.db VALUES ('localhost','newdb','newdbuser','Y','Y','Y','Y','Y','Y','N','N','N','N','Y','N');
FLUSH PRIVILEGES;
quit;

men det kører ikke, og jeg kan ikke få fejlen da den bare "blinker" når batchen køres
Avatar billede dennismp Nybegynder
03. juni 2004 - 21:03 #24
PHP: system, shell_exec, exec

ASP kender jeg ikke noget til (har glemt det :))
Avatar billede dennismp Nybegynder
03. juni 2004 - 21:20 #25
prøv at gemme dette som et create.sql-fil
CREATE database IF NOT EXISTS newdb;
CREATE TABLE newdb.newtbl (ID tinyint(3) unsigned NOT NULL auto_increment primary key) TYPE=MyISAM;
INSERT INTO newdb.newtbl VALUES (1);
INSERT INTO mysql.user VALUES ('localhost','newdbuser',PASSWORD('newdbuserpass'),'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0);
INSERT INTO mysql.db VALUES ('localhost','newdb','newdbuser','Y','Y','Y','Y','Y','Y','N','N','N','N','Y','N');
FLUSH PRIVILEGES;
quit;

og så udfør: mysql -u root -ppwd mysql <create.sql
Avatar billede trumf Nybegynder
03. juni 2004 - 22:36 #26
OK så er der et ASP script der laver ovenstående script, og mysql -u root -ppwd mysql <create.sql virker så det hele oprettes som det skal :-)

Så mangler der kun det at "mysql -u root -ppwd mysql <create.sql" også skal aktiveres fra et ASP/PHP script som kan kaldes fra mit web efter at create.sql er oprettet.
Hvordan klares den ?
Avatar billede dennismp Nybegynder
03. juni 2004 - 23:06 #27
Prøv følgende.. Virker det?

<?php
$fp = popen('mysql -u root -ppwd mysql','w');
if( $fp ) {
  fwrite($fp,'CREATE DATABASE IF NOT EXISTS newdb;');
}
else {
  print "fejl";
}
?>
Avatar billede trumf Nybegynder
03. juni 2004 - 23:13 #28
Nu er jeg ikke lige til PHP, så hvad skulle det gøre i tilfælde af success(fejl ?
Avatar billede dennismp Nybegynder
03. juni 2004 - 23:14 #29
Hvis det virker skulle den gerne oprette en 'newdb' (sørg for at den ikke findes, så du kan se om den rent faktisk bliver oprettet)
Avatar billede trumf Nybegynder
03. juni 2004 - 23:18 #30
kan du ikke lave noget hvor popen kalder hele sætningen mysql -u root -ppwd mysql < create.sql
<?php
$fp = popen('C:\mysql\bin\mysql -u root -ppwd mysql < create.sql','w');
if( $fp ) {
  print "success";
}
else {
  print "fejl";
}
?>
Avatar billede trumf Nybegynder
03. juni 2004 - 23:21 #31
Din opretter ikke nogen ny db
Avatar billede dennismp Nybegynder
03. juni 2004 - 23:25 #32
Hvis dette virker behøver vi ikke en ekstra fil, så kan vi skrive "direkte" til mysql - og ikke til en fil og så kalde mysql bagefter. Men i første omgang skal vi bare se om det virker :).

prøv med:
<?php
$fp = popen('C:/mysql/bin/mysql -u root -ppwd mysql','w');
if( $fp ) {
  fwrite($fp,"CREATE DATABASE IF NOT EXISTS newdb;\n");
  pclose($fp);
}
else {
  print "fejl";
}
?>
Avatar billede trumf Nybegynder
03. juni 2004 - 23:28 #33
Jeg prøvede lige dette og det skrev "ok"

<?php
$fp = popen('mysql -u root -ppwd mysql','w');
if( $fp ) {
  echo "ok";
}
else {
  echo "fejl";
}
?>
Avatar billede trumf Nybegynder
03. juni 2004 - 23:36 #34
dit nr 2 kører vist heller ikke og jeg har lige prøvet dette, som heller ikke opretter en db, selvom det skriver ok
<?php
$fp = popen('C:\mysql\bin\mysql -u root -ppwd mysql < D:\DB_createfile\newdb.sql','w');
if( $fp ) {
  pclose($fp);
  echo "ok";
}
else {
  echo "fejl";
}
?>
Avatar billede dennismp Nybegynder
03. juni 2004 - 23:54 #35
<?php
  print exec('C:\mysql\bin\mysql -u root -ppwd mysql < D:\DB_createfile\newdb.sql');
?>

(Det varer ikke så længe før jeg smutter iseng)
Avatar billede dennismp Nybegynder
03. juni 2004 - 23:55 #36
prøv ovenstående..

jeg prøver imorgen at lege lidt med det og se om jeg kan få det til at virke - men jeg har et unix system så jeg er ikke overbevist om at det kan bruges til noget direkte.
Avatar billede trumf Nybegynder
04. juni 2004 - 00:01 #37
Der sker intet!

Godnat, du har vist også fortjent en god nats søvn :-)
Avatar billede trumf Nybegynder
04. juni 2004 - 00:02 #38
Popen er vist også mest til unix, men kan bruges på win efter hvad jeg har læst mig frem til!
Avatar billede trumf Nybegynder
04. juni 2004 - 02:28 #39
popen findes ikke i windows. der er dog noget der hedder _popen men det bruges sammen med andre filer, som skal inkluderes...
Prøver en anden vej.
Avatar billede dennismp Nybegynder
04. juni 2004 - 12:25 #40
exec() virkede ikke?
Avatar billede trumf Nybegynder
04. juni 2004 - 19:54 #41
Nej desværre

Jeg fandt dog et win-alternativ, men det dropper jeg, da alt dette er for usikkert. Jeg skal lige læse lidt mere op på det før jeg kan fortsætte...
Avatar billede dennismp Nybegynder
04. juni 2004 - 20:06 #42
Ok - ellers sig til hvis jeg kan hjælpe.
Avatar billede trumf Nybegynder
04. juni 2004 - 23:30 #43
Pointene er allerede dine, men du må meget gerne lige hjælpe lidt mere hvis du vil.
Hvad er en OCX ?
http://vbmysql.com/forums/index.php?t=msg&th=9042&start=0&rid=0
og hvis en ocx ikke er noget, eller det samme som det VB de laver, så måske hjælp med at lave det VB i stedet, eller den del der skal aktivere det... Jeg kan vist godt selv få det VB til at køre, men det skal jo også køres. Hvis man ikke kan komme uden om det sikkerhedsmæssigt, så laver jeg det bare så det skal aktiveres direkte på serveren.
Avatar billede dennismp Nybegynder
04. juni 2004 - 23:43 #44
Jeg vil gerne hjælpe men windows er ikke noget jeg har synderlig forstand på.

Fandt dette: http://www.google.com/search?hl=en&lr=&ie=UTF-8&safe=off&oi=defmore&q=define:OCx

En idé: Istedet for at lade webdelen gøre alt arbejdet. Kunne du så ikke bare lade dit webinterface gemme en "kommando" i en tabel der siger "opret denne database til denne bruger og kopiere struktur fra database2" .. Bare en helt almindelig tabel. Det er det eneste webdelen gør, laver en record.

Så laver du et VB script der så bliver kørt hver x minutter (timer eller een gang dagnligt.. efter behov) .. og scanner denne tabel.. Nu kan den se at webdelen har "bestilt" og kan gøre hvad der nu er bestilt.

På den måde får du en ren opdeling af web og "backend". Og så vil din webserver ikke have behov for at have alt for mange rettigheder..

Problemet er self, at der kommer et delay fra man "bestiller" til det bliver behandlet. Men det ved du nok bedre end mig, om det er et problem :)
Avatar billede trumf Nybegynder
05. juni 2004 - 00:41 #45
bestiller hvad ???

Jeg er ikke helt med på hvad du mener!!!
Avatar billede dennismp Nybegynder
05. juni 2004 - 00:48 #46
Ok.

webserveren for at vide at nu skal der kopieres en database og oprettes en bruger. Så den tilføjer en række i tabellen jobs.

Jobs består af:
- srcdb  (navnet på den database man skal kopiere FRA)
- dstdb  (navnet på den nye database)
- username (brugernavn)
- password (..)

Det er det eneste webserveren gør.

Hver time har du så et lille VB(?) script der kigger i jobs-tabellen. Den vil nu se at der et job der skal udføres, så den laver en ny database (vha dstdb), en ny bruger (vha username/password) og så kopiere den data fra srcdb til dstdb. Når alt dette er gjort så bliver rækken slettet.

Så har du delt opgaven op i to processor. Nu behøver webserveren ikke have adgang til mere end højst nødvendigt (den skal kun skrive i db).. Og da brugeren ikke kommer i direkte i kontakt med VB-scriptet så får du minimeret risikoen.

Hjalp det?
Avatar billede trumf Nybegynder
05. juni 2004 - 01:09 #47
OK sådan...

Det jeg skal have gjort er at jeg allerede har et site (faktisk er der to at vælge i mellem), som jeg skal have lavet en kopi af. Det der skal laves er:
Jeg opretter min kunde i min database med kundens domænenavn
Lave en mappe feks med samme navn som domænet.
Kopiere alle filer fra fungerende site til ny mappe.
oprette ODBC
lave ny DB (kopi af fungerende shop)
oprette bruger
oprette domæne i IIS
oprette midlertidigt domæne i IIS (subdomæne af eget domæne der virker med det samme)

Jeg tænkte bare om der var en måde at automatisere det hele på, så jeg ikke skal bruge en halv dag hver gang jeg opretter et nyt site...
Avatar billede trumf Nybegynder
05. juni 2004 - 01:13 #48
Derudover skal jeg kunne gøre det hele fra min PDA, som jeg forbinder til serveren via VPN når jeg er ude. Der er billedet jo ikke så stort, så det ville være lækkert at kunne gøre det hele med et klik :-)
Avatar billede trumf Nybegynder
05. juni 2004 - 01:15 #49
Mon ikke alt det kan gøres med C#.NET ?
Avatar billede dennismp Nybegynder
05. juni 2004 - 01:18 #50
Jow, mon ikke.

C# er jo blot et programmeringssprog. Om du bruger det, java, c/c++, perl, VB er vel ikke så vigtigt. Det afhænger mere af du/en anden kan lave det i C# - og i så fald er det vel bare at gå igang :)
Avatar billede trumf Nybegynder
05. juni 2004 - 12:35 #51
Jeg skal vel også lige have et svar fra dig, så vi kan få denne tråd lukket.

Tak for din tid, det har været dejligt at vide at jeg kunne trække på dig 24/7 de sidste par dage :-)
Avatar billede dennismp Nybegynder
05. juni 2004 - 13:47 #52
Det var så lidt :-)

Held og lykke med projektet.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester