Dies ist eine alte Version des Dokuments!


mySQL

Interne Variable zum Sortieren von Listen

Im Klassenlisten etc. neu zu sortieren, kann man SQL-interne Variablen nutzen.

Beispiel:

SET @t1=0; UPDATE `qf_classlist` SET person_number=(@t1:=@t1+1) WHERE `jobnumber` = 1237 AND `class` = 'nichtda' ORDER by remark DESC, name LIMIT 53

Wenn wir schon dabei sind: Bei Aufträgen allen zugewiesenen Bildern sagen, dass sie den gleichen Klassennamen haben sollen wie die Klassenliste:

UPDATE `qf_pictures` AS p INNER JOIN qf_picture_relation as r ON (p.id=r.picture_id) INNER JOIN qf_classlist as c ON (c.id=r.classlist_id) SET p.classname = c.class WHERE p.jobnumber = [jobnumber] AND p.classname!=c.class

Mysql: Passwort vergeben (Root hat noch keins!) mysql -u root

Geben Sie die folgenden Statements im MySQL-Client ein (ersetzen Sie dabei „IhrNeues Passwort“ mit dem von Ihnen gewählten Passwort!):

mysql> UPDATE mysql.user SET Password=PASSWORD('IhrNeuesPasswort')
    ->                   WHERE User='root';
mysql> FLUSH PRIVILEGES;
PASSWORD('neues Passwort') ist eine Funktion und muss auch so eingegeben werden

Problem: Debian nutzt einen mysql-User namens 'debian-sys-maint'. Der wurde bei meiner Portierung von DB-Dump anscheinend überschrieben und nach einem Neustart (vorher ging es!) konnte sich niemand mehr in mysql einloggen. Habe versucht:

apt-get remove mysql-common mysql-server mysql-client
mv /etc/mysql /etc/mysql.old
apt-get install mysql-common mysql-server mysql-client

Half nichts. Dann:

apt-get install mysqladmin
mysqladmin -u root password 'HIER_PASSWORD_REINSCHREIBEN'

Half auch nichts. Nochmal: Folgendes umbenannt:

/usr/share/mysql/ 
 /etc/init.d/mysql
 /etc/mysql
 /etc/mysql/mysqlaccess.conf
 /etc/mysql/my.cnf
 /etc/logrotate.d/mysql
 /var/db/pkg/dev-db/mysql*
 /var/lib/mysql (lassen, da hier die DBs sind und ohne mag er nicht starten.)

Da SQL nicht starten kann, kann ich den Dämon manuell starten (vorher wieder alle Dateien umbenennen) - ohne Privilegien-Tabelle!: mysqld –skip-grant-tables dann.

select host,user from user;

hier sieht man das Problem: Es gibt 4(!) roots. 2 davon vom 'printserver' Dort ein beherztes:

DELETE FROM mysql.user WHERE host != 'localhost';

es geht! - bis zum Neustart. Dann das Problem: mysql startet nicht. Nochmal: Wenn dort bei root nicht der Host localhost steht, musste den mit dem GRANT-Befehl setzen. Weitere Informationen zum GRANT-Befehl findest du in der MySQL-Referenz. Es ging dann… Kleines Problem: der user 'debian-sys-maint' kann sich beim systemstart nicht anmelden. Lösung: Passwort steht in /etc/mysql/debian.conf Merken(kopieren), dann Einloggen in mysql (als root).

UPDATE mysql.user SET password=PASSWORD('gemerktesPasswort') WHERE User='debian-sys-maint';FLUSH PRIVILEGES;

Hatte die Meldung nach Start: Checke Tables, etc. Problem komtm wohl vom mysl-Versionswechel.

mysqlcheck --check-upgrade --all-databases --auto-repair --password=[pw]
mysql_fix_privilege_tables --password=[pw]

SB exportieren (aus alten Server):

scp -P 22 backup/qunit1.sql root@192.168.123.196:/root/
Dann halt: mysql -u root -p qunit1 < qunit1.sql

Trigger

Renaming Databases safely

Quelle1)

This example uses a backup to rename a database in a MySQL instance.

It takes only 5 easy steps:

First copy the schema (db1) with mysqldump:

% mysqldump db1 > db1.sql

Create the a new schema (db2):

% mysqladmin CREATE db2

Insert the backup into the new schema:

% mysql db2 < db1.sql

Drop the old schema:

% mysqladmin drop db1

Now update the user rights:

mysql> UPDATE db SET Db = 'db2' WHERE Db = 'db1';
mysql> UPDATE tables_priv SET Db = 'db2' WHERE Db = 'db1';
mysql> UPDATE columns_priv SET Db = 'db2' WHERE Db = 'db1';
mysql> UPDATE host SET Db = 'db2' WHERE Db = 'db1';

Done! That was easy wasn’t it?

Tricks

Tauschen von Werten in einer Zelle

Beispiel: In der DB steht: Berlin 12455, es soll aber stehen: 12455 Berlin (im Feld address1)

Test:

SELECT id, class, name, address1, address2, CONCAT (SUBSTRING_INDEX( `address1` , ' ', -1 ), ' ', SUBSTRING_INDEX( `address1` , ' ', 1 ))  FROM `qf_classlist` WHERE `jobnumber` = 2061 AND `address1` LIKE '%Berlin%' AND address1 != ''
UPDATE `qf_classlist` SET address1 = CONCAT (SUBSTRING_INDEX( `address1` , ' ', -1 ), ' ', SUBSTRING_INDEX( `address1` , ' ', 1 )) WHERE `jobnumber` = 2061 AND `address1` LIKE '%Berlin%' AND address1 != ''

Feld auf einh. Länge bringen (durch führende Nullen)

Beispiel: Im Feld code steht 45, soll aber 0000045

UPDATE `qf_classlist` SET code =  CONCAT((REPEAT("0",(7-LENGTH(code)))), code) WHERE `jobnumber` = 2127 AND LENGTH(code) != 7

Versehentlich doppelt importierte Namen kürzen

Beispiel: Meier, Chris, Meier, Chris statt Meier, Chris

UPDATE `qf_classlist` SET name = SUBSTRING_INDEX(name, ',', 2) WHERE `jobnumber` = [jobnumber] AND class=[class]

Bei einem Auftrag den Bildstatus aller Bilder entfernen

Beispiel: Bei Auftrag 2303 soll ein gewisser Status [status] entfernt werden. Aber nur bei Personenbildern.

UPDATE `qf_pictures` SET status = (status - [status]) WHERE `jobnumber` = 2303 AND (status | [status]) = status AND (content = 1 OR content = 2 OR content = 4 OR content = 2097152)

ZB: Bit 3 ( = 4 = PICSTATUS_COLORPROOFED) entfernen:

UPDATE `qf_pictures` SET status = (status - 4) WHERE `jobnumber` = 2358 AND (status | 4) = status AND (content = 1 OR content = 2 OR content = 4 OR content = 2097152)

Klassenliste nachträglich löschen, bei der schon NB-Nummern erstellt wurden (aber keine Bilder)

Beispiel: Bei Auftrag 2363 ist die Klassenliste falsch, sie soll gelöscht werden. Es wurden aber schon NB-Nummern reserviert. Die sollen auch weg, weil die Nummern sonst unnütz verschwendet werden

1. NB-Nummern löschen:

DELETE ro.* FROM qf_reorder AS ro INNER JOIN qf_picture_relation AS r ON (ro.id=r.reorder_id) INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) WHERE c.jobnumber = 2363

2. Dann die Relations:

DELETE r.* FROM qf_picture_relation AS r INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) WHERE c.jobnumber = 2363

3. Schliesslich die KL selbst:

DELETE c.* FROM `qf_classlist` as c WHERE c.jobnumber = 2363

Alle Bilder löschen( wenn sie versehentlich importiert wurden)

Besonderes Problem: Nachbestellnummern sind schon erstellt (ohne Bilder), ohne dass Bilder da sin. - weil den Schülern die Nummer schon mitgeteilt wurde.

Schauen, welche neuen (jetzt falschen) Relations erstellt wurden: Die erkennt man daran, dass sie noch keine Reorder-Nummer haben:

SELECT * FROM qf_picture_relation AS r INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) WHERE c.jobnumber = 123 AND picture_id>0 

1. Die neu erstellten Relations löschen (sind jetzt überflüssig):

DELETE r.* FROM qf_picture_relation AS r INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) WHERE c.jobnumber = 123 AND r.picture_id>0 AND r.reorder_id=0

2. Jetzt die Relations, die schon eine Picture-ID haben wieder auf 0 setzen:

UPDATE qf_picture_relation AS r INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) SET r.picture_id=0 WHERE c.jobnumber = 123 AND r.picture_id>0

3. Schliesslich die DB-Einträge der Bilder löschen:

DELETE * FROM qf_pictures WHERE jobnumber = 123

und die Bilder im Archive löschen:

rm /var/archive/123/*

Alle Klassenlisten löschen ( wenn schon Barcodes/Nachbestellnummern erstellt wurden)

Besonderes Problem: Nachbestellnummern sind schon erstellt (ohne Bilder), ohne dass Bilder da sind. - den Schülern wurden die Nummern NICHT mitgeteilt. Jetzt sind die KLL aber falsch und müssen durch neue ersetzt werden. Die alten NB-Nummer werden auch gelöscht.

Erst die NB-Nummern löschen:

DELETE ro.* FROM qf_reorder as ro INNER JOIN qf_picture_relation AS r ON (r.reorder_id=ro.id) INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) WHERE c.jobnumber = XXX

Dann die dazugehörigen Relations löschen:

DELETE r.* FROM qf_picture_relation AS r INNER JOIN `qf_classlist` as c ON (c.id=r.classlist_id) WHERE c.jobnumber = XXX

Dann die KLL selbst:

DELETE FROM `qf_classlist` WHERE `jobnumber` = XXX
 
Nach oben
mysql.1505125804.txt.gz · Zuletzt geändert: 2024/02/29 13:35 (Externe Bearbeitung)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0
DFmW2CEce3htPL1uNQuHUVu4Tk6WXigFQp   Dogecoin Donations Accepted Here    DFmW2CEce3htPL1uNQuHUVu4Tk6WXigFQp  DFmW2CEce3htPL1uNQuHUVu4Tk6WXigFQp