Mysql: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(22 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:ServerApplikation]] | [[Kategorie:ServerApplikation]] | ||
[[Kategorie:DB]] | [[Kategorie:DB]] | ||
= Links = | |||
* [[Mariadb-Connector]] | |||
== Debian Anpassungen == | == Debian Anpassungen == | ||
Zeile 7: | Zeile 9: | ||
<pre> | <pre> | ||
mysql -u root -p mysql | mysql -u root -p mysql | ||
grant all on *.* to 'debian-sys-maint'@'localhost' identified by "6QLw8BSKFwzDnoUT"; | grant all on *.* to 'debian-sys-maint'@'localhost' identified by "6QLw8BSKFwzDnoUT" with grant option; | ||
grant all on | grant all on mydb.* to 'dbadmin'@'192.168.2.%' identified by '6QLw8BSKFwzDnoUT'; | ||
grant SELECT,SHOW VIEW,TRIGGER,PROCESS,LOCK TABLES on *.* to 'backup'@'localhost' identified by 'SAVE:alls!4711'; | |||
flush privileges; | flush privileges; | ||
</pre> | |||
MariaDB: Es ist für root ein Passwort vergeben. Man kann sich aber als OS-User root ohne Passwort anmelden. | |||
<syntaxhighlight lang="bash"> | |||
# Admin | |||
echo "grant all on *.* to 'dba'@'localhost' identified by 'BlaBla' with grant option; flush privileges;" | sudo mysql mysql | |||
# einfacher Benutzer | |||
echo "grant all on lrvtaskx.* to 'taskx'@'localhost' identified by 'BlaBla'; flush privileges;" | sudo mysql mysql | |||
</syntaxhighlight> | |||
== Nachträglich Root-Passwort setzen == | |||
Wenn bei der Installation das Passwort nicht gesetzt wurde, kann das nachträglich passieren: | |||
<pre># Set root password: | |||
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyN3wP4ssw0rd'; | |||
</pre> | |||
Zugriff ohne Root-Passwort (als Benutzer root): | |||
<pre>update user set | |||
authentication_string='', | |||
plugin='auth_socket' | |||
where user='root'; | |||
</pre> | |||
== Datentypen == | |||
<pre>create table example( | |||
id int(10) unsigned PRIMARY KEY NOT NULL AUTO_INCREMENT, | |||
ts TIMESTAMP NULL default NULL, | |||
dt DATETIME, | |||
name VARCHAR(100) UNIQUE NOT NULL | |||
); | |||
</pre> | |||
* TIMESTAMP ist normalerweise ohne NULL, Default-Wert ist NOW() | |||
* Datentyp ändern: | |||
<pre>alter table configurations modify configuration_id int(10) unsigned; | |||
</pre> | |||
* Spaltennamen ändern: | |||
<pre>alter table sample change sampleid sample_id int(10) unsigned; | |||
</pre> | |||
== Fremdschlüssel == | |||
<pre>alter table rolestarters add constraint fk_roles2rolestarter foreign key (role_id) | |||
references roles (role_id) on delete restrict on update restrict; | |||
alter table rolestarters drop constraint fk_roles2rolestarter; | |||
</pre> | |||
* Fremdschlüssel und Primärschlüssel müssen gleichen Datentyp haben. | |||
== Index erstellen und abfragen == | |||
<pre>create index geotestdate on testresult (`geo_bundesland`,`test_immunitaet`,`sample_date`); | |||
# und abfragen: | |||
show index from testresult; | |||
</pre> | |||
== SQL-Tipps == | |||
<pre>show create table geo; | |||
rename table A to B; | |||
alter table mytable change columnA columnB varchar(20); | |||
</pre> | |||
== DB-Export == | |||
<pre>mysqldump -u $USR $PWPHRASE $DB >$OUT | |||
# oder nur Tabelle users mit Bedingung: | |||
mysqldump "--where=name like 'a%'" -u $USR $PWPHRASE $DB users logs >$OUT | |||
</pre> | |||
== CSV-Import == | |||
* Wichtig: CSV-Datei muss wie Tabelle heißen, also geo.csv | |||
<pre>mysqlimport --ignore-lines=1 --fields-terminated-by=, --local \ | |||
--columns=geo_id,geo_staat,geo_land,geo_bezirk,geo_kreis,geo_gemeindeags,geo_gemeinde,geo_plz \ | |||
-u $USR $PWPHRASE $DB geo.csv | |||
</pre> | |||
<pre>LOAD DATA | |||
LOCAL INFILE '/tmp/data.csv' | |||
INTO TABLE geo | |||
COLUMNS TERMINATED BY '\t' | |||
IGNORE 1 LINES | |||
(geo_id,geo_staat,...) | |||
</pre> | |||
== Export der Benutzer == | |||
<syntaxhighlight lang="bash"> | |||
FN=users.txt | |||
FN_SQL=users.sql | |||
mysql -B -N -uroot -e "SELECT CONCAT('\'', user,'\'@\'', host, '\'') FROM user WHERE user != 'debian-sys-maint' AND user != 'root' AND user != ''" mysql > $FN | |||
while read line; do mysql -B -N -uroot -e "SHOW GRANTS FOR $line"; done < $FN > $FN_SQL | |||
</syntaxhighlight> | |||
== CSV-Export == | |||
<pre>SELECT * FROM users | |||
INTO OUTFILE '/tmp/users.csv' | |||
FIELDS ENCLOSED BY '"' | |||
TERMINATED BY ';' | |||
ESCAPED BY '"' | |||
LINES TERMINATED BY '\r\n'; | |||
</pre> | |||
= Funktionen = | |||
<pre>hex(sample_id) | |||
cast(sample_id as CHAR) | |||
NOW() - INTERVAL 1 HOUR | |||
</pre> | </pre> |
Aktuelle Version vom 28. März 2024, 20:54 Uhr
Links[Bearbeiten]
Debian Anpassungen[Bearbeiten]
Debian prüft die Tabellen beim Booten. Damit das funktioniert, muss ein passender User eingerichtet sein:
- Siehe /etc/mysql/debian.cnf
mysql -u root -p mysql grant all on *.* to 'debian-sys-maint'@'localhost' identified by "6QLw8BSKFwzDnoUT" with grant option; grant all on mydb.* to 'dbadmin'@'192.168.2.%' identified by '6QLw8BSKFwzDnoUT'; grant SELECT,SHOW VIEW,TRIGGER,PROCESS,LOCK TABLES on *.* to 'backup'@'localhost' identified by 'SAVE:alls!4711'; flush privileges;
MariaDB: Es ist für root ein Passwort vergeben. Man kann sich aber als OS-User root ohne Passwort anmelden.
# Admin
echo "grant all on *.* to 'dba'@'localhost' identified by 'BlaBla' with grant option; flush privileges;" | sudo mysql mysql
# einfacher Benutzer
echo "grant all on lrvtaskx.* to 'taskx'@'localhost' identified by 'BlaBla'; flush privileges;" | sudo mysql mysql
Nachträglich Root-Passwort setzen[Bearbeiten]
Wenn bei der Installation das Passwort nicht gesetzt wurde, kann das nachträglich passieren:
# Set root password: ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyN3wP4ssw0rd';
Zugriff ohne Root-Passwort (als Benutzer root):
update user set authentication_string='', plugin='auth_socket' where user='root';
Datentypen[Bearbeiten]
create table example( id int(10) unsigned PRIMARY KEY NOT NULL AUTO_INCREMENT, ts TIMESTAMP NULL default NULL, dt DATETIME, name VARCHAR(100) UNIQUE NOT NULL );
- TIMESTAMP ist normalerweise ohne NULL, Default-Wert ist NOW()
- Datentyp ändern:
alter table configurations modify configuration_id int(10) unsigned;
- Spaltennamen ändern:
alter table sample change sampleid sample_id int(10) unsigned;
Fremdschlüssel[Bearbeiten]
alter table rolestarters add constraint fk_roles2rolestarter foreign key (role_id) references roles (role_id) on delete restrict on update restrict; alter table rolestarters drop constraint fk_roles2rolestarter;
- Fremdschlüssel und Primärschlüssel müssen gleichen Datentyp haben.
Index erstellen und abfragen[Bearbeiten]
create index geotestdate on testresult (`geo_bundesland`,`test_immunitaet`,`sample_date`); # und abfragen: show index from testresult;
SQL-Tipps[Bearbeiten]
show create table geo; rename table A to B; alter table mytable change columnA columnB varchar(20);
DB-Export[Bearbeiten]
mysqldump -u $USR $PWPHRASE $DB >$OUT # oder nur Tabelle users mit Bedingung: mysqldump "--where=name like 'a%'" -u $USR $PWPHRASE $DB users logs >$OUT
CSV-Import[Bearbeiten]
- Wichtig: CSV-Datei muss wie Tabelle heißen, also geo.csv
mysqlimport --ignore-lines=1 --fields-terminated-by=, --local \ --columns=geo_id,geo_staat,geo_land,geo_bezirk,geo_kreis,geo_gemeindeags,geo_gemeinde,geo_plz \ -u $USR $PWPHRASE $DB geo.csv
LOAD DATA LOCAL INFILE '/tmp/data.csv' INTO TABLE geo COLUMNS TERMINATED BY '\t' IGNORE 1 LINES (geo_id,geo_staat,...)
Export der Benutzer[Bearbeiten]
FN=users.txt
FN_SQL=users.sql
mysql -B -N -uroot -e "SELECT CONCAT('\'', user,'\'@\'', host, '\'') FROM user WHERE user != 'debian-sys-maint' AND user != 'root' AND user != ''" mysql > $FN
while read line; do mysql -B -N -uroot -e "SHOW GRANTS FOR $line"; done < $FN > $FN_SQL
CSV-Export[Bearbeiten]
SELECT * FROM users INTO OUTFILE '/tmp/users.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
Funktionen[Bearbeiten]
hex(sample_id) cast(sample_id as CHAR) NOW() - INTERVAL 1 HOUR