/usr/bin/mysqldump --defaults-extra-file=/etc/mysql/debian.cnf -AxicKe -h 127.0.0.1 -P 3306 > /var/mysqlbackup/3306.sql
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
Was muss man wissen:
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 > ...
# 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