CountOmega
(Themenstarter)
Anmeldungsdatum: 26. Mai 2019
Beiträge: 53
|
So, habe jetzt alles kopiert und Berechtigungen angepasst. Bekomme aber folgenden Fehler:
sudo mysqld --datadir=/mnt/sda1/mysql --user mysql
2020-01-22 17:53:31 0 [Note] mysqld (mysqld 10.3.21-MariaDB-1:10.3.21+maria~bionic-log) starting as process 30656 ...
mysqld: Can't create file '/mnt/sda1/log/mysql_error.log' (errno: 13 "Permission denied")
2020-01-22 17:53:31 0 [ERROR] mysqld: File '/mnt/sda1/log/mariadb-bin.index' not found (Errcode: 13 "Permission denied")2020-01-22 17:53:31 0 [ERROR] Aborting#
Berechtigungen: ls -la /mnt/sda1/log
total 16
drw-r----- 2 mysql adm 4096 Jan 22 17:36 .
drwxrwx--- 6 root root 4096 Jan 22 17:08 ..
-rw-r--r-- 1 root root 0 Jan 22 17:36 mariadb-bin.index
-rw-r----- 1 mysql adm 11 Jan 22 17:11 mariadb-bin.state
-rw-r----- 1 mysql adm 0 Jan 22 17:11 mariadb-slow.log
-rw-r----- 1 mysql adm 728 Jan 22 17:10 mysql_error.log
|
Cranvil
Anmeldungsdatum: 9. März 2019
Beiträge: 990
|
Wie hast du den MySQL-Server denn sonst gestartet? CountOmega schrieb: ls -la /mnt/sda1/log
drwxrwx--- 6 root root 4096 Jan 22 17:08 ..
-rw-r--r-- 1 root root 0 Jan 22 17:36 mariadb-bin.index
-rw-r----- 1 mysql adm 11 Jan 22 17:11 mariadb-bin.state
-rw-r----- 1 mysql adm 0 Jan 22 17:11 mariadb-slow.log
-rw-r----- 1 mysql adm 728 Jan 22 17:10 mysql_error.log
Das Verzeichnis sda1 hat Besitzer und Gruppe root. Das wird es dem Benutzer mysql bei den Berechtigungen schwer machen, hierauf zuzugreifen.
|
CountOmega
(Themenstarter)
Anmeldungsdatum: 26. Mai 2019
Beiträge: 53
|
Mit service mysql start. Problem ist dass das Verzeichnis die nextcloud Daten beinhaltet. Soll ich dann eine separate Partition erstellen?
|
Cranvil
Anmeldungsdatum: 9. März 2019
Beiträge: 990
|
Ich weiß nicht, wie komplex der Umzug von Nextcloud bzw. den Nextcloud-Daten ist. Sollte das ein simples Kopieren/Verschieben von Dateien mit einer Anpassung in einer Konfigurationsdatei sein, bietet es sich meiner Meinung nach an, beides (MySQL und Nextcloud) eine Verzeichnisebene nach unten zu schieben (weg von /). Somit kannst du bis zum jeweiligen Einstiegspunkt entsprechende Berechtigungen für beide Dienstkonten einstreuen. Wenn es nicht so einfach ist, könnte das Verlagern in eine eigene Partition schon die bessere Wahl sein. Sollte der Datenspeicher eine einzelne rotierende Platte sein, tendiere ich zum ersten Lösungsansatz. Das reduziert die Reisezeit für die Verlagerung der Schreib-/Leseköpfe. Je nach Nutzungsintensität könnte sich bei rotierenden Datenträgern dann sogar eine Aufteilung auf getrennte Datenträger anbieten.
|
CountOmega
(Themenstarter)
Anmeldungsdatum: 26. Mai 2019
Beiträge: 53
|
So, habe jetzt alle Berechtigungen angepasst sowie Verzeichnisse erstellt. Nun bekomme ich beim Starten von mysql den Fehler mariadb.service - MariaDB 10.3.21 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/mariadb.service.d
└─migrated-from-my.cnf-settings.conf
Active: failed (Result: exit-code) since Sun 2020-01-26 15:22:57 CET; 5s ago
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Process: 5758 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
Process: 5756 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 25898 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)
Process: 25714 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
Process: 25712 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 25711 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
Main PID: 25898 (code=exited, status=1/FAILURE)
Status: "MariaDB server is down"
Jan 26 15:22:56 rock64 systemd[1]: Starting MariaDB 10.3.21 database server...
Jan 26 15:22:57 rock64 mysqld[25898]: 2020-01-26 15:22:57 0 [Note] /usr/sbin/mysqld (mysqld 10.3.21-MariaDB-1:10.3.21+maria~bionic-log) starting as process 25898 ...
Jan 26 15:22:57 rock64 mysqld[25898]: 2020-01-26 15:22:57 0 [Warning] Can't create test file /mnt/sda1/db/mysql/mysql/rock64.lower-test
Jan 26 15:22:57 rock64 mysqld[25898]: [100B blob data]
Jan 26 15:22:57 rock64 mysqld[25898]: 2020-01-26 15:22:57 0 [ERROR] Aborting
Jan 26 15:22:57 rock64 systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
Jan 26 15:22:57 rock64 systemd[1]: mariadb.service: Failed with result 'exit-code'.
Jan 26 15:22:57 rock64 systemd[1]: Failed to start MariaDB 10.3.21 database server.
|
Cranvil
Anmeldungsdatum: 9. März 2019
Beiträge: 990
|
CountOmega schrieb: Jan 26 15:22:57 rock64 mysqld[25898]: 2020-01-26 15:22:57 0 [Warning] Can't create test file /mnt/sda1/db/mysql/mysql/rock64.lower-test
Der Meldung zufolge hast du noch nicht alle Verzeichnisse erwischt. Du hast in deiner MySQL/MariaDB-Konfiguration auch irgendwo Log-Dateien definiert (general_log_file und log_error). Leere die mal bzw. sichere die woanders hin, falls du die später nochmal anschauen willst, und schau da nach einem erneuten Startversuch rein. Gerade im log_error könntest du so vielleicht mehr als einen Fehler pro Dienstneustart korrigieren.
|
CountOmega
(Themenstarter)
Anmeldungsdatum: 26. Mai 2019
Beiträge: 53
|
Ich habe diese geleert, jedoch schreibt mysql hier nichts hinein. Kann es sein dass ich einen symlink vom alten Datenverzeichnis aufs neue benötige?
|
CountOmega
(Themenstarter)
Anmeldungsdatum: 26. Mai 2019
Beiträge: 53
|
So,habe jetzt gezwungenermaßen alles neu aufgesetzt. Das Seltsame ist, dass /var/log/ schon wieder zu 100% voll ist. Es liegt aber nicht an den mysql logs. Auch sind die anderen Logs nicht so groß. Was kann ich hier machen um Abhilfe zu schaffen?
|
Cranvil
Anmeldungsdatum: 9. März 2019
Beiträge: 990
|
Was hast du im Rahmen der Neuinstallation im Vergleich zur uns bereits bekannten Konfiguration geändert? Mit Blick auf die mariadb-Konfiguration kannst du die Menge an nützlichen Informationen gut mit dem Befehl
steuern. 😉 Mit einem
erhalten wir einen Überblick über /var/log. Je nach Umfang der Änderungen an der Standardkonfiguration wirst du die Datenbank voraussichtlich wieder auf dem langsamen root-Device liegen haben und dein Binlog (per default aus, aber in deiner letzten Konfiguration eingeschaltet) in /var/log. Und das braucht seinen Platz. Zusätzlich hattest du auch das general_log aktiviert und in /var/log schreiben lassen. Abgesehen davon, dass die Entwickler in der aktuellen Standard-Konfigurationsdatei von der Verwendung dieses Logs als solches abraten, könntest du hier auch den Pfad anpassen. Ich habe hier mal eine "einfache" Neuinstallation von MariaDB in ein Datenverzeichnis /mnt/sda1/mysql umgezogen - und das Binary Logging so aktiviert, dass desse Logs auch dort landen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 | vagrant@bionic:~$ sudo apt install mariadb-server
# Ausgabe von der Paketinstallation entfernt
vagrant@bionic:~$ sudo mysql_secure_installation
# Fragen beantworten
# Annahme der Änderungen überprüfen mit sudo mysql -u root -p
vagrant@bionic:~$ mysqld --help --verbose | less
mysqld Ver 10.1.44-MariaDB-0ubuntu0.18.04.1 for debian-linux-gnu on x86_64 (Ubuntu 18.04)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Starts the MariaDB database server.
Usage: mysqld [OPTIONS]
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf # <-- Gut zu wissen
# snip
vagrant@bionic:~$ find /etc/mysql/
/etc/mysql/
/etc/mysql/my.cnf.fallback
/etc/mysql/mariadb.conf.d
/etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf
/etc/mysql/mariadb.conf.d/50-server.cnf # <-- (2) Relevante Konfigurationsdatei
/etc/mysql/mariadb.conf.d/50-client.cnf
/etc/mysql/debian-start
/etc/mysql/debian.cnf
/etc/mysql/conf.d
/etc/mysql/conf.d/mysql.cnf
/etc/mysql/conf.d/mysqldump.cnf
/etc/mysql/my.cnf # <-- (1) Einstiegspunkt
/etc/mysql/mariadb.cnf
vagrant@bionic:~$ cat /etc/mysql/my.cnf
# Ausgabe auf das Wesentliche reduziert
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
vagrant@bionic:~$ grep -E '/var/log|/var/lib' /etc/mysql/mariadb.conf.d/50-server.cnf | grep -v '#'
log_error = /var/log/mysql/error.log # <-- Da können wir was gegen unternehmen
datadir = /var/lib/mysql # <-- Da wollen wir was gegen unternehmen
vagrant@bionic:~$ systemctl cat mariadb
# Ausgabe auf Benutzer und Gruppe reduziert
User=mysql
Group=mysql
vagrant@bionic:~$ ls -ld /var/lib/mysql /var/log/mysql
drwxr-xr-x 4 mysql mysql 4096 Feb 10 21:24 /var/lib/mysql
drwxr-s--- 2 mysql adm 4096 Feb 10 20:56 /var/log/mysql
vagrant@bionic:~$ ls -ld /mnt/ /mnt/sda1/ /mnt/sda1/mysql/
drwxr-xr-x 3 root root 4096 Feb 10 21:22 /mnt/
drwxr-xr-x 3 root root 4096 Feb 10 21:23 /mnt/sda1/
drwxr-xr-x 2 root root 4096 Feb 10 21:23 /mnt/sda1/mysql/
vagrant@bionic:~$ sudo chown mysql:mysql /mnt/sda1/mysql
vagrant@bionic:~$ sudo systemctl stop mariadb
vagrant@bionic:~$ mysqld --print-defaults
# Ausgabe umformatiert: Eine Zeile pro Option
mysqld would have been started with the following arguments:
--user=mysql
--pid-file=/var/run/mysqld/mysqld.pid
--socket=/var/run/mysqld/mysqld.sock
--port=3306
--basedir=/usr
--datadir=/var/lib/mysql
--tmpdir=/tmp
--lc-messages-dir=/usr/share/mysql
--skip-external-locking
--bind-address=127.0.0.1
--key_buffer_size=16M
--max_allowed_packet=16M
--thread_stack=192K
--thread_cache_size=8
--myisam_recover_options=BACKUP
--query_cache_limit=1M
--query_cache_size=16M
--log_error=/var/log/mysql/error.log
--expire_logs_days=10
--max_binlog_size=100M
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
vagrant@bionic:~$ EDITOR=vim sudoedit /etc/mysql/mariadb.conf.d/50-server.cnf
# EDITOR=<program> ist nur eine Marotte und kann weggelassen werden; default ist nano
# Optionen datadir und log_bin angepasst
vagrant@bionic:~$ grep -E 'datadir|log_bin' /etc/mysql/mariadb.conf.d/50-server.cnf
datadir = /mnt/sda1/mysql
log_bin # = /var/log/mysql/mysql-bin.log
vagrant@bionic:~$ mysqld --print-defaults
# Ausgabe auf das Wesentliche reduziert
--datadir=/mnt/sda1/mysql
--log_bin
vagrant@bionic:~$ sudo cp -av /var/lib/mysql/* /mnt/sda1/mysql/
vagrant@bionic:~$ sudo systemctl start mariadb
vagrant@bionic:~$ sudo systemctl status mariadb
● mariadb.service - MariaDB 10.1.44 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-02-10 21:50:00 CET; 5min ago
vagrant@bionic:~$ sudo lsof | grep mnt/sda1/mysql | wc -l
1701
vagrant@bionic:~$ sudo lsof | grep var/lib/mysql | wc -l
0
vagrant@bionic:~$ sudo mysql -u root -p
# Nächster Test, ob die Datenbank erreichbar ist
vagrant@bionic:~$ sudo rm -rf /var/lib/mysql
|
Vielleicht findest du da bereits einen Schnipsel, der dir vor Ort weiterhilft. Ansonsten helfen mit Sicherheit deine Angaben.
|
CountOmega
(Themenstarter)
Anmeldungsdatum: 26. Mai 2019
Beiträge: 53
|
| find /etc/mysql/
/etc/mysql/
/etc/mysql/conf.d
/etc/mysql/conf.d/mysqld_safe_syslog.cnf
/etc/mysql/my.cnf
/etc/mysql/debian-start
/etc/mysql/my.cnf.bak
/etc/mysql/mariadb.cnf
/etc/mysql/mariadb.conf.d
/etc/mysql/debian.cnf
|
Die Änderung des Datadirectory in my.cnf in /mnt/sda1/mysql hat zur Folge, dass der Server immer noch von /var/lib/mysql aus startet. Wenn ich diese nach ~/mysql_old verschiebe startet der Server nicht mehr.Hier der syslog:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | mariadb.service - MariaDB 10.3.22 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/mariadb.service.d
└─migrated-from-my.cnf-settings.conf
Active: failed (Result: exit-code) since Tue 2020-02-11 18:46:57 CET; 6s ago
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Process: 16361 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)
Process: 16178 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
Process: 16176 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 16175 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
Main PID: 16361 (code=exited, status=1/FAILURE)
Status: "MariaDB server is down"
Feb 11 18:46:56 rock64 systemd[1]: Starting MariaDB 10.3.22 database server...
Feb 11 18:46:57 rock64 mysqld[16361]: 2020-02-11 18:46:57 0 [Note] /usr/sbin/mysqld (mysqld 10.3.22-MariaDB-1:10.3.22+maria~bionic-log) starting as process 16361 ...
Feb 11 18:46:57 rock64 mysqld[16361]: 2020-02-11 18:46:57 0 [Warning] Can't create test file /mnt/sda1/mysql/rock64.lower-test
Feb 11 18:46:57 rock64 mysqld[16361]: [91B blob data]
Feb 11 18:46:57 rock64 mysqld[16361]: 2020-02-11 18:46:57 0 [ERROR] Aborting
Feb 11 18:46:57 rock64 systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
Feb 11 18:46:57 rock64 systemd[1]: mariadb.service: Failed with result 'exit-code'.
Feb 11 18:46:57 rock64 systemd[1]: Failed to start MariaDB 10.3.22 database server.
|
Und wie schiebe ich den binlog genau auf die externe?
|
Cranvil
Anmeldungsdatum: 9. März 2019
Beiträge: 990
|
Was mich nach wie vor brennend interessiert:
Die my.cnf referenziert im Normalfall (also frische Installation) mit !includedir die Unterverzeichnisse, aus denen dann wiederum alle cnf-Dateien geladen werden. Wenn du dort nicht selbst eine Sektion namens [mysqld] angelegt und dort dein datadir definiert hast, gehe ich davon aus, dass mysqld dieses datadir gar nicht wahrnimmt. Nachdem die my.cnf geladen wurde, zieht sich mysqld die ganzen mittels !includedir definierten Verzeichnisse rein, lädt die cnf-Dateien und von denen die Sektionen mysqld server mysqld-10.1 mariadb mariadb-10.1 client-server galera (lt. mysqld --help --verbose). Da mysqld keine Vorgabe bei der Reihenfolge macht und die letzte Zuweisung gewinnt, kann es sein, dass deine neue datadir-Definition zuerst geladen und danach durch eine andere überschrieben wird. Kurz: Ich gehe davon aus, dass du deine Änderung an der falschen Stelle gemacht hast. Ich habe es nicht explizit getestet, gehe beim Verschieben des binlogs allerdings davon aus, dass es reichen sollte, nach dem Setzen des korrekten datadirs die Inhalte des binlog-Verzeichnisses in das neue datadir zu schieben und dann die Pfadangabe hinter log_bin zu entfernen/auszukommentieren.
|
CountOmega
(Themenstarter)
Anmeldungsdatum: 26. Mai 2019
Beiträge: 53
|
Ah entschuldige, hier die Ausgabe | mysqld --print-defaults
mysqld would have been started with the following arguments:
--basedir=/usr --bind-address=127.0.0.1 --binlog_format=ROW --bulk_insert_buffer_size=16M --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --concurrent_insert=2 --connect_timeout=5 --datadir=/var/lib/mysql --default_storage_engine=InnoDB --expire_logs_days=1 --general_log_file=/var/log/mysql/mysql.log --general_log=0 --innodb_buffer_pool_size=1024M --innodb_buffer_pool_instances=1 --innodb_flush_log_at_trx_commit=2 --innodb_log_buffer_size=32M --innodb_max_dirty_pages_pct=90 --innodb_file_per_table=1 --innodb_open_files=400 --innodb_io_capacity=4000 --innodb_flush_method=O_DIRECT --key_buffer_size=128M --lc_messages_dir=/usr/share/mysql --lc_messages=en_US --log_bin=/var/log/mysql/mariadb-bin --log_bin_index=/var/log/mysql/mariadb-bin.index --log_error=/var/log/mysql/mysql_error.log --log_slow_verbosity=query_plan --log_warnings=2 --long_query_time=1 --max_allowed_packet=16M --max_binlog_size=1M --max_connections=200 --max_heap_table_size=64M --myisam_recover_options=BACKUP --myisam_sort_buffer_size=512M --port=3306 --pid-file=/var/run/mysqld/mysqld.pid --query_cache_limit=2M --query_cache_size=64M --query_cache_type=1 --query_cache_min_res_unit=2k --read_buffer_size=2M --read_rnd_buffer_size=1M --skip-external-locking --skip-name-resolve --slow_query_log_file=/var/log/mysql/mariadb-slow.log --slow-query-log=1 --socket=/var/run/mysqld/mysqld.sock --sort_buffer_size=4M --table_open_cache=400 --thread_cache_size=128 --tmp_table_size=64M --tmpdir=/tmp --transaction_isolation=READ-COMMITTED --user=mysql --wait_timeout=600
|
Ich werde nun auch eine separerate Partition mit ca 1-2 gb erstellen, da sonst das ebenfalls dort befindliche Nextcloud Daten Verzeichnis nicht erkannt wird.
|