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
 
Nach oben
mysql.1446557589.txt.gz · Zuletzt geändert: 2024/02/29 13:34 (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