Forum: PC Hard- und Software Raspian/Linux: mysql startet nicht per init


von Rasputin (Gast)


Lesenswert?

Hallo Leute,

ich bin gerade etwas ratlos. :( Ich hab bei meinem Raspberry das 
Wurzelverzeichnis Readonly gemounted und das System entsprechend 
angepasst. Seit dem startet Mysql nicht mehr automatisch via Init beim 
booten. Interessanterweise kann ich nach dem booten mysql via ssh 
problemlos per "/etc/init.d/mysql4 start" starten! Die Schreibrechte 
müssten also stimmen. :?

Meine Verzeichnisstruktur:
1
/ (SD-Karte Partition 2, ext4, Readonly)
2
/var (SD-Karte Partition 3, ext4, Read/Write)
3
/ext (USB-Laufwerk, ext4, Read/Write)
4
restliche mounts standardmässig.

MySQL-Datenverzeichnis:
1
/ext/mysql (Daten/Config/Logs/PID)

"Fehlermeldung":
1
Starting mysqld daemon with databases from /ext/mysql
2
STOPPING server from pid file /ext/mysql/raspberrypi.pid
3
160109 18:36:32  mysqld ended

Das einzige was ich da raus lese, ist, dass er anscheinend erfolgreich 
die Datei /ext/mysql/raspberrypi.pid schreiben und lesen konnte.

Leider hab ich in keiner Log mehr über die Ursache gefunden.

Um der Sache auf den Grund zu gehen, hab ich in dem Init-Script von 
mysql u.a. die Ausgabe von folgenden Befehlen in eine Datei schreiben 
lassen.
1
whoami (ist root)
2
mount (alles gemountet wie vorgesehen)
3
ls -al /ext/mysql (alles da)
4
ps ax (konnte nichts auffälliges erkennen)
5
sleep 10 (bisschen warten schadet nie, aber genützt hat es nichts)

hat jemand eine Idee in welche Richtung ich suchen könnte? Was ist 
während dem init anders, als später in der shell?

Danke sehr

von Md M. (Firma: Potilatormanufaktur) (mdma)


Lesenswert?

Zeig doch mal die /etc/mysql/my.cnf

von Rasputin (Gast)


Lesenswert?

hier der Inhalt der my.cnf mit entfernten kommentaren
1
[client]
2
port    = 3306
3
socket    = /var/mysqld.sock
4
5
[mysqld]
6
port    = 3306
7
socket    = /var/mysqld.sock
8
skip-locking
9
key_buffer = 16M
10
max_allowed_packet = 1M
11
table_cache = 64
12
sort_buffer_size = 512K
13
net_buffer_length = 8K
14
read_buffer_size = 256K
15
read_rnd_buffer_size = 512K
16
myisam_sort_buffer_size = 8M
17
18
log-bin
19
server-id  = 1
20
21
[mysqldump]
22
quick
23
max_allowed_packet = 16M
24
25
[mysql]
26
no-auto-rehash
27
28
[isamchk]
29
key_buffer = 20M
30
sort_buffer_size = 20M
31
read_buffer = 2M
32
write_buffer = 2M
33
34
[myisamchk]
35
key_buffer = 20M
36
sort_buffer_size = 20M
37
read_buffer = 2M
38
write_buffer = 2M
39
40
[mysqlhotcopy]
41
interactive-timeout
Das Datenverzeichnis wird in /etc/init.d/mysql4 definiert.

von Rasputin (Gast)


Lesenswert?

Hier noch die Befehlszeile aus /etc/init.d/mysql4
1
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file >> /var/log/mysql4_start.log 2>&1 &
 Die Umleitung nach /var/log/mysql4_start.log hab ich hinzugefügt. Dort 
steht dann oben genannte Fehlermeldung.

von Noch einer (Gast)


Lesenswert?

Würde ich als Test vorm runter fahren die raspberrypi.pid löschen. 
Vielleicht ist da ein Bug, wenn der mysqld immer mit der selben Pid 
gestartet wird.

Als vorletzte Möglichkeit den mysqld mit strace -o und -f usw. starten.

Wenn du dann immer noch keine Fehlermeldung bekommst, brauchst du einen 
Exorzisten.

von Rasputin (Gast)


Lesenswert?

Hallo noch einer,

gestern, als ich hier die nackte my.cnf (ohne die ganzen Kommentare) 
gesehen habe, ist mir aufgefallen, dass es da gar keine Angabe gibt, mit 
welchem Benutzer mysqld gestartet werden soll. Trotzdem wird mysqld, 
wenn ich als root eingeloggt bin, mit "/etc/init.d/mysql4 start" als 
Benutzer mysql4 gestartet (hab ich geprüft). Ich dachte erst, dass das 
vielleicht in die binaries einkompiliert wurde, da ich mit 
--with-mysqld-user=mysql4 kompiliert habe. Trotzdem hab ich jetzt heute 
mal unter [mysqld] "user = mysql4" eingetragen, und siehe da, es 
funktioniert jetzt! Thema hat sich eigentlich erledigt.

Aber kann mir jemand trotzdem erklären, warum das per shell ohne diesen 
Eintrag funktioniert, per init aber nicht (ausser, wenn / als rw 
gemounted wird)? Vielleicht doch einen Exorzisten beauftragen?

Danke trotzdem an alle

von c.m. (Gast)


Lesenswert?

mounte /tmp auch mal rw, vielleicht als tmpfs
1
tmpfs  /tmp    tmpfs  size=8G,noexec,nodev 0 0

size anpassen. std ist 50% RAM, größen können absolut in M/GB oder 
prozentual angegeben werden.

von Rasputin (Gast)


Lesenswert?

/tmp ist standardmässig tmpfs. Hier die restlichen mounts (alle belassen 
wie im offiziellen Image):
1
/dev/mmcblk0p1 on /boot     type vfat     (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
2
proc           on /proc     type proc     (rw,nosuid,nodev,noexec,relatime)
3
sysfs          on /sys      type sysfs    (rw,nosuid,nodev,noexec,relatime)
4
devtmpfs       on /dev      type devtmpfs (rw,relatime,size=218436k,nr_inodes=54609,mode=755)
5
devpts         on /dev/pts  type devpts   (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
6
tmpfs          on /run      type tmpfs    (rw,nosuid,noexec,relatime,size=44544k,mode=755)
7
tmpfs          on /run/lock type tmpfs    (rw,nosuid,nodev,noexec,relatime,size=5120k)
8
tmpfs          on /run/shm  type tmpfs    (rw,nosuid,nodev,noexec,relatime,size=89080k)
9
tmpfs          on /tmp      type tmpfs    (rw,nosuid,nodev,relatime,size=89080k)

von Rasputin (Gast)


Lesenswert?

Hmmm... /boot könnte ich eigentlich auch ro mounten. Oder spricht was 
dagegen?

von Kaj (Gast)


Lesenswert?

Du kannst /boot nach dem booten auch einfach aushängen, wird dann ja 
nicht mehr benötigt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.