Erstinstallation und schon das erste Problem
am 17.12.2005 - 01:31 Uhr in
liebe leute,
bin absoluter Drupal Neuling und bekomme nach Installation von Drupal 4.6.5 folgende Fehlermeldung, wenn ich meinen ersten Artikel veröffentlichen will.
user error: Access denied for user: 'web40@localhost' to database 'usr_web40_1'
query: LOCK TABLES sequences WRITE in /srv/www/htdocs/web40/html/includes/database.mysql.inc on line 66.
warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/web40/html/includes/common.inc:384) in /srv/www/htdocs/web40/html/includes/common.inc on line 192.
Wenn ich die url dann aufufe, sehe ich allerdings neben dem login-formular den neuen Artikel.
kann mir da bitte jemand einen tipp geben?
vielen dank!
- Anmelden oder Registrieren um Kommentare zu schreiben
Die Lösung findest du hier
am 18.12.2005 - 17:09 Uhr
http://drupal.org/node/1190
Du brauchst entweder mehr Rechte für deine mysql. (für den Befehl Lock Tables)
Der taucht in der Datei includes/database.mysql.inc von Drupal in folgender Funktion auf:
function db_next_id($name) {
$name = db_prefix_tables($name);
//db_query('LOCK TABLES {sequences} WRITE');
$id = db_result(db_query("SELECT id FROM {sequences} WHERE name = '%s'", $name)) + 1;
db_query("REPLACE INTO {sequences} VALUES ('%s', %d)", $name, $id);
//db_query('UNLOCK TABLES');
return $id;
}
oder du kommentierts die zwei Zeilen wie oben aus.
"Lock Tables" sorgt dafür, dass nicht zwei Schreibzugriffe gleichzeitig aif eine Tabelle erfolgen. Ist nur notwendig, wenn du eine "High Traffic" Sites betreibst.
meinolf
--
www.learn-php.de
exakte Lösung
am 19.12.2005 - 03:20 Uhr
danke meinolf,
hab die zwei zeilen auskommentiert und der fehler ist weg. sollte meine seite einmal high traffic vertragen müssen, werde ich meinen provider quälen!
druwal
Lock Tables Script zum abfragen der Datenbank
am 13.02.2006 - 18:17 Uhr
Hallo,
ich hatte genau die gleichen Probleme.
Mein Provider meinte als erstes es könnte sein das ich etwas falsch konfiguriert habe.
nach einigem Suchen habe ich dann ein Script gefunden welches einfach die Rechte der Datenbank abfragt.
Das Ergebnis hab ich dem Provider geschickt der dann auch das Problem gelöst hat.
-----------schnipp----------------------------
<?php
/**
* database access data
*/
$database['host'] = "localhost";
$database['user'] = "webxxx";
$database['pass'] = "xxxxxx";
$database['name'] = "usr_webxxx_1";
/**
* database connect
*/
function connectDB() {
global $database;
$linkID = mysql_connect($database['host'],$database['user'],$database['pass']) or
die("Can't connect to ".$database['host']."!");
mysql_select_db($database['name']) or
die("Can't connect to ".$database['name']."!");
return $linkID;
}
$sql = 'SHOW GRANTS FOR '.$database['user'].'@'.$database['host'].';';
$result = mysql_query($sql, connectDB());
echo('GRANTS for '.$database['user'].' @ '.$database['host'].'<br /><br />');
while($row = mysql_fetch_array($result)){
echo($row[0]).'<br />';
}
?>
--------------schnapp-------------------------------
Ergbnis sollte wie folgt aussehen:
-----------schnipp-----------------
GRANTS for webxxx @ localhost
GRANT USAGE ON *.* TO 'webxxx'@'localhost' IDENTIFIED BY PASSWORD 'xxxxxxxxxxxxxxxx'
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, LOCK TABLES ON `usr\_webxxx\_1`.* TO 'webxxx'@'localhost' WITH GRANT OPTION
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, LOCK TABLES ON `usr\_webxxx\_2`.* TO 'webxxx'@'localhost' WITH GRANT OPTION
------------schnapp-----------------
Vieleicht hilft es ja noch jemandem.
Gruß Ecki
Noch einfacher
am 24.07.2007 - 21:55 Uhr
Einfacher geht das, wenn man in phpMyAdmin unter "SQL" die Befehlszeile
SHOW GRANTS FOR CURRENT_USER
eingibt und dann die Textfelder in voller Breite anzeigen läßt (auf das "T" klicken).