====== Administration ====== ===== Datenbnaken sichern ===== /usr/bin/mysqldump --defaults-extra-file=/etc/mysql/debian.cnf -AxicKe -h 127.0.0.1 -P 3306 > /var/mysqlbackup/3306.sql ===== Datenbnaken sichern (ohne MYSQL + SCHEMA) ===== DATABASES=$(mysql --defaults-extra-file=/etc/mysql/debian.cnf -h 127.0.0.1 -P 3306 -NBe 'show schemas' | grep -wv 'mysql\|information_schema') /usr/bin/mysqldump --defaults-extra-file=/etc/mysql/debian.cnf -xicKe -h 127.0.0.1 -P 3306 --databases $DATABASES > /var/mysqlbackup/3306.sql /usr/bin/mysqldump --defaults-extra-file=/etc/mysql/debian.cnf -xicKe -h 127.0.0.1 -P 3306 --databases mysql > /var/mysqlbackup/3306_mysql.sql ===== Neue Datenbankinstanz anlegen (Debian etch)===== Was muss man wissen: - Wo sind die **bin**`s (// bei mir unter /usr //) - Unter welchem Benutzer soll alles laufen (// bei mir unter **mysql** //) - Wo soll der Datenmüll abgelegt werden (// bei mir unter **/var/lib/mysql_ea** //) Und schon kann es losgehen. Schauen wir uns mal den Befehl **mysql_install_db** an. Mit diesem kann man eine neue saubere Instanz vom MySql anlegen. Und zwar mit folgendem Aufruf: # mysql_install_db --basedir=/usr --datadir=/var/lib/mysql_ea --user=mysql Installing MySQL system tables... OK Filling help tables... OK To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h debian password 'new-password' Alternatively you can run: /usr/bin/mysql_secure_installation which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production servers. See the manual for more instructions. You can start the MySQL daemon with: cd /usr ; /usr/bin/mysqld_safe & You can test the MySQL daemon with mysql-test-run.pl cd /usr/mysql-test ; perl mysql-test-run.pl Please report any problems with the /usr/scripts/mysqlbug script! Jetzt haben wir eine neue Instanz. Wir wurden auch darauf hingewiesen, dass wir ein Passwort setzen sollen - und was wir machen müssen, damit diese Instanz beim Starten des System mit anläuft. Schaue wir doch aber erst einmal, was uns das gebracht hat. # cd /var/lib/mysql_ea/ # ls -ali 6423260 drwx------ 2 mysql root 4096 27. Nov 17:50 mysql Perfekt! Die Mysql-Datenbak wurde angelegt. Nun starten wir diese Instanz, um gleich mal das Passwort zu setzen.\\ :!: Ich bevorzuge diesen Weg. Aber ihr könnt natürlich auch den **mysqladmin**-Befehl nehmen.:!:\\ Um mal einen Überlick über die Parameter von **mysqld** zu bekommen... (ich erspare mir hier alles abzudrucken... ich werde nur die wichtigsten zum Starten der Instanz aufzeigen). # mysqld --verbose --help |basedir|**bin**`s| |socket|Socketdatei, diese nehme ich auch gleich zum Verbinden mit der Instanz| |datadir|Datenmüll ;)| |port|Naja, noch ein Port angeben, wenn ihr schon eine Defaultinstanz auf 3306 laufen habt. Sonst...\\[ERROR] Can't start server: Bind on TCP/IP port: Address already in use,\\[ERROR] Do you already have another mysqld server running on port: 3306 ?,\\[ERROR] Aborting| # mysqld --basedir=/usr --datadir=/var/lib/mysql_ea --socket=/var/run/mysqld/mysql_ea.sock --port=3310 --bind-address=192.168.10.40 --skip-grant-tables & 161127 19:10:28 InnoDB: Started; log sequence number 0 44233 161127 19:10:28 [Note] mysqld: ready for connections. Version: '5.1.49-3~bpo50+1' socket: '/var/run/mysqld/mysql_ea.sock' port: 3310 (Debian) Super! Die Instanz läuft. Vergesst bitte das **&** nicht. Wenn der Prozess gestartet wird, kommt ihr aus diesem sonst nicht mehr heraus. Ihr müsst ihn dann von einer anderen Shell aus steuern.\\ \\ Alternativ, wenn **&** vergessen wurde **[STRG]** + **[z]** und dann **bg** (Erst Prozess anhalten, dann in den Hintergrund schieben)\\ Nun setzen wir noch ein Passwort: # mysql -S /var/run/mysqld/mysql_ea.sock > use mysql; > UPDATE `user` SET `Password`=PASSWORD('neues_passwort') WHERE `User` = 'root'; > flush privileges; > quit So, nun noch schnell den alten mysql Prozess abschießen **ps ax|grep mysql**, und **kill -9 xxxxx**\\ Und jetzt die Instanz ohne **skip-grant-tables** starten. Jetzt sollte man für **root** das eben gesetzte Passwort eingeben. # mysqld --basedir=/usr --datadir=/var/lib/mysql_ea --socket=/var/run/mysqld/mysql_ea.sock --port=3310 --bind-address=192.168.10.40 & 161127 19:22:03 [Note] Plugin 'FEDERATED' is disabled. 161127 19:22:03 InnoDB: Started; log sequence number 0 44233 161127 19:22:03 [Note] Event Scheduler: Loaded 0 events 161127 19:22:03 [Note] mysqld: ready for connections. Version: '5.1.49-3~bpo50+1' socket: '/var/run/mysqld/mysql_ea.sock' port: 3310 (Debian) # mysql -S /var/run/mysqld/mysql_ea.sock -p > neues_passwort > ... ===== Datenbank START/STOP ===== # vi /etc/init.d/mysql_ea #!/bin/sh ### BEGIN INIT INFO # Provides: Mysql_Enterprise_Architect # Required-Start: $local_fs $network $named $time $syslog # Required-Stop: $local_fs $network $named $time $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Description: Mysql Enterprise Architect ### END INIT INFO SCRIPT=mysqld_safe BASEDIR=/usr DATADIR=/var/lib/mysql_ea SOCKET=/var/run/mysqld/mysql_ea.sock PORT=3310 BINDADDRESS="0.0.0.0" PIDFILE=/var/run/mysqld/mysql_ea.pid LOGFILE=/var/log/mysql_ea.log ADMINFILE=/etc/mysql/debian_ea.cnf PIDNUMBER=0 start() { if [ -f "$PIDFILE" ]; then PIDNUMBER=$(cat "$PIDFILE") if kill -0 $PIDNUMBER ; then echo "Process is running under: $PIDNUMBER" return 1 fi fi mysqld_safe --basedir=$BASEDIR --datadir=$DATADIR --socket=$SOCKET --port=$PORT --bind-address=$BINDADDRESS --log-error=$LOGFILE --pid-file=$PIDFILE >/dev/null 2>&1 & } stop() { echo "shutdown process is running ...." if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then echo "Processis not running" return 1 fi mysqladmin --defaults-file=$ADMINFILE shutdown echo "shutdown process completed" } case "$1" in start) start ;; stop) stop ;; retart) stop start ;; *) echo "Usage: $0 {start|stop|restart}" esac Nun noch das Konfigurationsfile, was von **mysqladmin** genutzt wird, anlegen.\\ Vergesst bitte nicht, die Rechte dieser Datei anzupassen. **500** sollte ausreichen.\\ Alternativ, um noch mehr Sicherheit zu gewährleisten, könnt ihr einen neuen Benutzer in dieser Instanz anlegen, der eben nur die administrativen Reche besitzt, die DB herunterzufahren (**shutdwon**). # vi /etc/mysql/debian_ea.cnf Hier wird das Passwort und der Benutzer hinterlegt, der dann Zugriff auf die Datenbankinstanz hat, um diese herunterzufahren. [client] user = root password = neues_passwort socket = /var/run/mysqld/mysql_ea.sock [mysql_upgrade] user = root password = neues_passwort socket = /var/run/mysqld/mysql_ea.sock basedir = /usr