Port von MySQL-Datenbank ändern

Status
Für weitere Antworten geschlossen.

AlexanderW

Benutzer
Mitglied seit
21. Feb 2011
Beiträge
33
Punkte für Reaktionen
0
Punkte
6
Da ich meine Diskstation als Development-System einer bestehenden Website verwenden will, muss hier alles so wie in Produktion sein. Dort ist aus historischen Gründen die MYSQL-Datenbank auf Port 3307.
Tja, nur wie bekomme ich auf der Diskstation die MySql-Datenbank auf Port 3307?
Irgendwie fehlt mir der Plan.....

Alexander
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
im Verzeichnis /usr/syno/mysql/share/mysql liegt das Start-Skript für den mySQL-Server (mysql.server). Darin wird nach nach der Existenz einer Konfigurationsdatei '/etc/my.cnf' geschaut und wenn diese vorhanden ist, wird sie auch berücksichtigt. In dem Verzeichnis liegen mehrere Prototypen (z.B. my-small.cnf), die man in das Verzeichnis /etc als Datei my.cnf kopieren könnte. In den Prototypdateien ist eigentlich hübsch beschrieben, wie man den Port verändern bzw. einstellen kann (dies ist genauso wie auf allen anderen mySQL-Serversystemen

Itari
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
oder, quick and very dirty ;-)
Code:
iptables -t nat -A PREROUTING -p tcp --dport 3307 -j REDIRECT --to-port 3306
das ist eine Regel für iptables (die Firewall). Sie sorgt dafür dass Port 3307 auf Port 3306 umgeschrieben wird. Du greifst also via Port 3307 zu und wirst auf der Firewall auf Port 3306 umgeschrieben. Das sollte dann ohne Änderungen an der DB-Konfig funzen
 

HarryPotter

Benutzer
Mitglied seit
24. Aug 2007
Beiträge
2.156
Punkte für Reaktionen
0
Punkte
0
Der Befehl funzt bei mir nicht:
Code:
DS712> iptables -t nat -A PREROUTING -p tcp --dport 3307 -j REDIRECT --to-port 3306
modprobe: chdir(2.6.32.12): No such file or directory
iptables v1.4.2: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Hast du denn die Firewall im DSM überhaupt aktiviert? Sonst werden die Module ned geladen. Die NAT-Kette muss vorhanden sein, sonst könnte die DS z.B. keine Dienste eingehend reglementieren
 

HarryPotter

Benutzer
Mitglied seit
24. Aug 2007
Beiträge
2.156
Punkte für Reaktionen
0
Punkte
0
Ja ist aktiviert mit einer Regel "allow all". Reicht das nicht?
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.160
Punkte für Reaktionen
407
Punkte
393
Hallo,
die Firewall der DS mach kein NAT. Erst wenn VPN-Server aktiviert ist bzw. Hotspot aktiv ist werden die NAT-Module geladen.

Gruß Götz
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
die Umleitung per iptable ist weder 'quick' noch 'dirty' (es werden ja keine zusätzlichen Schmutzdaten erzeugt und es wird nicht schneller)

man muss sich dann auch im klaren sein, dass 2 Ports auf sind und ein IPKG/Debian-mySQL-Datenbankserver nicht auf die 3306 gelegt werden darf

Itari
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
ups sorry meine DS mit Firmware hat ein eigenes Startscript für die Firewall. Darum ist NAT bei mir immer geladen, auch ohne VPN.
@itari
quick und dirty: quick weil es schneller umgesetzt sein dürfte als mit Configfiles, dirty weil man dabei im Auge behalten muss, dass es eine Firewallregel braucht damit der Zugriff funzt ;-) Einen ipkg/Debian mysql wirst du nicht auf Port 3306 bringen wenn der mysql von der Firmware läuft, das verhindert das System ganz automatisch ;-)
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Einen ipkg/Debian mysql wirst du nicht auf Port 3306 bringen wenn der mysql von der Firmware läuft, das verhindert das System ganz automatisch ;-)

wie kommst denn darauf??? hast das ausprobiert???

Itari
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
ähm itari, wenn auf Port 3306 bereits ein Dienst läuft, dann wird sich kein weiterer Dienst auf demselben Port starten lassen (gleiche Maschine vorausgesetzt). Das muss ich ned testen ;-) Gibt doch einen "Cannot bind. port already in use"
Oder habe ich ganz falsch verstanden was du gemeint hast?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
ähm itari, wenn auf Port 3306 bereits ein Dienst läuft, dann wird sich kein weiterer Dienst auf demselben Port starten lassen (gleiche Maschine vorausgesetzt). Das muss ich ned testen ;-) Gibt doch einen "Cannot bind. port already in use"

nö, geht ... also bei mir läuft sowohl der Synology-Firmware-mysqld als auch der IPKG-mysqld auf dem gleichen Port

Itari
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
seit wann kann man zwei Prozesse an denselben Port binden? Wie will das System dann wissen können ob das Paket für den Syno mysql oder den ipkg mysql ist? sorry aber ohne netstat -lnp | grep :3306 kann ich dat ned glauben ;-) Oder bindest du einen an 127.0.0.1 und den anderen an die LAN-IP?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
seit wann kann man zwei Prozesse an denselben Port binden? Wie will das System dann wissen können ob das Paket für den Syno mysql oder den ipkg mysql ist?

schau dir mal mit einem (1) mysqld die Prozessliste an ... da gibt es reichlich mysqld-Prozesslisteneinträge

und genau das Auseinanderhalten ist ja das Problem, worüber ich weiter oben nachdachte ... im übrigen kannst auch die verschienden Apaches auf den gleichen Port starten

der netstat sagt dir in diesem Fall gar nichts, weil er in die Prozesstabelle schaut und die erste Portzuordnung heraussucht

Itari
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
das Auseinanderhalten im iptables ist je nach dem recht einfach: Wenn du einen mysql am 127.0.0.1 hast und einen an der LAN-IP dann sorgt REDIRECT dafür, dass bei der LAN-IP an die LAN-IP geleitet wird und bei 127.0.0.1 ans lo-Interface. Der Redirect erkennt auf welchem Interface die Anfrage kommt und leitet an die IP des entsprechenden Interfaces und den Port weiter.
Wegen zwei mysql: Vielleicht habe ich mich mit dem Ausdruck "Port" nicht ganz korrekt ausgedrückt. An unterschiedlichen Interfaces kann man problemlos zweimal denselben Port belegen. Ich hätte wohl besser (Netzwerk)-Socket gesagt, dann wäre es klarer gewesen. Mir wäre absolut neu, dass mehr als ein Dienst an denselben Socket binden könnte. Ich meine: starte zweimal den Apache. Einer wird sich sicher querlegen (zumindest am selben Socket)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
so jetzt habe ich das mal auf meiner DS mit Firmware getestet: ich kann nicht sowohl den Syno-mysql als auch den ipkg-mysql an den gleichen Socket binden. Hätte mich auch sehr gewundert wenn das gegangen wäre :) @ itari du wist also wohl nicht beide mysql an denselben Netzwerk-Socket gebunden haben
 

AlexanderW

Benutzer
Mitglied seit
21. Feb 2011
Beiträge
33
Punkte für Reaktionen
0
Punkte
6
soda, ich habe gleich den 2. Tipp gemacht und my.cnf erstellt. Funktioniert, allerdings hab ich wohl etwas zuwenig Speicher zugewiesen. Nun würde ich die Datei gerne ändern.
PROBLEM: diese Datei ist in Verwendung-->keine Bearbeitung möglich.
Wie stoppe ich den MYSQL-Server, damit ich die Datei bearbeiten kann?

Alexander
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.160
Punkte für Reaktionen
407
Punkte
393
Hallo,
/usr/syno/etc/rc.d/S21mysql.sh stop

Gruß Götz
 

AlexanderW

Benutzer
Mitglied seit
21. Feb 2011
Beiträge
33
Punkte für Reaktionen
0
Punkte
6
Ich hab beim AdminTool unter Websites einen Button gefunden, der genau obiges ausführt. Und was kommt: Blocked :-( Das nervt..... Kann ja nicht so schwer sein einen MySQL-Server zu stoppen...

Alexander
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
das was goetz geschrieben hast musst du direkt auf der Kommandozeile eingeben. Der Stop via DSM sollte eigentlich auch gehen, wenn du mysql deaktivierst, speicherst und dann wieder aktivierst. Zum Thema Kommandozeile findest du einiges in unserem Wiki
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat