MySQL

MySQL Stuff

 

# tablelle shrinken
DELETE FROM tabelle;
TRUNCATE tabelle; 

# check welche user es auf einem mysql-srv gibt
usr-1@srv-1 ~]$ mysql -u root -p

Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10863 to server version: 4.1.10a
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select User,Host from mysql.user;
+------+---------------------------+
| User | Host                      |
+------+---------------------------+
| are  | 10.10.10.10               |
| are  | 10.10.10.11               |
| are  | 10.50.100.0/255.255.255.0 |
| are  | 10.50.100.112             |
| are  | 10.50.100.2               |
|      | www.jakl.ch                 |
| are  | www.jakl.ch                 |
| root | www.jakl.ch                 |
|      | srv-1.example.com |
| root | srv-1.example.com |
+------+---------------------------+
10 rows in set (0.00 sec)

# Die User mit PW anzeigen, um zu sehen ob da auch ein PW gesetzt ist :
select User,Host,Password from mysql.user

# die permissions anschliessend anzeigen lassen :
mysql> show grants for root@www.jakl.ch ;
+---------------------------------------------------------------------------------------------------------------+
| Grants for root@www.jakl.ch                                                                                     |
+---------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'www.jakl.ch' IDENTIFIED BY PASSWORD '43e9a4ab75570f5b' WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

# create user with grant :
mysql> grant SELECT,INSERT,UPDATE,DELETE ON jbossdb.* to 'jboss'@'www.jakl.ch' identified by 'jboss' ;
Query OK, 0 rows affected (0.00 sec)

# falls noch tabellen angelegt werden sollten :
grant CREATE,SELECT,INSERT,UPDATE,DELETE ON jbossdb.* to 'jboss'@'www.jakl.ch' identified by 'jboss' ;

############################# ALLE GRANT OPTIONEN ##################################
Privilege Meaning
ALL [PRIVILEGES] Grant all privileges at specified access level except GRANT OPTION
ALTER Enable use of ALTER TABLE
ALTER ROUTINE Enable stored routines to be altered or dropped
CREATE Enable database and table creation
CREATE ROUTINE Enable stored routine creation
CREATE TEMPORARY TABLES Enable use of CREATE TEMPORARY TABLE
CREATE USER Enable use of CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES
CREATE VIEW Enable views to be created or altered
DELETE Enable use of DELETE
DROP Enable databases, tables, and views to be dropped
EVENT Enable use of events for the Event Scheduler
EXECUTE Enable the user to execute stored routines
FILE # GRANT FILE ON *.* TO 'logjob'@'www.jakl.ch'  --> musste es auf *.* setzen da sonst ein "permission denied" kam // Enable the user to cause the server to read or write files
GRANT OPTION Enable privileges to be granted to or removed from other accounts
INDEX Enable indexes to be created or dropped
INSERT Enable use of INSERT
LOCK TABLES Enable use of LOCK TABLES on tables for which you have the SELECT privilege
PROCESS Enable the user to see all processes with SHOW PROCESSLIST
REFERENCES Not implemented
RELOAD Enable use of FLUSH operations
REPLICATION CLIENT Enable the user to ask where master or slave servers are
REPLICATION SLAVE Enable replication slaves to read binary log events from the master
SELECT Enable use of SELECT
SHOW DATABASES Enable SHOW DATABASES to show all databases
SHOW VIEW Enable use of SHOW CREATE VIEW
SHUTDOWN Enable use of mysqladmin shutdown
SUPER Enable use of other administrative operations such as CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, and mysqladmin debug command
TRIGGER Enable trigger operations
UPDATE Enable use of UPDATE
USAGE Synonym for .no privileges.
#########################################################################################

# delete user
mysql> DELETE FROM mysql.user
-> WHERE User='user_name' and Host='host_name';
mysql> FLUSH PRIVILEGES;


# login und checks via shell-script
echo "show databases; " | mysql -u root --password="password1"


# Reset a password from a db-user:
set password for 'opproject'@'www.jakl.ch' = PASSWORD('IrgendEinNeuesPasswort');

# reset root password ... das in den klammern ist das neue PW.
use mysql ;
update user set password=PASSWORD("ksadfsdfgkjhdfksdhfhf") where user='root';
flush privileges;

# host aendern :
update mysql.user set host='www.jakl.ch' where user='nagios' and host='10.10.10.100';


# See table size of a db
mysql> SELECT table_name, table_rows, data_length, index_length,
    -> round(((data_length + index_length) / 1024 / 1024),2) "Size in MB"
    -> FROM information_schema.TABLES WHERE table_schema = "webportaldb";

# Fix a broken table like syslog-php
mysql> REPAIR TABLE users;


# get some status
mysql> show status like 'Conn%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 19    |
+---------------+-------+
1 row in set (0.00 sec)

mysql> show processlist;
+----+--------+------------------------------------+--------+---------+------+-------+------------------+
| Id | User   | Host                               | db     | Command | Time | State | Info             |
+----+--------+------------------------------------+--------+---------+------+-------+------------------+
| 15 | snmptt | www.jakl.ch                          | snmptt | Sleep   |   27 |       | NULL             |
| 17 | root   | www.jakl.ch                          | NULL   | Query   |    0 | NULL  | show processlist |
| 18 | snmptt | server.local:40455 | snmptt | Sleep   |   53 |       | NULL             |
+----+--------+------------------------------------+--------+---------+------+-------+------------------+
3 rows in set (0.00 sec)

mysql>  show status like '%onn%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| Aborted_connects         | 5     |
| Connections              | 19    |
| Max_used_connections     | 3     |
| Ssl_client_connects      | 0     |
| Ssl_connect_renegotiates | 0     |
| Ssl_finished_connects    | 0     |
| Threads_connected        | 3     |
+--------------------------+-------+
7 rows in set (0.00 sec)


###########
#count

mysql> select count(*) from SystemEvents;
+----------+
| count(*) |
+----------+
|  2399626 |
+----------+
1 row in set (0.00 sec)

###################
#
# einzelne tabelle löschen nach datum
# pruefe zuerst ob es in etwa die zu erwartende menge ist ;)
select count(*) from SystemEvents WHERE DATEDIFF(NOW(), ReceivedAt) >= 1
# alles loeschen was aelter als 6 tage ist :
delete low_priority quick from <tabelle> where DATEDIFF(NOW(), <spalte mit datum drin> >= <Anzahl Tage>
# das sieht dann so aus :
delete low_priority quick from SystemEvents WHERE DATEDIFF(NOW(), ReceivedAt) >= 6

 

###############################
#
# Tabelleninhalt aendern
mysql> select * from wp_options where option_id=1 ;
+-----------+-------------+------------------------------------+----------+
| option_id | option_name | option_value                       | autoload |
+-----------+-------------+------------------------------------+----------+
|         1 | siteurl     | http://www.abc.ch/d | yes      |
+-----------+-------------+------------------------------------+----------+
1 row in set (0.00 sec)

mysql> update wp_options set option_value='http://www.abc.ch' where option_id=1 ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from wp_options where option_id=1 ;
+-----------+-------------+---------------------------+----------+
| option_id | option_name | option_value              | autoload |
+-----------+-------------+---------------------------+----------+
|         1 | siteurl     | http://www.abc.ch | yes      |
+-----------+-------------+---------------------------+----------+
1 row in set (0.00 sec)

#######################################

MySQL Befehle
Aus wiki.drap.de
Wechseln zu: Navigation, Suche

Hier ist eine Zusammenfassung der gebräuchlichsten MySQL Befehlen.
mysql
mysql MySQL Client Programm zum absetzen der SQL Statements
mysql < file.sql SQL-Befehle aus dem File lesen, z.B. Dumpfile
mysql -vf < file.sql Verbose Force (continue on error)
mysql -h host -p -u user database Anmeldung mit Hostname, Passowrt, Username und Datenbank
mysqlshow
mysqlshow Datenbanken ausgeben
mysqlshow database Tabellen ausgeben
mysqlshow database table [column] Spalten ausgeben
mysql show
mysql: show databases; Datanbank Liste
mysql: show [open] tables; Tabellen Liste
mysql: show grants for user@host \G Grant Befehle ausgeben
mysql: show create database database \G Create Database Statement
mysql: show create table table \G Create Table Statement
mysql: show [full] columns from table; Spalten Beschreibung
mysql: show index from table; Index Beschreibung
mysql: show [full] processlist; Prozess Liste
mysql: show status; Status Parameter
mysql: show table status; Tabellen Status, Grösse Datum ...
mysql: show privileges; Grant Varianten
mysql: show table types; Verfügbare Tabellen Handler
mysql: show [global/session] variables; Variablen datadir port usw. ermitteln
mysqladmin
mysqladmin ping Ping auf MySQL-Server
mysqladmin status Server Status
mysqladmin variables Variablen datadir port usw. ermitteln
mysqladmin create database Datenbank erzeugen
mysqladmin drop database Datenbank löschen
mysqladmin flush
mysqladmin flush-hosts Host-chache bereinigen
mysqladmin flush-logs Logdateien schliessen und neue eröffnen
mysqladmin flush-privileges Grant Tabelle neu laden
mysqladmin reload s.o. Grant Tabelle neu laden
mysqladmin flush-status Statusvariablen zurücksetzen
mysqladmin flush-threads Thread-Cache leeren
mysqladmin refresh alle obigen flushes durchführen
mysqladmin processlist Prozesse anzeigen
mysqladmin kill id Prozess beenden
grant
mysql: grant all on *.* to 'user'@'IP/www.jakl.ch/%'
identified by 'password' [with grant option]; Passwort und Database-User Berechtigungen
mysql: grant select,insert,update,delete,create temporary tables,lock tables on database.table to 'user'@'IP/www.jakl.ch/%' identified by 'password'; Passwort und Lese-/Schreib- Berechtigungen
mysql: grant replication slave,reload,super on *.* to 'slave_user'@'IP/slave_host' identified by 'slave_password'; User für eine Replication auf dem Master Server einrichten
mysql: grant usage on *.* to 'user'@'IP/www.jakl.ch/%'
identified by 'password'; Nur das Passwort setzen, bzw. ändern
mysql: flush privileges; User Berechtigungen neu laden
mysql: select * from user \G User und Berechtigungen anzeigen
mysql: show privileges Berechtigungsvarianten anzeigen
mysqldump / mysqlimport
mysqldump --opt database [table] > database.sql Datenbank exportieren
mysqldump --opt --databases database1 database2 ... > database.sql Datenbanken exportieren
mysqldump --opt --all-databases --single-transaction > all_databases.sql alle Datenbanken exportieren
mysql < database.sql Datenbanken importieren
mysqldump -d database [table] > database.sql Datenbank Schema exportieren
mysqldump --fields-terminated-by=; -t -T dir database [table] Daten in Directory entladen
mysqlimport --fields-terminated-by=; database table_file Tabelle mit LOAD DATA INFILE laden
mysqlbinlog
mysqlbinlog file-binlog Binlog ausgeben
mysql --one-database database Binlog einspielen
mysqlhotcopy
mysqlhotcopy [--flushlog] [-q] database directory Tabellen sperren und mit cp in das Directory kopieren (benötigt PERL)
myisamchk
myisamchk *.MYI Checken der Daten- und Indextabellen
myisamchk -B -r *.MYI normales Recover der Daten- und Indextabellen (-B erstellt ggf. ein Backup des Files)
myisamchk -B -F *.MYI gekürtztes Recover der Daten- und Indextabellen Fast= checkt nur nicht richtig geschlossene Tabellen
myisamchk -B -o *.MYI Extended Recover der Daten- und Indextabellen
myisamchk -B -e *.MYI Extrem Extended Recover der Daten- und Indextabellen (nur verwenden wenn Sie verzweifelt sind)
myisamchk -B -f *.MYI Recover der Daten- und Indextabellen force
myisamchk -B -r -q *.MYI Recover der Indextabellen (quick)
myisamchk -a *.MYI Analyse der Datentabellen = update statistics
mysqlcheck
mysqlcheck [--all-databases] database [table] Tabellen sperren und checken
Replikation
mysql: reset master; Logstatus auf dem Master rücksetzen
mysql: show master logs; Logstatus auf dem Master anzeigen
mysql: purge master logs to "mysql_bin.001"; Logs auf dem Master kappen
mysql: show master status; Logstatus auf dem Slave anzeigen
mysql: show slave status; Logstatus auf dem Slave anzeigen
mysql: show slave hosts; Aktive Slaves auf dem Master anzeigen
mysql: load data from master Daten vom Master holen (initialisieren)
mysql: slave start/stop  Slave starten / stoppen
mysqladmin start-slave Slave starten
mysqladmin stop-slave Slave stoppen
myisampack
myisampack *MYI Tabellendaten komprimieren (read only setzen)
myisamchk -r -q *.MYI TabellenIndex komprimieren (wenn zuvor Daten komprimiert wurden)
myisamchk -u *.MYI Unpack der Datentabellen
Start Stop
/etc/init.d/mysql start MySQL regulär starten
/etc/init.d/mysql stop MySQL regulär stoppen
mysqld_safe & MySQL manuell starten
mysqld_safe --skip-grant-tables & MySQL manuell starten ohne Passwortdatei
mysqladmin -p -u root shutdown MySQL manuell stoppen
Installation
mysql_secure_installation Script zum Bereinigen der Berechtigungen
mysql_fix_privilege_tables Script zum Bereinigen der Berechtigungen nach einer Migration von MySQL 4 nach MySQL 5
Von "http://www.drap.homelinux.com/wiki/index.php/MySQL_Befehle"

###########################################################

MySQL-Replikation leicht gemacht
Von
localwurst
– 11. April 2009Eingestellt unter: GEHACKT
closeAchtung: dieser Blogeintrag wurde vor 2 Jahren, 7 Monaten und 6 Tagen veröffentlicht!
Beachtet das bitte dringend, vor allem im Falle konkreter Anleitungen.
Für etwaige Schäden kann keine Haftung übernommen werden!

Die Replikation der Datenbank kann eine feine Sache sein: zwei Datenbanken, idealerweise auf zwei verschiedenen Servern, identischer Datenbestand. Um es vorwegzunehmen: die Replikation ersetzt kein Backup! Sobald sich Daten auf dem Master ändern — beispielsweise durch ein versehentliches DROP TABLE — werden die Änderungen auf allen Slaves übernommen; und was weg ist, ist weg, da hilft nur ein Backup :D Geht es allerdings um Redundanz, um Ausfallsicherheit oder Lastverteilung, ist die Replikation eine elegante Wahl. Steigen wir also direkt ein und gehen davon aus, daß der Master-Server im weiteren Verlauf einfach master heißt, der Slave-Server schlicht und ergreifend slave, beide in der Domäne localdomain.
Master: neuer User

Auf dem Master muß ein neuer mysql-User angelegt werden, dem im folgenden Schritt die zur Replikation benötigten Rechte zugesprochen werden:

mysql> create user 'replication'@'slave.localdomain' identified by 'einPasswort';
mysql> GRANT REPLICATION SLAVE ON *.* to 'replication'@'slave.localdomain' identified by 'einPasswort';

Dieser Schritt ist für jeden Slave, den man hinzufügen möchte, zu wiederholen; wir gehen nachfolgend aber von einem Setup mit nur einem Slave aus.
Master: my.cnf anpassen

Die Konfiguration des Servers — /etc/mysql/my.cnf auf Debian-Systemen — muß im Hinblick auf die Replikation bearbeitet werden. Eingefügt werden müssen die nachfolgenden Zeilen — die Parameter sind selbsterklärend, für weitere Erklärungen verweise ich an dieser Stelle auf die READMEs :D

server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
log                     = /var/log/mysql/mysql.log

Danach einen Restart des mysqld initiieren.
Slave: my.cnf

Man sollte darauf achten, daß sich Master und Slave hinsichtlich der verwendeten MySQL-Versionen nicht allzusehr unterscheiden (sehr hilfreich ist in diesem Zusammenhang die Webseite Replication Compatibility Between MySQL Versions); im vorliegenden Beispiel wurden identische Systeme verwendet und auf beiden das identische MySQL-Paket installiert. Die Konfiguration des Slaves muß nun der des Masters angepaßt werden, insbesondere für den Fall, daß auf dem Master InnoDB verwendet wird.
Wichtig: die server-id muß eine noch nicht verwendete (beliebige, aber positive) ganze Zahl sein; dem Master die 1 zuzusprechend und den Wert für jeden Slave zu inkrementieren ist naheliegend.

server-id               = 2
log                     = /var/log/mysql/mysql.log

Master: Datensicherung erstellen

Auf dem Master erstellen wir nun eine Sicherung der Datenbankinhalte, die wir anschließend auf dem Slave einspielen; in dem Moment haben beide Maschinen einen identischen Datenbestand, auf dem dann zukünftig aufgebaut werden kann.

Um die Datensicherung auf dem Master zu erstellen, führen wir im ersten Schritt ein Flush auf die Tabellen aus (d.h. alle Caches werden geleert, also noch ausstehenden Daten werden in Binärdateien geschrieben) und sperren die Tabellen für weitere Schreibzugriffe (da MySQL schon während des Kopierens weitere Daten zwischenspeichern und damit den gewünschten Effekt zunichte machen würde). Das erreichen wir so:

mysql> FLUSH TABLES WITH READ LOCK;

Kein anderer Prozeß hat nunmehr Schreibzugriff auf die Tabellen — solange die Shell, in welcher der Befehl abgesetzt wurde, offenbleibt! Der Schreibschutz wird aufgehoben, wenn entweder die aufrufende Shell geschlossen oder aber das Kommando UNLOCK TABLES übergeben wird.

Dann schauen wir in der /etc/mysql/my.cnf, wie datadir definiert ist; im vorliegenden Falle ist das datadir = /data/mysql, und hier liegen alle Daten, die wir sichern müssen. Also:

$ cd /data/mysql
$ tar cvfj /tmp/mysql_snapshot.tbz .

Die resultierende Datei transportieren wir auf beliebigem Wege zum Slave, sichern sie aber auch für alle Fälle für später (wir würden sie beispielsweise benötigen, wenn wir einen dritten Slave aufsetzen wollen; dies soll aber nicht Bestand dieses Howtos sein). Den Schreibschutz der Tabellen heben wir nun wieder auf.

Hinweis: selbstredend kann das Backup auch über mysqldump erstellt und via mysql eingespielt werden; dieses Howto stützt sich jedoch auf die (hoffentlich nicht unbegründete) Annahme, daß vollständiger Shell-Zugriff zu den Systemen möglich ist. Welcher Weg im Endeffekt eingeschlagen wird, liegt im Ermessen des Admins: beide sind gleichwertig.
Slave: MySQL in Betrieb nehmen

Den MySQL-Server auf dem Slave hatten wir bislang nicht gestartet; dennoch überprüfen wir zur Sicherheit, daß er auch wirklich nicht läuft (sollte er es doch tun, muß er gestoppt werden!). Anschließend müssen wir das eben erstellte Backup einspielen; hierzu schauen wir auch auf dem Slave, wie datadir in /etc/mysql/my.cnf definiert ist — hier steht datadir = /var/lib/mysql. Also legen wir unser mysql_snapshot.tbz nach /var/lib/mysql und packen es dort aus:

$ tar cvfj mysql_snapshot.tbz

Anschließend den Server auf dem Slave starten, die Log-Files prüfen und eventuelle Fehler korrigieren. Läuft nun alles? Prima!
Master & Slave: Inbetriebnahme

Am besten öffnen wir uns nun zwei Shells parallel und loggen uns einerseits auf dem Master, andererseits auf dem Slave ein.
Auf dem Master loggen wir uns als User root in die MySQL-Shell ein und ermitteln das aktuelle Logfile:

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 |   505273 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Anschließend loggen wir uns, ebenfalls als User root, in die MySQL-Shell auf dem Slave ein und machen ihm deutlich, daß er zukünftig seine Daten vom Master beziehen wird. Und beachten: das root-Paßwort für MySQL ist auf dem Slave nun — nach unserem erfolgreichen Einspielen des Backups vom Master — natürlich auch das selbe wie auf dem Master! :D

mysql> CHANGE MASTER TO
-> MASTER_HOST='master.localdomain',
-> MASTER_USER='replication',
-> MASTER_PASSWORD='einPasswort',
-> MASTER_LOG_FILE='mysql-bin.000007';

Den finalen Startschuß geben wir dann auf dem Slave mit folgendem Befehl:

mysql> START SLAVE;

Wir haben auf beiden Maschinen das Logging nach /var/log/mysql/mysql.log aktiviert; so können wir nun, parallel in beiden Shells, ein tail -f /var/log/mysql/mysql.log auf beiden Maschinen ausführen und beobachten, was sich tut. Aus Performance-Gründen sollte das Logging für den Produktivbetrieb jedoch wieder deaktiviert werden (Zeile log = /var/log/mysql/mysql.log auskommentieren, /etc/init.d/mysqld reload).

Ein show processlist auf dem Slave kann im laufenden Betrieb dann wie folgt aussehen:

mysql> show processlist;
+------+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| Id   | User        | Host      | db   | Command | Time  | State                                                                 | Info             |
+------+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
|    7 | system user |           | NULL | Connect | 85194 | Waiting for master to send event                                      | NULL             |
|    8 | system user |           | NULL | Connect |  3740 | Has read all relay log; waiting for the slave I/O thread to update it | NULL             |
| 1147 | root        | www.jakl.ch | NULL | Query   |     0 | NULL                                                                  | show processlist |
+------+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
3 rows in set (0.03 sec)

Und auf dem Master kann das so aussehen (es werden alle momentan verbundenen Slaves angezeigt):

mysql> show processlist;
+------+-------------+---------------------------+--------+-------------+-------+----------------------------------------------------------------+------------------+
| Id   | User        | Host                      | db     | Command     | Time  | State                                                          | Info             |
+------+-------------+---------------------------+--------+-------------+-------+----------------------------------------------------------------+------------------+
| 1554 | replication | slave.localdomain:57823 | NULL   | Binlog Dump |   224 | Has sent all binlog to slave; waiting for binlog to be updated | NULL             |
| 1557 | root        | www.jakl.ch                 | NULL   | Query       |     0 | NULL                                                           | show processlist |
+------+-------------+---------------------------+--------+-------------+-------+----------------------------------------------------------------+------------------+
7 rows in set (0.01 sec)

Abschließend

Das war die gesamte Magie; der Master führt sozusagen Buch über alle erfolgten Transaktionen, speichert diese im Binlog und gibt sie an alle angeschlossenen Slaves weiter. Die Slaves ihrerseits werten ausschließlich Änderungen an den Datenbanken aus und stehen daher praktisch nicht unter Last. Einsatzszenarien sind nun verschiedene denkbar: beispielsweise könnte der Master die Datenverwaltung an sich und die Weitergabe der Daten an die Slaves verwalten, wohingegen rechenzeitintensive Queries (die den Datenbestand nicht verändern) auf den Slaves ausgeführt werden könnten. Auch läßt sich so ein Switch von datenbankgestützten Anwendungen realisieren… Die Einsatzmöglichkeiten sind vielfältig.

Vielleicht seid Ihr ja jetzt auf den Geschmack gekommen; viel Erfolg und viel Spaß :D

########################################################################

mysql> show grants for dbuser@www.jakl.ch;
+-----------------------------------------------------------------------------------------------------------------------+
| Grants for dbuser@www.jakl.ch                                                                                   |
+-----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dbuser'@'www.jakl.ch' IDENTIFIED BY PASSWORD '*B5196A4150CF9BCEE99BEE4BDE0390EAC2AC29A6' |
| GRANT ALL PRIVILEGES ON `database`.* TO 'dbuser'@'www.jakl.ch'                                      |
+-----------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.02 sec)

 

mysql>  revoke all privileges on  `database`.* from  'dbuser'@'www.jakl.ch'


mysql> show grants for dbuser@www.jakl.ch;
+-----------------------------------------------------------------------------------------------------------------------+
| Grants for dbuser@www.jakl.ch                                                                                   |
+-----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dbuser'@'www.jakl.ch' IDENTIFIED BY PASSWORD '*B5196A4150CF9BCEE99BEE4BDE0390EAC2AC29A6' |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>  grant SELECT, INSERT, UPDATE, DELETE on `database`.* to 'dbuser'@'www.jakl.ch';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges ;
Query OK, 0 rows affected (0.00 sec)

 

mysql> show grants for dbuser@www.jakl.ch;
+-----------------------------------------------------------------------------------------------------------------------+
| Grants for dbuser@www.jakl.ch                                                                                   |
+-----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dbuser'@'www.jakl.ch' IDENTIFIED BY PASSWORD '*B5196A4150irgendwas0390EAC2AC29A6' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `database`.* TO 'dbuser'@'www.jakl.ch'                      |
+-----------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)


###########################################
# manachmal gibt anonyme user :
SELECT Host, User FROM mysql.user WHERE User='';

# loeschen
DELETE FROM mysql.user WHERE Host='www.jakl.ch' AND User='';
FLUSH PRIVILEGES;

#################################################################################

# einzelne tabelle aus einem grossen sql-file auslesen zum restoren
# http://blog.tsheets.com/2008/tips-tricks/mysql-restoring-a-single-table-from-a-huge-mysqldump-file.html
#
awk '/Table structure for table `tbl_acc_poll_mtan`/,/Table structure for table `tbl_acc_poll_mtan_new`/{print}' user-201206250740.sql > restore_table.sql

##################################################################################

#######################################################
#
# das hier läuft in der chroot und fragt die mysql-db ab
# --> läuft auf sql0103
#######################################################


#!/bin/bash
#
# script to fetch some statistics and mail them to PM
# As it is in the chroot, a script outside will fetch_n_mail them. /root/scripts/sql_abfragen/fetch_n_mail.sh
#
# #
# 02.12.2011 - sja - first draft
# 10.01.2012 - sja - fix path on workdir
#

LOCAL_BACKUP_USER="ca_backup"
LOCAL_BACKUP_PASS="password"
DB=dbname
WORKDIR="/root/scripts/sql_abfragen"
MAILFILE="$WORKDIR/mailfile"

if [ -f $MAILFILE ] ;then
        rm $MAILFILE
fi

echo "***************************">>$MAILFILE
echo "** Summary from `date`     ">> $MAILFILE
echo "***************************">>$MAILFILE
echo "" >> $MAILFILE
mysql -u $LOCAL_BACKUP_USER --password=$LOCAL_BACKUP_PASS $DB -sN < $WORKDIR/sql1.sql >> $MAILFILE

echo "" >> $MAILFILE
echo "***************************">>$MAILFILE

echo "" >> $MAILFILE
mysql -u $LOCAL_BACKUP_USER --password=$LOCAL_BACKUP_PASS $DB -sN <$WORKDIR/sql2.sql >> $MAILFILE

echo "" >> $MAILFILE

echo "***************************">>$MAILFILE


#######################################################
#
# das hier läuft ausserhalb der chroot und holt das zeuch ab und mailt es :
#
#######################################################
#!/bin/bash
#
# fetch output and mail them
# This will run outside chroot-db but fetches an output from inside the chroot-db
#
#
#
# 02.12.2011 - sja - first draft


SUBJECT="Auswertung Certs from `date`"
MAILTOADMIN="admin@www.jakl.ch"
MAILFILE="/var/db/root/scripts/sql_abfragen/mailfile"
MAILTO="user1@www.jakl.ch user2@www.jakl.ch"


# short check if we are responsable :
if (! mount |grep /var/db ) ; then
exit 0
fi

if  [ -s ${MAILFILE} ]
then
cat <<EOF|mailx -s "${SUBJECT}" ${MAILTO}
`cat ${MAILFILE}`
EOF


else

        echo "Check Manually !!!" |mailx -s "Auswertung fehlgeschlagen auf `uname -n`" ${MAILTOADMIN}
fi

exit 0

#######################################################
#
# Das hier ist der sql-command
#
#######################################################

select count(*),<TABELLE> from Certificates where status in ('expired', 'valid') and <TABELLE> in ('irgendwas') and valid_not_before < '20111101' and valid_not_after > '20111101' group by <TABELLE>;


#######################################################
#
# das 2-te enhancement mit mail als attachement
# und alles in einem File --> dazu kommt noch dass ich im
# lokalen workdir ein uuencode installiert (platziert) hab
# sonst geht das mit dem attachen nicht
#  --> läuft auf web01
#######################################################
#!/bin/bash
#
# script to fetch some statistics and mail them to PM
# As it is in the chroot, a script outside will fetch_n_mail them. /root/scripts/sql_abfragen/fetch_n_mail.sh
#
#
#
# 02.12.2011 - sja - first draft
# 05.12.2011 - sja - adjust
#
LOCAL_BACKUP_USER="root"
LOCAL_BACKUP_PASS="dbpw"
DB=dbname
WORKDIR="/root/scripts/sql_abfragen"
MAILFILE=$WORKDIR/db_output.csv
SUBJECT="Auswertung from `date`"
MAILTOADMIN="admin@www.jakl.ch"
MAILTO="user1@www.jakl.ch"

create_mailfile() {
if [ -f $MAILFILE ] ;then
        rm $MAILFILE
fi

mysql -u $LOCAL_BACKUP_USER --password=$LOCAL_BACKUP_PASS $DB < ${WORKDIR}/sql1.sql

#
# see file-dest in sql1.sql -> no w access in this foldere here.
#
mv /tmp/db_output.csv ${MAILFILE}

}

#
# the requsted xml-output is far too big to mail
# --> zip them
#
create_zip() {
cd /${WORKDIR}
/usr/bin/zip -9 sqloutput.zip db_output.csv
}

#
# Now send the output to the responsable employee
#
mailto(){

if  [ -s ${MAILFILE} ]
then
${WORKDIR}/uuencode ${WORKDIR}/sqloutput.zip ${WORKDIR}/sqloutput.zip |mailx -s "${SUBJECT}" ${MAILTO}

else

        echo "Check Manually !!!" |mailx -s "Auswertung fehlgeschlagen auf `uname -n`" ${MAILTOADMIN}
fi
}

create_mailfile
create_zip
mailto

exit 0


#######################################################
#
#######################################################