seltsames MySQl Problem

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
monocult
User
Beiträge: 37
Registriert: Donnerstag 31. März 2005, 09:55
Wohnort: hennef
Kontaktdaten:

seltsames MySQl Problem

Beitragvon monocult » Donnerstag 26. Juli 2007, 13:18

Ich hab ein seltsames MySQl Problem

ich habe 2 verschiedene Webspaces mit 2 mal den selben Script das einen Kalender verwaltet und Zugriffe zählt.

Die Daten werden in jeweils verschiedenen Datenbanken gespeichert und haben auch unterschiedliche zugangsdaten.

Webspace A --> Datenbank A --> Tabelle Counter | Tabelle Kalender
Webspace B --> Datenbank B --> Tabelle Counter | Tabelle Kalender

Manchmal kommt es allerdings vor das ich über das Admininterface des Kalenders bei Webspace A einen Termin eintrage. und dieser seltsamer weise in Datenbank B eingetragen wird.

Ich weiß da nicht mehr weiter das verhalten ist mir unerklärlich da Webspace A ja gar keine Zugangsdaten für Datenbank B besitzt und umgekehrt.

Ist das ein Konfigurations Fehler von Mysql/Apache oder mod_python? Kann so was passieren wenn der DB Connect nicht richtig geschlossen wird?

Ich wäre schon Froh wenn ich einen Anhaltspunkt habe.

Grüße Daniel
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Donnerstag 26. Juli 2007, 15:21

liegen die Datenbanken auf unterschiedlichen Servern?

Ich hatte mit MySQLdb auch ein 'Multiuser' Problem wenn verschiedenen Script in verschiedene Datenbanken schreiben die auf dem gleichen Server liegen.

Code: Alles auswählen

db = MySQLdb.connect(

    host="localhost",

    db="testmysql",

    user="xxxxx"

    )


es ist vor gekommen das der wechsel zwischen (hier) testmysql und testmysql2 nicht immer funktioniert hat.
Mit einem sauberen Code der klarer connected ging es dann.
monocult
User
Beiträge: 37
Registriert: Donnerstag 31. März 2005, 09:55
Wohnort: hennef
Kontaktdaten:

Beitragvon monocult » Donnerstag 26. Juli 2007, 15:57

ja ist der selbe Mysql Server, meinst du das es wirklich am connect liegt? dann hätte ich zumindest einen Ansatzpunkt wo ich suchen könnte.

Code: Alles auswählen

def _mysql(query):

   #Verbindung zur Datenbank:
   import MySQLdb
   connection = MySQLdb.connect(
      host="localhost",
      db="blabla",
      user="blabla",
      passwd="*****")   

   #Erstelle Dict Cursor
   curser = connection.cursor()
        curser.execute(query)
        result = curser.fetchall()
   connection.commit()       
   connection.close()
   return result


Was meinst du mit "klarer connected"
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Donnerstag 26. Juli 2007, 16:05

Der wechsel zwischen den Datenbanken scheint nicht 100% zu funktionieren.
so etwas wie in PHP:

Code: Alles auswählen

  <?php
  mysql_select_db
&#40;"mysqltest"&#41;;
  
?>

gibt es ja nicht? da kann man nur über das connect gehen.

ich denke es ist so:
verbindung zu datenbank 1
insert befehl (zu db1)
insert befehl (zu db1)
verbindung zu datenbank 2
insert befehl (zu db1, ladet aber bei db2 weil neue verbindung aufgebaut)
insert befehl (zu db2)

ich werde mich mal dran machen und ein test script schreiben.
monocult
User
Beiträge: 37
Registriert: Donnerstag 31. März 2005, 09:55
Wohnort: hennef
Kontaktdaten:

Beitragvon monocult » Donnerstag 26. Juli 2007, 16:16

Das war auch meine Vermutung nur wie verhindere ich das? Script 1 weiß ja nicht das Script2 eine neue Verbindung aufgebaut hat.

Bin nicht der mysql Freak aber lässt sich die Datenbank nicht sperren für so was?
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Donnerstag 26. Juli 2007, 16:27

Ich habe mich gerade etwas damit beschäftigt.

Bin ein stückweit ratlos dein Code ist richtig so.
Mit einem Python Script kann ich das auch machen ich connecte 2x in unterschiedliche Datenbanken und befülle sie wechselnd mit nur 2connect, alles bleibt getrennt.
Es kann also nur irgend wie mit mod_python bzw apache zutun haben.

Ich werde das gleich noch mal als CGI testen, ob ich für mod_python noch die Kraft finde weiß ich nicht :-)

Bei Threads kann man locks setzen um solche Fehler zu verhinden bei MySQL ist mir das nicht bekannt, das muss aber nichts heißen :-)

*edit*

CGI mit folgendem code geht auch:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: latin-1 -*-

import MySQLdb
import time
import cgi
import cgitb; cgitb.enable()

print "Content-Type: text/html;charset=iso-8859-1"
print

connection = MySQLdb.connect(
   host="localhost",
   db="test",
   user="root")

while True:
   connection.cursor().execute("INSERT INTO `files` (`id`, `name`, `public`, `meta`, `time`, `ip`) VALUES (NULL, 'test1', 'l', 'l', 1, 'l');")
   print "Wieder +1"
   time.sleep(1)
   


den selben code habe ich noch mal auf die db test2 verbinden lassen und dann das erste und dann das zweite script gestartet alle daten sind richtig an gekommen. ich esse jetzt erstmal, dannach mache ich mich kurz an mod_python.

Ich habe bei mod_python und mysqldb die aktuellsten Versionen du auch?
monocult
User
Beiträge: 37
Registriert: Donnerstag 31. März 2005, 09:55
Wohnort: hennef
Kontaktdaten:

Beitragvon monocult » Donnerstag 26. Juli 2007, 17:18

Danke für deine mühe. Hier mal meine Apache config
[code=]<VirtualHost www.domain.de&#58;80 www.domain.de&#58;443 domain.de:80 domain.de:443 > #{NEWTLD}

DocumentRoot /home/www/domain/htdocs
DirectoryIndex index.de.html index.html index.py index.de.php index.html

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

<Directory /home/www/domain/htdocs>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all

</Directory>

<Directory /home/www/domain/htdocs/ >
AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug Off

RewriteEngine on

RewriteRule ^(.*)\.([0-9]+)\.([0-9]+)\.html$ index?id=$2&pid=$3&JustPlugVars=$4

</Directory>

AccessFileName .htaccess

ErrorLog /home/www/domain/logs/error.log
CustomLog /home/www/domain/logs/access.log combined

ServerSignature Off

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

</VirtualHost>[/code]
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Donnerstag 26. Juli 2007, 18:14

ok ich habe gerade das selbe mit dem mod_python publisher getestet (nutze ich nur). auch da hat alles funktioniert mit folgendem Code:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: latin-1 -*-

import MySQLdb
import time
#import cgi
#import cgitb; cgitb.enable()
from mod_python import apache

def test(req):
   req.content_type = "text/html"
   connection = MySQLdb.connect(
      host="localhost",
      db="test",
      user="root")

   while True:
      connection.cursor().execute("INSERT INTO `files` (`id`, `name`, `public`, `meta`, `time`, `ip`) VALUES (NULL, 'test1', 'l', 'l', 1, 'l');")
      req.write("Wieder +1")
      time.sleep(1)


Trotzdem hatte ich mal den selben Fehler wie du.

ich würde es mal auf einen Bug in einer alten Version schieben etwas besseres fällt mir nicht ein.

Als ich den Bug damals hatte:
Apache2.0
Python 2.3.5
MySQL4.1
MySQLdb in Version 1.2.?
mod_python da habe ich keine Ahnung welche Version ich eingesetzt habe.
und auf einem Debian3.1 Server und WindowsXP SP2

Jetzt habe ich:
Apache2.2
Python 2.5.1
MySQL5.0
MySQLdb in Version 1.2.1
mod_python 3.2.10
und alles auf einem Ubuntu 7.04
monocult
User
Beiträge: 37
Registriert: Donnerstag 31. März 2005, 09:55
Wohnort: hennef
Kontaktdaten:

Beitragvon monocult » Donnerstag 26. Juli 2007, 18:49

Apache 2.0.54-5sarge1
Mysql 4.0.24-10sarge2
mod_python 3.1.3-3
Mysqldb 1.2.1c2-1
Python 2.3.5-2

Ist ein Debian Sarge blöde ist das das ein Produktiv Server ist den ich ungern jetzt updaten würde/bzw kann.

[code=] mysql-bin.717 105738 Intvar 1 105738 INSERT_ID=8233
mysql-bin.717 105766 Query 1 105766 use `auto`; INSERT INTO page_counter VALUES( '', '2...
mysql-bin.717 105861 Query 1 105861 use `auto`; UPDATE page_counter SET counter = '2' W...
mysql-bin.717 105977 Intvar 1 105977 INSERT_ID=4
mysql-bin.717 106005 Query 1 106005 use `kent`; INSERT INTO justplug_kalender VALU...
mysql-bin.717 109403 Intvar 1 109403 INSERT_ID=171
mysql-bin.717 109431 Query 1 109431 use `auto`; INSERT INTO justplug_kalender VALUES( '...
mysql-bin.717 112703 Query 1 112703 use `mabu`; UPDATE page_counter SET counter ...
mysql-bin.717 112826 Query 1 112826 use `mabu`; UPDATE page_counter SET counter ...[/code]

der in Zeile 5 ist falsch sollte eigentlich auch nach "auto" und nicht nach "kent". Danach gehts dann. Seltsam :/
monocult
User
Beiträge: 37
Registriert: Donnerstag 31. März 2005, 09:55
Wohnort: hennef
Kontaktdaten:

Beitragvon monocult » Freitag 27. Juli 2007, 11:39

Ich weiß nicht mehr weiter. Hab heute ein Script geschrien das Daten kurz hintereinander in verschiedene Db einträgt um das Problem künstlich zu erzeugen. Aber es funktionierte so wie es soll. Wie soll ich denn Fehler bloß finden wenn ich ihn noch nicht einmal reproduzieren kann :/
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Freitag 27. Juli 2007, 17:54

Du musst 2Scripte parallel laufen lassen, dann sollte sich der Fehler reproduzieren lassen. Versuch das mal bitte, bin leider etwas faul ein VM mit Sarge und den anderen alten Versionen aufzusetzen :-)
monocult
User
Beiträge: 37
Registriert: Donnerstag 31. März 2005, 09:55
Wohnort: hennef
Kontaktdaten:

Beitragvon monocult » Montag 30. Juli 2007, 10:25

Ich glaub ich habs.

es gibt einen mod_python Bug der gleichnamige Module aus verschiedenen Verzeichnissen nicht trennen kann.

[code=]Verzeichnis 1 --> module.py
Verzeichnis 2 --> module.py[/code]

Wenn jetzt aus Verzeichnis 1 das module.py geladen ist steht das auch anderen Scripten zur Verfügung egal ob diese eigentlich das module.py aus Verzeichnis 2 nutzen sollen.

Da ich die mysql zugangsdaten in einem Module habe könnte der Fehler da liegen. Wobei bei mir die Module nicht nur in unterschiedlichen Verzeichnissen Liegen, sondern auch in unterschiedlichen Webspaces.
[code=]
Webspace 1 --> Dir --> module.py
Webspace 2 --> Dir --> module.py[/code]

Der Bug ist in nachfolgenden Versionen behoben. Allerdings stehen die nicht für sarge zu Verfügung das heißt jetzt manuell updaten oder allen Modulen eindeutige Namen geben :/

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder