You are here
Oli Sennhauser
![Subscribe to Oli Sennhauser flux](https://fromdual.ch/misc/feed.png)
Automatitisiertes Starten und Stoppen der Canias ERP Applikation
Beim Betrieb der Canias ERP Applikation stösst man unweigerlich früher oder später auf das lästige Verhalten, dass eine Konsole mit der Canias RMI Registry Applikation offen gehalten werden muss.
Eine offene Konsole kann dazu führen, dass aus Versehen die Applikation gestoppt wird und somit die ganze Produktion, welche am ERP hängt, still steht.
Ein weiteres Problem besteht darin, dass der Canias Server mit seinen Komponenten (RMI-Registry, Lizenz- und Applikations-Server) nicht als Dienst gestartet werden kann.
Das hat zur Folge, dass keine Standard Monitoring Lösung für die Canias-Überwachung genutzt werden kann.
Um dieses Problem zu umgehen haben wir für die Canias ERP Applikation ein start/stop Skript unter CentOS gebaut, welches alle Canias Komponenten steuert. Dieses Skript sollte mit minimalen Änderungen auch auf anderen Linux Distributionen lauffähig sein.
Mit diesem Skript lässt sich nun die Canias RMI-Registry, der Canias Controler sowie der Canias Server automatisiert beim Systemstart über den init-Prozess starten und wieder stoppen ohne, dass eine lästige Konsole offen bleiben muss.
Somit kann eine hohe Verfügbarkeit der Canias Applikation beim System-Neustart gewährleistet werden.
Zudem lässt sich dieses Skript als Ressource in einen aktiv/passiv Failover Cluster mit einbauen und im Fehlerfall automatisch mit auf den anderen Node rüberschwenken, wo die ERP Applikation innert weniger Minuten wieder zur Verfügung steht.
Wir konnten trotzt ausführlicher Tests keine Probleme mit dieser Konfiguration feststellen und wundern uns daher, dass dieses Verfahren nicht bereits durch den Hersteller Canias eingesetzt wird.
Durch leichtes Abändern des Skripts kann sogar ein Icon auf dem Desktop angelegt werden, welches durch Klicken den ganzen Canias Stack neu startet.
Bei Fragen zur Installation oder zum Betrieb von Canias ERP sowie des zugrunde liegenden MySQL Datenbank helfen wir gerne weiter.
#!/bin/sh # # /etc/init.d/canias {start|stop|reload|restart|status} # # canias: Start and Stop Canias ERP System # # chkconfig: is manged by Cluster suite # # Source function library. if [ -f /etc/init.d/functions ] ; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions else exit 1 fi appdir="/canias/iasAppServer" logdir="$appdir/Log" start() { echo -n "Starting Canias RMI Registry: " runuser -l canias -c "cd $appdir && nohup /usr/lib/jvm/jre-1.6.0/bin/java -jar serverUtils.jar \ start_ias_rmi_registry debug 1>$logdir/start_rmi_registry.log 2>&1 &" echo sleep 2 echo -n "Starting Canias Controller: " export DISPLAY=$(hostname):1 runuser -l canias -c "cd $appdir && nohup /canias/java/j2re1.4.2_18/bin/java -classpath controller.jar \ -Djava.security.policy=canias.policy -Djava.library.path=. com.ias.starter.iasControllerStarter /Port:USB \ 1>$logdir/start_controller.log 2>&1 &" echo sleep 2 echo -n "Starting Canias Server: " export DISPLAY=$(hostname):1 runuser -l canias -c "cd $appdir && nohup /usr/lib/jvm/jre-1.6.0/bin/java -Xmx4g \ -Djava.security.policy=canias.policy -cp server.jar:./RESOURCES/lib/activation.jar:./RESOURCES/lib/axis.jar:\ ./RESOURCES/lib/commons-discovery.jar:./RESOURCES/lib/commons-fileupload-1.1.1.jar:./RESOURCES/lib/commons-io-1.2.jar:\ ./RESOURCES/lib/commons-logging.jar:./RESOURCES/lib/FontBox-0.1.0-dev.jar:./RESOURCES/lib/iascommapi.jar:\ ./RESOURCES/lib/itext-paulo-155.jar:./RESOURCES/lib/jai_codec.jar:./RESOURCES/lib/jai_core.jar:\ ./RESOURCES/lib/jaxrpc.jar:./RESOURCES/lib/jcchart451K.jar:./RESOURCES/lib/jcert.jar:./RESOURCES/lib/jcfield451K.jar:\ ./RESOURCES/lib/jctable451K.jar:./RESOURCES/lib/jdbc2_0-stdext.jar:./RESOURCES/lib/jnet.jar:./RESOURCES/lib/jradius-client.jar:\ ./RESOURCES/lib/jsse.jar:./RESOURCES/lib/mail_v1.4.jar:./RESOURCES/lib/mlibwrapper_jai.jar:./RESOURCES/lib/NSClient_comp_1.4.jar:\ ./RESOURCES/lib/PDFBox-0.7.3-dev-20060516.jar:./RESOURCES/lib/RetepPDF.jar:./RESOURCES/lib/saaj.jar:./RESOURCES/lib/servlet.jar:\ ./RESOURCES/lib/smlib.jar:./RESOURCES/lib/soap.jar:./RESOURCES/lib/uddi4j.jar:./RESOURCES/lib/wsdl4j.jar:\ ./RESOURCES/lib/xerces.jar:./RESOURCES/lib/xml4j.jar:./RESOURCES/lib/JDBCDrivers com.ias.starter.iasServerStarter \ /settings:ServerSettings.ias 1>$logdir/start_server.log 2>&1 &" echo } stop() { echo -n "Shutting down all Canias related Java processes: " # kill processes in reverse order plist=$(pgrep -u canias java | sort -n -r) for i in $plist ; do kill $i done echo } status() { cnt=$(pgrep -u canias java | wc -l) if [[ $cnt -gt 0 ]] ; then echo "$cnt java processes for user canias are running..." exit 0 else echo "Canias seems to be stopped" exit 1 fi } case "$1" in start) start ;; stop) stop ;; restart|reload) stop sleep 5 start ;; status) status ;; *) echo "Usage: $0 {start|stop|restart|reload|status}" exit 1 esac # Always return 0 because we do not want to have a cluster starting # failure just because of Canias! exit 0 Über acar software GmbHAcar software GmbH ist ein IT-Systemhaus, welches sich im ERP Bereich spezialisiert und weitreichendes Know-How in komplexen Geschäftsprozessen angeeignet hat.
Wir sorgen dafür, dass der Kunde seine komplexen Prozesse mit unserer Software transparent und leicht abwickeln kann, ohne einen grossen Overhead zu erzeugen.
Mehr Infos zur acar software GmbH finden Sie unter: www.acarsoftware.de
FromDual GmbH ist ein Hersteller unabhängiges und neutrales Beratungs- und Dienstleistungs-Unternehmen für MySQL, Percona Server und MariaDB.
Wir unterstützen unsere Kunden bei der Wartung und dem Betrieb von MySQL Datenbanken. Zudem machen wir auch MySQL Performance Tuning und helfen unseren Kunden MySQL Hochverfügbarkeits-Lösung zu implementieren, für welche wir auf Wunsch auch MySQL Support anbieten.
Mehr Infos zur FromDual GmbH finden Sie unter: www.fromdual.com
Automatitisiertes Starten und Stoppen der Canias ERP Applikation
Beim Betrieb der Canias ERP Applikation stösst man unweigerlich früher oder später auf das lästige Verhalten, dass eine Konsole mit der Canias RMI Registry Applikation offen gehalten werden muss.
Eine offene Konsole kann dazu führen, dass aus Versehen die Applikation gestoppt wird und somit die ganze Produktion, welche am ERP hängt, still steht.
Ein weiteres Problem besteht darin, dass der Canias Server mit seinen Komponenten (RMI-Registry, Lizenz- und Applikations-Server) nicht als Dienst gestartet werden kann.
Das hat zur Folge, dass keine Standard Monitoring Lösung für die Canias-Überwachung genutzt werden kann.
Um dieses Problem zu umgehen haben wir für die Canias ERP Applikation ein start/stop Skript unter CentOS gebaut, welches alle Canias Komponenten steuert. Dieses Skript sollte mit minimalen Änderungen auch auf anderen Linux Distributionen lauffähig sein.
Mit diesem Skript lässt sich nun die Canias RMI-Registry, der Canias Controler sowie der Canias Server automatisiert beim Systemstart über den init-Prozess starten und wieder stoppen ohne, dass eine lästige Konsole offen bleiben muss.
Somit kann eine hohe Verfügbarkeit der Canias Applikation beim System-Neustart gewährleistet werden.
Zudem lässt sich dieses Skript als Ressource in einen aktiv/passiv Failover Cluster mit einbauen und im Fehlerfall automatisch mit auf den anderen Node rüberschwenken, wo die ERP Applikation innert weniger Minuten wieder zur Verfügung steht.
Wir konnten trotzt ausführlicher Tests keine Probleme mit dieser Konfiguration feststellen und wundern uns daher, dass dieses Verfahren nicht bereits durch den Hersteller Canias eingesetzt wird.
Durch leichtes Abändern des Skripts kann sogar ein Icon auf dem Desktop angelegt werden, welches durch Klicken den ganzen Canias Stack neu startet.
Bei Fragen zur Installation oder zum Betrieb von Canias ERP sowie des zugrunde liegenden MySQL Datenbank helfen wir gerne weiter.
#!/bin/sh # # /etc/init.d/canias {start|stop|reload|restart|status} # # canias: Start and Stop Canias ERP System # # chkconfig: is manged by Cluster suite # # Source function library. if [ -f /etc/init.d/functions ] ; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions else exit 1 fi appdir="/canias/iasAppServer" logdir="$appdir/Log" start() { echo -n "Starting Canias RMI Registry: " runuser -l canias -c "cd $appdir && nohup /usr/lib/jvm/jre-1.6.0/bin/java -jar serverUtils.jar \ start_ias_rmi_registry debug 1>$logdir/start_rmi_registry.log 2>&1 &" echo sleep 2 echo -n "Starting Canias Controller: " export DISPLAY=$(hostname):1 runuser -l canias -c "cd $appdir && nohup /canias/java/j2re1.4.2_18/bin/java -classpath controller.jar \ -Djava.security.policy=canias.policy -Djava.library.path=. com.ias.starter.iasControllerStarter /Port:USB \ 1>$logdir/start_controller.log 2>&1 &" echo sleep 2 echo -n "Starting Canias Server: " export DISPLAY=$(hostname):1 runuser -l canias -c "cd $appdir && nohup /usr/lib/jvm/jre-1.6.0/bin/java -Xmx4g \ -Djava.security.policy=canias.policy -cp server.jar:./RESOURCES/lib/activation.jar:./RESOURCES/lib/axis.jar:\ ./RESOURCES/lib/commons-discovery.jar:./RESOURCES/lib/commons-fileupload-1.1.1.jar:./RESOURCES/lib/commons-io-1.2.jar:\ ./RESOURCES/lib/commons-logging.jar:./RESOURCES/lib/FontBox-0.1.0-dev.jar:./RESOURCES/lib/iascommapi.jar:\ ./RESOURCES/lib/itext-paulo-155.jar:./RESOURCES/lib/jai_codec.jar:./RESOURCES/lib/jai_core.jar:\ ./RESOURCES/lib/jaxrpc.jar:./RESOURCES/lib/jcchart451K.jar:./RESOURCES/lib/jcert.jar:./RESOURCES/lib/jcfield451K.jar:\ ./RESOURCES/lib/jctable451K.jar:./RESOURCES/lib/jdbc2_0-stdext.jar:./RESOURCES/lib/jnet.jar:./RESOURCES/lib/jradius-client.jar:\ ./RESOURCES/lib/jsse.jar:./RESOURCES/lib/mail_v1.4.jar:./RESOURCES/lib/mlibwrapper_jai.jar:./RESOURCES/lib/NSClient_comp_1.4.jar:\ ./RESOURCES/lib/PDFBox-0.7.3-dev-20060516.jar:./RESOURCES/lib/RetepPDF.jar:./RESOURCES/lib/saaj.jar:./RESOURCES/lib/servlet.jar:\ ./RESOURCES/lib/smlib.jar:./RESOURCES/lib/soap.jar:./RESOURCES/lib/uddi4j.jar:./RESOURCES/lib/wsdl4j.jar:\ ./RESOURCES/lib/xerces.jar:./RESOURCES/lib/xml4j.jar:./RESOURCES/lib/JDBCDrivers com.ias.starter.iasServerStarter \ /settings:ServerSettings.ias 1>$logdir/start_server.log 2>&1 &" echo } stop() { echo -n "Shutting down all Canias related Java processes: " # kill processes in reverse order plist=$(pgrep -u canias java | sort -n -r) for i in $plist ; do kill $i done echo } status() { cnt=$(pgrep -u canias java | wc -l) if [[ $cnt -gt 0 ]] ; then echo "$cnt java processes for user canias are running..." exit 0 else echo "Canias seems to be stopped" exit 1 fi } case "$1" in start) start ;; stop) stop ;; restart|reload) stop sleep 5 start ;; status) status ;; *) echo "Usage: $0 {start|stop|restart|reload|status}" exit 1 esac # Always return 0 because we do not want to have a cluster starting # failure just because of Canias! exit 0 Über acar software GmbHAcar software GmbH ist ein IT-Systemhaus, welches sich im ERP Bereich spezialisiert und weitreichendes Know-How in komplexen Geschäftsprozessen angeeignet hat.
Wir sorgen dafür, dass der Kunde seine komplexen Prozesse mit unserer Software transparent und leicht abwickeln kann, ohne einen grossen Overhead zu erzeugen.
Mehr Infos zur acar software GmbH finden Sie unter: www.acarsoftware.de
FromDual GmbH ist ein Hersteller unabhängiges und neutrales Beratungs- und Dienstleistungs-Unternehmen für MySQL, Percona Server und MariaDB.
Wir unterstützen unsere Kunden bei der Wartung und dem Betrieb von MySQL Datenbanken. Zudem machen wir auch MySQL Performance Tuning und helfen unseren Kunden MySQL Hochverfügbarkeits-Lösung zu implementieren, für welche wir auf Wunsch auch MySQL Support anbieten.
Mehr Infos zur FromDual GmbH finden Sie unter: www.fromdual.com
Automatitisiertes Starten und Stoppen der Canias ERP Applikation
Beim Betrieb der Canias ERP Applikation stösst man unweigerlich früher oder später auf das lästige Verhalten, dass eine Konsole mit der Canias RMI Registry Applikation offen gehalten werden muss.
Eine offene Konsole kann dazu führen, dass aus Versehen die Applikation gestoppt wird und somit die ganze Produktion, welche am ERP hängt, still steht.
Ein weiteres Problem besteht darin, dass der Canias Server mit seinen Komponenten (RMI-Registry, Lizenz- und Applikations-Server) nicht als Dienst gestartet werden kann.
Das hat zur Folge, dass keine Standard Monitoring Lösung für die Canias-Überwachung genutzt werden kann.
Um dieses Problem zu umgehen haben wir für die Canias ERP Applikation ein start/stop Skript unter CentOS gebaut, welches alle Canias Komponenten steuert. Dieses Skript sollte mit minimalen Änderungen auch auf anderen Linux Distributionen lauffähig sein.
Mit diesem Skript lässt sich nun die Canias RMI-Registry, der Canias Controler sowie der Canias Server automatisiert beim Systemstart über den init-Prozess starten und wieder stoppen ohne, dass eine lästige Konsole offen bleiben muss.
Somit kann eine hohe Verfügbarkeit der Canias Applikation beim System-Neustart gewährleistet werden.
Zudem lässt sich dieses Skript als Ressource in einen aktiv/passiv Failover Cluster mit einbauen und im Fehlerfall automatisch mit auf den anderen Node rüberschwenken, wo die ERP Applikation innert weniger Minuten wieder zur Verfügung steht.
Wir konnten trotzt ausführlicher Tests keine Probleme mit dieser Konfiguration feststellen und wundern uns daher, dass dieses Verfahren nicht bereits durch den Hersteller Canias eingesetzt wird.
Durch leichtes Abändern des Skripts kann sogar ein Icon auf dem Desktop angelegt werden, welches durch Klicken den ganzen Canias Stack neu startet.
Bei Fragen zur Installation oder zum Betrieb von Canias ERP sowie des zugrunde liegenden MySQL Datenbank helfen wir gerne weiter.
#!/bin/sh # # /etc/init.d/canias {start|stop|reload|restart|status} # # canias: Start and Stop Canias ERP System # # chkconfig: is manged by Cluster suite # # Source function library. if [ -f /etc/init.d/functions ] ; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions else exit 1 fi appdir="/canias/iasAppServer" logdir="$appdir/Log" start() { echo -n "Starting Canias RMI Registry: " runuser -l canias -c "cd $appdir && nohup /usr/lib/jvm/jre-1.6.0/bin/java -jar serverUtils.jar \ start_ias_rmi_registry debug 1>$logdir/start_rmi_registry.log 2>&1 &" echo sleep 2 echo -n "Starting Canias Controller: " export DISPLAY=$(hostname):1 runuser -l canias -c "cd $appdir && nohup /canias/java/j2re1.4.2_18/bin/java -classpath controller.jar \ -Djava.security.policy=canias.policy -Djava.library.path=. com.ias.starter.iasControllerStarter /Port:USB \ 1>$logdir/start_controller.log 2>&1 &" echo sleep 2 echo -n "Starting Canias Server: " export DISPLAY=$(hostname):1 runuser -l canias -c "cd $appdir && nohup /usr/lib/jvm/jre-1.6.0/bin/java -Xmx4g \ -Djava.security.policy=canias.policy -cp server.jar:./RESOURCES/lib/activation.jar:./RESOURCES/lib/axis.jar:\ ./RESOURCES/lib/commons-discovery.jar:./RESOURCES/lib/commons-fileupload-1.1.1.jar:./RESOURCES/lib/commons-io-1.2.jar:\ ./RESOURCES/lib/commons-logging.jar:./RESOURCES/lib/FontBox-0.1.0-dev.jar:./RESOURCES/lib/iascommapi.jar:\ ./RESOURCES/lib/itext-paulo-155.jar:./RESOURCES/lib/jai_codec.jar:./RESOURCES/lib/jai_core.jar:\ ./RESOURCES/lib/jaxrpc.jar:./RESOURCES/lib/jcchart451K.jar:./RESOURCES/lib/jcert.jar:./RESOURCES/lib/jcfield451K.jar:\ ./RESOURCES/lib/jctable451K.jar:./RESOURCES/lib/jdbc2_0-stdext.jar:./RESOURCES/lib/jnet.jar:./RESOURCES/lib/jradius-client.jar:\ ./RESOURCES/lib/jsse.jar:./RESOURCES/lib/mail_v1.4.jar:./RESOURCES/lib/mlibwrapper_jai.jar:./RESOURCES/lib/NSClient_comp_1.4.jar:\ ./RESOURCES/lib/PDFBox-0.7.3-dev-20060516.jar:./RESOURCES/lib/RetepPDF.jar:./RESOURCES/lib/saaj.jar:./RESOURCES/lib/servlet.jar:\ ./RESOURCES/lib/smlib.jar:./RESOURCES/lib/soap.jar:./RESOURCES/lib/uddi4j.jar:./RESOURCES/lib/wsdl4j.jar:\ ./RESOURCES/lib/xerces.jar:./RESOURCES/lib/xml4j.jar:./RESOURCES/lib/JDBCDrivers com.ias.starter.iasServerStarter \ /settings:ServerSettings.ias 1>$logdir/start_server.log 2>&1 &" echo } stop() { echo -n "Shutting down all Canias related Java processes: " # kill processes in reverse order plist=$(pgrep -u canias java | sort -n -r) for i in $plist ; do kill $i done echo } status() { cnt=$(pgrep -u canias java | wc -l) if [[ $cnt -gt 0 ]] ; then echo "$cnt java processes for user canias are running..." exit 0 else echo "Canias seems to be stopped" exit 1 fi } case "$1" in start) start ;; stop) stop ;; restart|reload) stop sleep 5 start ;; status) status ;; *) echo "Usage: $0 {start|stop|restart|reload|status}" exit 1 esac # Always return 0 because we do not want to have a cluster starting # failure just because of Canias! exit 0 Über acar software GmbHAcar software GmbH ist ein IT-Systemhaus, welches sich im ERP Bereich spezialisiert und weitreichendes Know-How in komplexen Geschäftsprozessen angeeignet hat.
Wir sorgen dafür, dass der Kunde seine komplexen Prozesse mit unserer Software transparent und leicht abwickeln kann, ohne einen grossen Overhead zu erzeugen.
Mehr Infos zur acar software GmbH finden Sie unter: www.acarsoftware.de
FromDual GmbH ist ein Hersteller unabhängiges und neutrales Beratungs- und Dienstleistungs-Unternehmen für MySQL, Percona Server und MariaDB.
Wir unterstützen unsere Kunden bei der Wartung und dem Betrieb von MySQL Datenbanken. Zudem machen wir auch MySQL Performance Tuning und helfen unseren Kunden MySQL Hochverfügbarkeits-Lösung zu implementieren, für welche wir auf Wunsch auch MySQL Support anbieten.
Mehr Infos zur FromDual GmbH finden Sie unter: www.fromdual.com
ER-Diagramm des InnoDB Data Dictionaries
Mit dem neuen MySQL Release 5.6 sind einige neue InnoDB Data Dictionary Tabellen zum INFORMATION_SCHEMA hinzu gekommen:
Neu in MySQL 5.5 sind:
INNODB_CMPINNODB_CMP_RESETINNODB_CMPMEMINNODB_CMPMEM_RESETINNODB_TRXINNODB_LOCK_WAITSINNODB_LOCKSNeu in MySQL 5.6 sind:
INNODB_BUFFER_PAGEINNODB_BUFFER_PAGE_LRUINNODB_BUFFER_POOL_STATSINNODB_METRICSINNODB_SYS_COLUMNSINNODB_SYS_FIELDSINNODB_SYS_FOREIGNINNODB_SYS_FOREIGN_COLSINNODB_SYS_INDEXESINNODB_SYS_TABLESINNODB_SYS_TABLESTATSDie INNODB_SYS Tabellen waren bereits früher vorhanden, aber nicht über SQL zugreifbar. Man konnte Sie sehen, indem man den InnoDB Table Monitor eingeschaltet hat.
Um eine grobe Übersicht zu erhalten, welchen Bezug diese Tabellen zueinander haben, haben wir das ER-Diagramm des InnoDB Data Dictionaries reverse engineered. Bitte teilt uns mit, wenn Ihr einen Fehler findet oder wenn etwas fehlt...
Viel Spass!
Oli
innodb_dd.pdf (PDF: 93k)
Taxonomy upgrade extras: innodbdata dictionaryer-diagramgermanER-Diagramm des InnoDB Data Dictionaries
Mit dem neuen MySQL Release 5.6 sind einige neue InnoDB Data Dictionary Tabellen zum INFORMATION_SCHEMA hinzu gekommen:
Neu in MySQL 5.5 sind:
INNODB_CMPINNODB_CMP_RESETINNODB_CMPMEMINNODB_CMPMEM_RESETINNODB_TRXINNODB_LOCK_WAITSINNODB_LOCKSNeu in MySQL 5.6 sind:
INNODB_BUFFER_PAGEINNODB_BUFFER_PAGE_LRUINNODB_BUFFER_POOL_STATSINNODB_METRICSINNODB_SYS_COLUMNSINNODB_SYS_FIELDSINNODB_SYS_FOREIGNINNODB_SYS_FOREIGN_COLSINNODB_SYS_INDEXESINNODB_SYS_TABLESINNODB_SYS_TABLESTATSDie INNODB_SYS Tabellen waren bereits früher vorhanden, aber nicht über SQL zugreifbar. Man konnte Sie sehen, indem man den InnoDB Table Monitor eingeschaltet hat.
Um eine grobe Übersicht zu erhalten, welchen Bezug diese Tabellen zueinander haben, haben wir das ER-Diagramm des InnoDB Data Dictionaries reverse engineered. Bitte teilt uns mit, wenn Ihr einen Fehler findet oder wenn etwas fehlt...
Viel Spass!
Oli
innodb_dd.pdf (PDF: 93k)
Taxonomy upgrade extras: innodbdata dictionaryer-diagramgermanER-Diagramm des InnoDB Data Dictionaries
Mit dem neuen MySQL Release 5.6 sind einige neue InnoDB Data Dictionary Tabellen zum INFORMATION_SCHEMA hinzu gekommen:
Neu in MySQL 5.5 sind:
INNODB_CMPINNODB_CMP_RESETINNODB_CMPMEMINNODB_CMPMEM_RESETINNODB_TRXINNODB_LOCK_WAITSINNODB_LOCKSNeu in MySQL 5.6 sind:
INNODB_BUFFER_PAGEINNODB_BUFFER_PAGE_LRUINNODB_BUFFER_POOL_STATSINNODB_METRICSINNODB_SYS_COLUMNSINNODB_SYS_FIELDSINNODB_SYS_FOREIGNINNODB_SYS_FOREIGN_COLSINNODB_SYS_INDEXESINNODB_SYS_TABLESINNODB_SYS_TABLESTATSDie INNODB_SYS Tabellen waren bereits früher vorhanden, aber nicht über SQL zugreifbar. Man konnte Sie sehen, indem man den InnoDB Table Monitor eingeschaltet hat.
Um eine grobe Übersicht zu erhalten, welchen Bezug diese Tabellen zueinander haben, haben wir das ER-Diagramm des InnoDB Data Dictionaries reverse engineered. Bitte teilt uns mit, wenn Ihr einen Fehler findet oder wenn etwas fehlt...
Viel Spass!
Oli
innodb_dd.pdf (PDF: 93k)
Deutschsprachige MySQL Anwender Gruppe gegründet (DMySQLAG)
- die Information über den Einsatz, den Umgang und die Erfahrung mit MySQL und Entwicklungen im MySQL Eco-System sowie Anwendungssysteme welche MySQL nutzen.
- den Erfahrungsaustausch zwischen den Benutzern über MySQL sowie anderer Systeme.
- die Beratung und Zusammenarbeit mit Oracle und Herstellern anderer Systeme.
- die Unterbreitung von Mitgliedervorschlägen an Oracle und Hersteller von anderen Systemen.
- Schüler und Studenten: frei
- Einzelmitglieder: EUR 100.-/a
- Firmen bis 500 Mitarbeiter: EUR 200.-/a
- Firmen über 500 Mitarbeiter: EUR 300.-/a
Deutschsprachige MySQL Anwender Gruppe gegründet (DMySQLAG)
- die Information über den Einsatz, den Umgang und die Erfahrung mit MySQL und Entwicklungen im MySQL Eco-System sowie Anwendungssysteme welche MySQL nutzen.
- den Erfahrungsaustausch zwischen den Benutzern über MySQL sowie anderer Systeme.
- die Beratung und Zusammenarbeit mit Oracle und Herstellern anderer Systeme.
- die Unterbreitung von Mitgliedervorschlägen an Oracle und Hersteller von anderen Systemen.
- Schüler und Studenten: frei
- Einzelmitglieder: EUR 100.-/a
- Firmen bis 500 Mitarbeiter: EUR 200.-/a
- Firmen über 500 Mitarbeiter: EUR 300.-/a
Deutschsprachige MySQL Anwender Gruppe gegründet (DMySQLAG)
- die Information über den Einsatz, den Umgang und die Erfahrung mit MySQL und Entwicklungen im MySQL Eco-System sowie Anwendungssysteme welche MySQL nutzen.
- den Erfahrungsaustausch zwischen den Benutzern über MySQL sowie anderer Systeme.
- die Beratung und Zusammenarbeit mit Oracle und Herstellern anderer Systeme.
- die Unterbreitung von Mitgliedervorschlägen an Oracle und Hersteller von anderen Systemen.
- Schüler und Studenten: frei
- Einzelmitglieder: EUR 100.-/a
- Firmen bis 500 Mitarbeiter: EUR 200.-/a
- Firmen über 500 Mitarbeiter: EUR 300.-/a
BLOB's aus der MySQL Datenbank herausklauben
Ein Kunde, welcher mit digitalen Zertifikaten zu tun hat, hatte ein Problem mit einem solchen. Also mussten wir nachforschen, was das Problem war.
Weil das Zertifikat in binärer Form vorliegt, ist es in einem BLOB gespeichert und wir mussten es aus der Datenbank herausklauben um einige Tests damit durchzuführen.
Als erstes kam mir in den Sinn, das Zertifikat mit dem Befehl SELECT INTO OUTFILE zu erhalten. Aber das Verifizierungstool reklamierte und sagte uns, dass das Zertifikat ein falsches Format habe.
Zum Glück fand ich in der MySQL Dokumentation den folgenden Satz: If you use INTO DUMPFILE instead of INTO OUTFILE, MySQL writes only one row into the file, without any column or line termination and without performing any escape processing. This is useful if you want to store a BLOB value in a file.
Wir haben es ausprobiert mit:
mysql> SELECT certificate INTO DUMPFILE '/tmp/certificate.bin' FROM identity WHERE id = 42;und es hat perfekt funktioniert. Das Zertifikat-Verifizierungstool hatte nichts mehr zu meckern und wir konnten weiter nachforschen, warum das Zertifikat überhaupt ein Problem verursacht hat...
Mit diesem Befehl, welchen ich vorher noch nicht kannte, ist es sehr einfach ein einzelnes BLOB aus der Datenbank in eine Datei zu dumpen und dieses von dort aus weiter zu verarbeiten.
Zur Erinnerung: MySQL hat eine generelle Protokoll-Limitation für BLOB's von 1 Gbyte und die Grösse für max_allowed_packet muss entsprechend für den Client UND den Server angepasst werden wenn grosse BLOB's verwendet werden. Weitere Informationen über MySQL-Limitationen finden Sie hier.
Im weiteren muss der Typ des BLOB's entsprechend der erwarteten Grösse des BLOB's richtig gewählt werden. Siehe auch: Data Type Storage Requirements.
Literatur Taxonomy upgrade extras: mysqlblobdumpselectgermanBLOB's aus der MySQL Datenbank herausklauben
Ein Kunde, welcher mit digitalen Zertifikaten zu tun hat, hatte ein Problem mit einem solchen. Also mussten wir nachforschen, was das Problem war.
Weil das Zertifikat in binärer Form vorliegt, ist es in einem BLOB gespeichert und wir mussten es aus der Datenbank herausklauben um einige Tests damit durchzuführen.
Als erstes kam mir in den Sinn, das Zertifikat mit dem Befehl SELECT INTO OUTFILE zu erhalten. Aber das Verifizierungstool reklamierte und sagte uns, dass das Zertifikat ein falsches Format habe.
Zum Glück fand ich in der MySQL Dokumentation den folgenden Satz: If you use INTO DUMPFILE instead of INTO OUTFILE, MySQL writes only one row into the file, without any column or line termination and without performing any escape processing. This is useful if you want to store a BLOB value in a file.
Wir haben es ausprobiert mit:
mysql> SELECT certificate INTO DUMPFILE '/tmp/certificate.bin' FROM identity WHERE id = 42;und es hat perfekt funktioniert. Das Zertifikat-Verifizierungstool hatte nichts mehr zu meckern und wir konnten weiter nachforschen, warum das Zertifikat überhaupt ein Problem verursacht hat...
Mit diesem Befehl, welchen ich vorher noch nicht kannte, ist es sehr einfach ein einzelnes BLOB aus der Datenbank in eine Datei zu dumpen und dieses von dort aus weiter zu verarbeiten.
Zur Erinnerung: MySQL hat eine generelle Protokoll-Limitation für BLOB's von 1 Gbyte und die Grösse für max_allowed_packet muss entsprechend für den Client UND den Server angepasst werden wenn grosse BLOB's verwendet werden. Weitere Informationen über MySQL-Limitationen finden Sie hier.
Im weiteren muss der Typ des BLOB's entsprechend der erwarteten Grösse des BLOB's richtig gewählt werden. Siehe auch: Data Type Storage Requirements.
Literatur Taxonomy upgrade extras: mysqlblobdumpselectgermanBLOB's aus der MySQL Datenbank herausklauben
Ein Kunde, welcher mit digitalen Zertifikaten zu tun hat, hatte ein Problem mit einem solchen. Also mussten wir nachforschen, was das Problem war.
Weil das Zertifikat in binärer Form vorliegt, ist es in einem BLOB gespeichert und wir mussten es aus der Datenbank herausklauben um einige Tests damit durchzuführen.
Als erstes kam mir in den Sinn, das Zertifikat mit dem Befehl SELECT INTO OUTFILE zu erhalten. Aber das Verifizierungstool reklamierte und sagte uns, dass das Zertifikat ein falsches Format habe.
Zum Glück fand ich in der MySQL Dokumentation den folgenden Satz: If you use INTO DUMPFILE instead of INTO OUTFILE, MySQL writes only one row into the file, without any column or line termination and without performing any escape processing. This is useful if you want to store a BLOB value in a file.
Wir haben es ausprobiert mit:
mysql> SELECT certificate INTO DUMPFILE '/tmp/certificate.bin' FROM identity WHERE id = 42;und es hat perfekt funktioniert. Das Zertifikat-Verifizierungstool hatte nichts mehr zu meckern und wir konnten weiter nachforschen, warum das Zertifikat überhaupt ein Problem verursacht hat...
Mit diesem Befehl, welchen ich vorher noch nicht kannte, ist es sehr einfach ein einzelnes BLOB aus der Datenbank in eine Datei zu dumpen und dieses von dort aus weiter zu verarbeiten.
Zur Erinnerung: MySQL hat eine generelle Protokoll-Limitation für BLOB's von 1 Gbyte und die Grösse für max_allowed_packet muss entsprechend für den Client UND den Server angepasst werden wenn grosse BLOB's verwendet werden. Weitere Informationen über MySQL-Limitationen finden Sie hier.
Im weiteren muss der Typ des BLOB's entsprechend der erwarteten Grösse des BLOB's richtig gewählt werden. Siehe auch: Data Type Storage Requirements.
LiteraturWo sich die MySQL Gemeinde tummelt...
Weit, weit weg von hier, in einem anderen Universum namens IRC, gibt es eine Welt mit Namen irc.freenode.net und dort, im Land #mysql.de, tummelt sich die deutschsprachige MySQL Gemeinde.
Die Bewohner dieses Landes sind meist nette Leute, die sich mit MySQL beschäftigen und einige davon sind sogar Kenner ihres Fachs!
Bewohner anderer Universen, welche nach ausführlichem Studium des MySQL Handbuchs immer noch nicht weiter wissen, finden bei den Bewohnern diese Landes meist Rat.
Nicht alle Bürger dieses Landes sind die geborenen Diplomaten. Aber unter ihrer rauen Schale schlummert ein grosses Herz. Wenn man also keine oder eine nicht allzu zuvorkommende Antwort erhält, sollte man nicht verzagen. Die Leute meinen das nicht böse und können nichts für Ihre ungeschliffene Herzlichkeit.
Der einzige Weg, um in das rätselhafte Land #mysql.de zu gelangen, besteht darin, dass man sich ein Portal sucht und mit einem IRC-Client den Sprung dorthin unternimmt, was meist problemlos gelingt. Beliebte und oft verwendete IRC-Clients sind z.B. Xchat, Pidgin oder Iriss.
Web-IRCWer keinen eigenen Client installieren kann oder mag, kann auch auf den IRC Web-Client zurückgreifen, um dorthin zu gelangen.
Die ReiseWenn man den IRC-Client startet, muss man ihm mitteilen wohin die Reise gehen soll:
Ein Benutzernamen respektive der Alias kann frei gewählt werden, solange er keinen Konflikt mit den Namen eines Einheimischen verursacht.
Nicht alle IRC-Clients unterstützen mehrere Protokolle. Ein Passwort ist nicht für alle Länder notwendig. In manche Länder kann man zwar ohne Passwort einreisen, nicht aber Fragen stellen...
Wenn man den Sprung in die gewählte Welt geschafft hat, kriegt man eine entsprechende Meldung:
Um eine Einreise in das entsprechende Land zu beantragen muss folgender Wunsch geäussert werden:
/join #mysql.deSobald man den Wunsch geäussert hat befindet man sich im gewünschten Land.
Bräuche und SittenEs ist eine gute Angewohnheit die Bewohner des entsprechenden Landes zuerst kurz zu begrüssen. Dann können aber bereits Fragen gestellt werden.
Darf ich was Fragen? oder ähnliche Fragen sind verpönt und führen unter Umständen zu unfreundlichen Antworten wie z.B. Nein!. Diese Antworten sind aber nicht ernst zu nehmen. Im weiteren braucht man sich auch nicht zu entschuldigen wenn man keinen perfekten Deutsch-Stil beherrscht.
Wenn ein ortsansässiger Zeit und Lust hat, wird er gerne Auskunft geben oder genauer nachfragen was der Fremdling gerade Fragen wollte...
Ist man mit einem Einheimischen im Gespräch kann man ihn auch gezielt ansprechen z.B. mit "shinguz: dies und das..."
Im Lande #mysql.de gilt es als Unsitte sich auf englisch zu unterhalten. Wenn grössere Auszüge aus Logfiles etc. ausgetauscht werden sollen, wird es nicht geschätzt, wenn diese direkt im IRC Fenster übermittelt werden. Um solche Meldungen zu übermitteln ist z.B. das Tool Pastebin hervorragend geeignet. Es wird dann nur noch der Link mitgeteilt und jeder den es interessiert kann sich den Inhalt der Nachricht anschauen.
Was im Lande #mysql.de ebenfalls geschätzt wird, ist, wenn man Problem in einfache nachvollziehbare Beispiele zerlegt, die von den Bewohnern schnell und einfach nachgestellt werden können.
Wichtig: Die Bewohner sind viel beschäftigte Leute, welche zuerst Ihrer täglichen Arbeit nachgehen müssen. Seid also geduldig und nicht zu aufdringlich. Der Kontakt mit Fremden ist freiwillig und es besteht keine Auskunftspflicht.
Dies sind, so denke ich, die wichtigsten Information und Regeln um ins Land #mysql.de zu finden und sich darin zu bewegen.
Willkommen!Die Bewohner von #mysql.de würden sich freuen wenn Ihr sie zahlreich besuchen kommt und etwas Leben und Blutauffrischung in ihr Land bringt...
Kommt uns doch mal besuchen!
Lokale SpracheEinige nützliche Redewendungen im IRC-Universum sind:
RedewendungBedeutung/nick shinguz_futternMan gibt sich einen anderen Namen/quit Kissen lauschen!Ausreise mit Grundangabe/me zerstört gerade eine DatenbankBeschreibt den Anwesenden, was man gerade macht.../whois shinguzErfragt mehr Informationen über einen Bewohner/query shinguzGespräch unter vier Augen mit einem Anwesenden/invite shinguzLädt einen Anwesenden in ein anderes Land ein./msg shinguz Ganz private MitteilungSendet eine private Meldung an den BewohnerWeiter hilft sonst auch das Fremdwörterbuch für IRC.
Weiter Länder in dieser WeltWeitere Länder mit ähnlich gearteter Bevölkerung findest Du auf dieser Welt hier:
Land Wichtigkeit Beschreibung #drizzle 62Drizzle - Database for Cloud#maatkit 16Maatkit#maria 58Welcome to #maria, home of MariaDB!#mysql 606MySQL help channel#mysql.de 21Der deutschsprachige MySQL Channel#mysql-dev 22MySQL server development#mysql-es 5Bienvenidos a canal de MySQL en español#mysql-fr 3Canal MySQL français#mysql-ndb 19Discussion of MySQL Cluster#mysql-proxy 13MySQL Proxy#ourdelta 10OurDelta - Enhanced Builds for MySQL, MariaDB#percona 15XtraDB, XtraBackup, Percona Server#workbench 11MySQL WorkbenchTaxonomy upgrade extras: irchilfecommunitygermanWo sich die MySQL Gemeinde tummelt...
Weit, weit weg von hier, in einem anderen Universum namens IRC, gibt es eine Welt mit Namen irc.freenode.net und dort, im Land #mysql.de, tummelt sich die deutschsprachige MySQL Gemeinde.
Die Bewohner dieses Landes sind meist nette Leute, die sich mit MySQL beschäftigen und einige davon sind sogar Kenner ihres Fachs!
Bewohner anderer Universen, welche nach ausführlichem Studium des MySQL Handbuchs immer noch nicht weiter wissen, finden bei den Bewohnern diese Landes meist Rat.
Nicht alle Bürger dieses Landes sind die geborenen Diplomaten. Aber unter ihrer rauen Schale schlummert ein grosses Herz. Wenn man also keine oder eine nicht allzu zuvorkommende Antwort erhält, sollte man nicht verzagen. Die Leute meinen das nicht böse und können nichts für Ihre ungeschliffene Herzlichkeit.
Der einzige Weg, um in das rätselhafte Land #mysql.de zu gelangen, besteht darin, dass man sich ein Portal sucht und mit einem IRC-Client den Sprung dorthin unternimmt, was meist problemlos gelingt. Beliebte und oft verwendete IRC-Clients sind z.B. Xchat, Pidgin oder Iriss.
Web-IRCWer keinen eigenen Client installieren kann oder mag, kann auch auf den IRC Web-Client zurückgreifen, um dorthin zu gelangen.
Die ReiseWenn man den IRC-Client startet, muss man ihm mitteilen wohin die Reise gehen soll:
Ein Benutzernamen respektive der Alias kann frei gewählt werden, solange er keinen Konflikt mit den Namen eines Einheimischen verursacht.
Nicht alle IRC-Clients unterstützen mehrere Protokolle. Ein Passwort ist nicht für alle Länder notwendig. In manche Länder kann man zwar ohne Passwort einreisen, nicht aber Fragen stellen...
Wenn man den Sprung in die gewählte Welt geschafft hat, kriegt man eine entsprechende Meldung:
Um eine Einreise in das entsprechende Land zu beantragen muss folgender Wunsch geäussert werden:
/join #mysql.deSobald man den Wunsch geäussert hat befindet man sich im gewünschten Land.
Bräuche und SittenEs ist eine gute Angewohnheit die Bewohner des entsprechenden Landes zuerst kurz zu begrüssen. Dann können aber bereits Fragen gestellt werden.
Darf ich was Fragen? oder ähnliche Fragen sind verpönt und führen unter Umständen zu unfreundlichen Antworten wie z.B. Nein!. Diese Antworten sind aber nicht ernst zu nehmen. Im weiteren braucht man sich auch nicht zu entschuldigen wenn man keinen perfekten Deutsch-Stil beherrscht.
Wenn ein ortsansässiger Zeit und Lust hat, wird er gerne Auskunft geben oder genauer nachfragen was der Fremdling gerade Fragen wollte...
Ist man mit einem Einheimischen im Gespräch kann man ihn auch gezielt ansprechen z.B. mit "shinguz: dies und das..."
Im Lande #mysql.de gilt es als Unsitte sich auf englisch zu unterhalten. Wenn grössere Auszüge aus Logfiles etc. ausgetauscht werden sollen, wird es nicht geschätzt, wenn diese direkt im IRC Fenster übermittelt werden. Um solche Meldungen zu übermitteln ist z.B. das Tool Pastebin hervorragend geeignet. Es wird dann nur noch der Link mitgeteilt und jeder den es interessiert kann sich den Inhalt der Nachricht anschauen.
Was im Lande #mysql.de ebenfalls geschätzt wird, ist, wenn man Problem in einfache nachvollziehbare Beispiele zerlegt, die von den Bewohnern schnell und einfach nachgestellt werden können.
Wichtig: Die Bewohner sind viel beschäftigte Leute, welche zuerst Ihrer täglichen Arbeit nachgehen müssen. Seid also geduldig und nicht zu aufdringlich. Der Kontakt mit Fremden ist freiwillig und es besteht keine Auskunftspflicht.
Dies sind, so denke ich, die wichtigsten Information und Regeln um ins Land #mysql.de zu finden und sich darin zu bewegen.
Willkommen!Die Bewohner von #mysql.de würden sich freuen wenn Ihr sie zahlreich besuchen kommt und etwas Leben und Blutauffrischung in ihr Land bringt...
Kommt uns doch mal besuchen!
Lokale SpracheEinige nützliche Redewendungen im IRC-Universum sind:
RedewendungBedeutung/nick shinguz_futternMan gibt sich einen anderen Namen/quit Kissen lauschen!Ausreise mit Grundangabe/me zerstört gerade eine DatenbankBeschreibt den Anwesenden, was man gerade macht.../whois shinguzErfragt mehr Informationen über einen Bewohner/query shinguzGespräch unter vier Augen mit einem Anwesenden/invite shinguzLädt einen Anwesenden in ein anderes Land ein./msg shinguz Ganz private MitteilungSendet eine private Meldung an den BewohnerWeiter hilft sonst auch das Fremdwörterbuch für IRC.
Weiter Länder in dieser WeltWeitere Länder mit ähnlich gearteter Bevölkerung findest Du auf dieser Welt hier:
Land Wichtigkeit Beschreibung #drizzle 62Drizzle - Database for Cloud#maatkit 16Maatkit#maria 58Welcome to #maria, home of MariaDB!#mysql 606MySQL help channel#mysql.de 21Der deutschsprachige MySQL Channel#mysql-dev 22MySQL server development#mysql-es 5Bienvenidos a canal de MySQL en español#mysql-fr 3Canal MySQL français#mysql-ndb 19Discussion of MySQL Cluster#mysql-proxy 13MySQL Proxy#ourdelta 10OurDelta - Enhanced Builds for MySQL, MariaDB#percona 15XtraDB, XtraBackup, Percona Server#workbench 11MySQL WorkbenchTaxonomy upgrade extras: irchilfecommunitygermanWo sich die MySQL Gemeinde tummelt...
Weit, weit weg von hier, in einem anderen Universum namens IRC, gibt es eine Welt mit Namen irc.freenode.net und dort, im Land #mysql.de, tummelt sich die deutschsprachige MySQL Gemeinde.
Die Bewohner dieses Landes sind meist nette Leute, die sich mit MySQL beschäftigen und einige davon sind sogar Kenner ihres Fachs!
Bewohner anderer Universen, welche nach ausführlichem Studium des MySQL Handbuchs immer noch nicht weiter wissen, finden bei den Bewohnern diese Landes meist Rat.
Nicht alle Bürger dieses Landes sind die geborenen Diplomaten. Aber unter ihrer rauen Schale schlummert ein grosses Herz. Wenn man also keine oder eine nicht allzu zuvorkommende Antwort erhält, sollte man nicht verzagen. Die Leute meinen das nicht böse und können nichts für Ihre ungeschliffene Herzlichkeit.
Der einzige Weg, um in das rätselhafte Land #mysql.de zu gelangen, besteht darin, dass man sich ein Portal sucht und mit einem IRC-Client den Sprung dorthin unternimmt, was meist problemlos gelingt. Beliebte und oft verwendete IRC-Clients sind z.B. Xchat, Pidgin oder Iriss.
Web-IRCWer keinen eigenen Client installieren kann oder mag, kann auch auf den IRC Web-Client zurückgreifen, um dorthin zu gelangen.
Die ReiseWenn man den IRC-Client startet, muss man ihm mitteilen wohin die Reise gehen soll:
Ein Benutzernamen respektive der Alias kann frei gewählt werden, solange er keinen Konflikt mit den Namen eines Einheimischen verursacht.
Nicht alle IRC-Clients unterstützen mehrere Protokolle. Ein Passwort ist nicht für alle Länder notwendig. In manche Länder kann man zwar ohne Passwort einreisen, nicht aber Fragen stellen...
Wenn man den Sprung in die gewählte Welt geschafft hat, kriegt man eine entsprechende Meldung:
Um eine Einreise in das entsprechende Land zu beantragen muss folgender Wunsch geäussert werden:
/join #mysql.deSobald man den Wunsch geäussert hat befindet man sich im gewünschten Land.
Bräuche und SittenEs ist eine gute Angewohnheit die Bewohner des entsprechenden Landes zuerst kurz zu begrüssen. Dann können aber bereits Fragen gestellt werden.
Darf ich was Fragen? oder ähnliche Fragen sind verpönt und führen unter Umständen zu unfreundlichen Antworten wie z.B. Nein!. Diese Antworten sind aber nicht ernst zu nehmen. Im weiteren braucht man sich auch nicht zu entschuldigen wenn man keinen perfekten Deutsch-Stil beherrscht.
Wenn ein ortsansässiger Zeit und Lust hat, wird er gerne Auskunft geben oder genauer nachfragen was der Fremdling gerade Fragen wollte...
Ist man mit einem Einheimischen im Gespräch kann man ihn auch gezielt ansprechen z.B. mit "shinguz: dies und das..."
Im Lande #mysql.de gilt es als Unsitte sich auf englisch zu unterhalten. Wenn grössere Auszüge aus Logfiles etc. ausgetauscht werden sollen, wird es nicht geschätzt, wenn diese direkt im IRC Fenster übermittelt werden. Um solche Meldungen zu übermitteln ist z.B. das Tool Pastebin hervorragend geeignet. Es wird dann nur noch der Link mitgeteilt und jeder den es interessiert kann sich den Inhalt der Nachricht anschauen.
Was im Lande #mysql.de ebenfalls geschätzt wird, ist, wenn man Problem in einfache nachvollziehbare Beispiele zerlegt, die von den Bewohnern schnell und einfach nachgestellt werden können.
Wichtig: Die Bewohner sind viel beschäftigte Leute, welche zuerst Ihrer täglichen Arbeit nachgehen müssen. Seid also geduldig und nicht zu aufdringlich. Der Kontakt mit Fremden ist freiwillig und es besteht keine Auskunftspflicht.
Dies sind, so denke ich, die wichtigsten Information und Regeln um ins Land #mysql.de zu finden und sich darin zu bewegen.
Willkommen!Die Bewohner von #mysql.de würden sich freuen wenn Ihr sie zahlreich besuchen kommt und etwas Leben und Blutauffrischung in ihr Land bringt...
Kommt uns doch mal besuchen!
Lokale SpracheEinige nützliche Redewendungen im IRC-Universum sind:
RedewendungBedeutung/nick shinguz_futternMan gibt sich einen anderen Namen/quit Kissen lauschen!Ausreise mit Grundangabe/me zerstört gerade eine DatenbankBeschreibt den Anwesenden, was man gerade macht.../whois shinguzErfragt mehr Informationen über einen Bewohner/query shinguzGespräch unter vier Augen mit einem Anwesenden/invite shinguzLädt einen Anwesenden in ein anderes Land ein./msg shinguz Ganz private MitteilungSendet eine private Meldung an den BewohnerWeiter hilft sonst auch das Fremdwörterbuch für IRC.
Weiter Länder in dieser WeltWeitere Länder mit ähnlich gearteter Bevölkerung findest Du auf dieser Welt hier:
Land Wichtigkeit Beschreibung #drizzle 62Drizzle - Database for Cloud#maatkit 16Maatkit#maria 58Welcome to #maria, home of MariaDB!#mysql 606MySQL help channel#mysql.de 21Der deutschsprachige MySQL Channel#mysql-dev 22MySQL server development#mysql-es 5Bienvenidos a canal de MySQL en español#mysql-fr 3Canal MySQL français#mysql-ndb 19Discussion of MySQL Cluster#mysql-proxy 13MySQL Proxy#ourdelta 10OurDelta - Enhanced Builds for MySQL, MariaDB#percona 15XtraDB, XtraBackup, Percona Server#workbench 11MySQL WorkbenchVorsicht bei der Nutzung von SAN
Vorsicht bei der Nutzung von SAN (Storage Area Networks) oder ähnlichen Shard Storage Lösungen (und allen anderen Virtualisierungs-, Konsolidierungs- oder Cloud-Lösungen).
Diese Woche ist es wieder passiert: Ein Kunde rief bei uns an, weil er Ärger mit seinem on-line Shop hatte (siehe Datum!). Alle in seiner Firma beschwerten sich, dass die Datenbank langsam antwortet.
Als wir auf seine Maschine schauten (mit iostat), haben wir I/O Last und einige pending reads in InnoDB gesehen (SHOW ENGINE INNODB STATUS und SHOW GLOBAL STATUS LIKE 'InnoDB%') und eine sehr schlechte InnoDB Buffer Pool Hit Ratio (ungefähr 80%, ja, ich weiss Hit Ratios sind schlechte Indikatoren, aber manchmal sind sie recht nützlich).
Der Kunde beteuerte, dass er seit einigen Tagen nichts am System geändert habe. Und am vorherigen Tag sei alles prima gelaufen, aber an diesem Nachmittag wurde das System plötzlich langsam. Er teilte uns im weiteren mit, dass sie zur Zeit daran seien, Monatsreports zu generieren. Aber nur auf den Slaves.
Wir fanden eine Abfrage, welche seit 25 Minuten am laufen war, also nahm ich an, dass diese Abfrage der Übeltäter ist. Nachdem wir die Abfrage gekillt hatten, entspannte sich das System ein wenig, war aber immer noch unter I/O last und der Kunde merkte an, dass wir kurz vor Ende der Hauptlast-Zeit sind. Das würde erklären, warum das System nicht mehr so ausgelastet sei.
Bis zu diesem Zeitpunkt hatte ich keine Ahnung, was der Grund für unser Problem ist. Etwas frustrierend, wenn man dem Kunden nicht erklären kann, warum er gerade ein Problem hat.
Glücklicherweise kam gerade einer der Systemadministratoren ins Büro und beschwerte sich, dass wir gerade sein SAN füllen. Schuld sei der Slave unseres langsamen Masters. Auf dem Slave fanden wir eine Abfrage (Monatsend-Report), welche seit 2 bis 3 Stunden am laufen war, welche eine temporäre Tabelle von ungefähr 350 Gbyte erzeugte! Diese Tabelle füllte das SAN auf ungefähr 99%.
Der Systemadministrator bemerkte im Weiteren, dass das Füllen eines SAN's auf mehr als 90%, das ganze SAN ausbremsen würde (warum auch immer).
Diese Aussage liess bei uns die Alarmglocken klingeln: Hatten wir nicht ein I/O Problem, welches urplötzlich vor 2 bis 3 Stunden einsetzte? Wir fanden heraus, dass unser Master und der Slave unglücklicherweise auf dem selben SAN platziert waren.
Als wird die Abfrage gekillt hatten, wurde die Tabelle automatisch gelöscht und nach einigen Minuten wurde der Diskplatz wieder frei gegeben. Mir wurde gesagt, dass es einige Stunden dauert, bis das SAN sich wieder beruhigt haben wird (warum auch immer). Am nächsten Tag bestätigte der Kunde, dass alles wieder wie gewohnt läuft. Somit können wir ziemlich sicher sein, dass das Füllen des SAN's mit dem Slave das Problem auf unserem produktiven Master verursacht hat.
Schlussfolgerung: SAN's können verschiedene unerwartete Nebeneffekte und Auswirkungen auf die Performance haben. Wenn Sie nicht ungewollt unvorhersehbare Performanceauswirkungen erleben wollen, versuchen sie auf dedizierten Storagelösungen zu bleiben.
Siehe auch unser Commit Demo Test:
Vorsicht bei der Nutzung von SAN
Vorsicht bei der Nutzung von SAN (Storage Area Networks) oder ähnlichen Shard Storage Lösungen (und allen anderen Virtualisierungs-, Konsolidierungs- oder Cloud-Lösungen).
Diese Woche ist es wieder passiert: Ein Kunde rief bei uns an, weil er Ärger mit seinem on-line Shop hatte (siehe Datum!). Alle in seiner Firma beschwerten sich, dass die Datenbank langsam antwortet.
Als wir auf seine Maschine schauten (mit iostat), haben wir I/O Last und einige pending reads in InnoDB gesehen (SHOW ENGINE INNODB STATUS und SHOW GLOBAL STATUS LIKE 'InnoDB%') und eine sehr schlechte InnoDB Buffer Pool Hit Ratio (ungefähr 80%, ja, ich weiss Hit Ratios sind schlechte Indikatoren, aber manchmal sind sie recht nützlich).
Der Kunde beteuerte, dass er seit einigen Tagen nichts am System geändert habe. Und am vorherigen Tag sei alles prima gelaufen, aber an diesem Nachmittag wurde das System plötzlich langsam. Er teilte uns im weiteren mit, dass sie zur Zeit daran seien, Monatsreports zu generieren. Aber nur auf den Slaves.
Wir fanden eine Abfrage, welche seit 25 Minuten am laufen war, also nahm ich an, dass diese Abfrage der Übeltäter ist. Nachdem wir die Abfrage gekillt hatten, entspannte sich das System ein wenig, war aber immer noch unter I/O last und der Kunde merkte an, dass wir kurz vor Ende der Hauptlast-Zeit sind. Das würde erklären, warum das System nicht mehr so ausgelastet sei.
Bis zu diesem Zeitpunkt hatte ich keine Ahnung, was der Grund für unser Problem ist. Etwas frustrierend, wenn man dem Kunden nicht erklären kann, warum er gerade ein Problem hat.
Glücklicherweise kam gerade einer der Systemadministratoren ins Büro und beschwerte sich, dass wir gerade sein SAN füllen. Schuld sei der Slave unseres langsamen Masters. Auf dem Slave fanden wir eine Abfrage (Monatsend-Report), welche seit 2 bis 3 Stunden am laufen war, welche eine temporäre Tabelle von ungefähr 350 Gbyte erzeugte! Diese Tabelle füllte das SAN auf ungefähr 99%.
Der Systemadministrator bemerkte im Weiteren, dass das Füllen eines SAN's auf mehr als 90%, das ganze SAN ausbremsen würde (warum auch immer).
Diese Aussage liess bei uns die Alarmglocken klingeln: Hatten wir nicht ein I/O Problem, welches urplötzlich vor 2 bis 3 Stunden einsetzte? Wir fanden heraus, dass unser Master und der Slave unglücklicherweise auf dem selben SAN platziert waren.
Als wird die Abfrage gekillt hatten, wurde die Tabelle automatisch gelöscht und nach einigen Minuten wurde der Diskplatz wieder frei gegeben. Mir wurde gesagt, dass es einige Stunden dauert, bis das SAN sich wieder beruhigt haben wird (warum auch immer). Am nächsten Tag bestätigte der Kunde, dass alles wieder wie gewohnt läuft. Somit können wir ziemlich sicher sein, dass das Füllen des SAN's mit dem Slave das Problem auf unserem produktiven Master verursacht hat.
Schlussfolgerung: SAN's können verschiedene unerwartete Nebeneffekte und Auswirkungen auf die Performance haben. Wenn Sie nicht ungewollt unvorhersehbare Performanceauswirkungen erleben wollen, versuchen sie auf dedizierten Storagelösungen zu bleiben.
Siehe auch unser Commit Demo Test:
Vorsicht bei der Nutzung von SAN
Vorsicht bei der Nutzung von SAN (Storage Area Networks) oder ähnlichen Shard Storage Lösungen (und allen anderen Virtualisierungs-, Konsolidierungs- oder Cloud-Lösungen).
Diese Woche ist es wieder passiert: Ein Kunde rief bei uns an, weil er Ärger mit seinem on-line Shop hatte (siehe Datum!). Alle in seiner Firma beschwerten sich, dass die Datenbank langsam antwortet.
Als wir auf seine Maschine schauten (mit iostat), haben wir I/O Last und einige pending reads in InnoDB gesehen (SHOW ENGINE INNODB STATUS und SHOW GLOBAL STATUS LIKE 'InnoDB%') und eine sehr schlechte InnoDB Buffer Pool Hit Ratio (ungefähr 80%, ja, ich weiss Hit Ratios sind schlechte Indikatoren, aber manchmal sind sie recht nützlich).
Der Kunde beteuerte, dass er seit einigen Tagen nichts am System geändert habe. Und am vorherigen Tag sei alles prima gelaufen, aber an diesem Nachmittag wurde das System plötzlich langsam. Er teilte uns im weiteren mit, dass sie zur Zeit daran seien, Monatsreports zu generieren. Aber nur auf den Slaves.
Wir fanden eine Abfrage, welche seit 25 Minuten am laufen war, also nahm ich an, dass diese Abfrage der Übeltäter ist. Nachdem wir die Abfrage gekillt hatten, entspannte sich das System ein wenig, war aber immer noch unter I/O last und der Kunde merkte an, dass wir kurz vor Ende der Hauptlast-Zeit sind. Das würde erklären, warum das System nicht mehr so ausgelastet sei.
Bis zu diesem Zeitpunkt hatte ich keine Ahnung, was der Grund für unser Problem ist. Etwas frustrierend, wenn man dem Kunden nicht erklären kann, warum er gerade ein Problem hat.
Glücklicherweise kam gerade einer der Systemadministratoren ins Büro und beschwerte sich, dass wir gerade sein SAN füllen. Schuld sei der Slave unseres langsamen Masters. Auf dem Slave fanden wir eine Abfrage (Monatsend-Report), welche seit 2 bis 3 Stunden am laufen war, welche eine temporäre Tabelle von ungefähr 350 Gbyte erzeugte! Diese Tabelle füllte das SAN auf ungefähr 99%.
Der Systemadministrator bemerkte im Weiteren, dass das Füllen eines SAN's auf mehr als 90%, das ganze SAN ausbremsen würde (warum auch immer).
Diese Aussage liess bei uns die Alarmglocken klingeln: Hatten wir nicht ein I/O Problem, welches urplötzlich vor 2 bis 3 Stunden einsetzte? Wir fanden heraus, dass unser Master und der Slave unglücklicherweise auf dem selben SAN platziert waren.
Als wird die Abfrage gekillt hatten, wurde die Tabelle automatisch gelöscht und nach einigen Minuten wurde der Diskplatz wieder frei gegeben. Mir wurde gesagt, dass es einige Stunden dauert, bis das SAN sich wieder beruhigt haben wird (warum auch immer). Am nächsten Tag bestätigte der Kunde, dass alles wieder wie gewohnt läuft. Somit können wir ziemlich sicher sein, dass das Füllen des SAN's mit dem Slave das Problem auf unserem produktiven Master verursacht hat.
Schlussfolgerung: SAN's können verschiedene unerwartete Nebeneffekte und Auswirkungen auf die Performance haben. Wenn Sie nicht ungewollt unvorhersehbare Performanceauswirkungen erleben wollen, versuchen sie auf dedizierten Storagelösungen zu bleiben.
Siehe auch unser Commit Demo Test:
MySQL Cluster - Cluster Ring-Replikation mit 2 Replikations-Kanälen
Vor ein paar Tagen hatte ich wieder einmal mit einer MySQL Cluster Replikation zu tun. Ich habe das schon eine Weile nicht mehr angelangt und war somit vorbereitet, wieder einmal ein paar Überraschungen zu erleben.
Diejenige, für welche MySQL Cluster - Cluster Ring-Replikationen das tägliche Brot ist, können diesen Artikel getrost überspringen. Alle anderen können möglicherweise von unseren Erfahrungen profitieren.
Wir hatten das folgende MySQL Cluster Konstrukt im Einsatz:
Mehr Informationen über solche Gebilde können in der MySQL Cluster Dokumentation gefunden werden.
Situationen welche zu einem Channel Fail-over führen:Was sind die Problem, mit dem MySQL Cluster, welche zu einem Channel Fail-over führen:
- Der MySQL Master verliert die Verbindung zum MySQL Cluster (lost_event, gap).
- Der MySQL Master kann mit der Last auf dem MySQL Cluster nicht Schritt halten und verliert daher Events (gap). Ich bin wirklich etwas verwundert über das Argument in der Dokumentation [ 1 ], dass in einem solchen Fall ein Channel Fail-over durchgeführt werden kann oder soll. Weil, wenn der Master 1 mit der Last nicht mehr Schritt halten kann, warum soll es dann Master 2 noch können...?).
Was eine Lücke (gap / lost_event) ist, kann der folgenden Skizze entnommen werden:
Wie ein solches System aufgesetzt wird, wollen wir hier nicht betrachten. Die Anleitung dazu können der MySQL Cluster Dokumentation entnommen werden.
Unsere ErkenntnisseUnsere Erkenntnisse waren folgender Art:
Doppelte Primary Key EinträgeWir erhielten einige doppelte Index Einträge für unsere AUTO_INCREMENT Primary Keys:
ERROR 1062 (23000): Duplicate entry '260' for key 'PRIMARY'Der Grund dafür ist, dass wir ndb_autoincrement_prefetch_sz auf 256 gesetzt hatten, um eine bessere INSERT Performance zu erhalten.
Als Konsequenz erhält man, früher oder später, wenn man Daten in alle mysqld's auf beiden Clustern einfügt, einen Primary Key Konflikt.
Wir haben dieses Problem gelöst, indem wir die auto_increment_increment und auto_increment_offset Werte für die SQL Knoten auf beiden MySQL Clustern entsprechend gesetzt haben.
Empfohlene Channel Fail-over Methode funktioniert nur unter LastEin weiteres Problem, welches wir bereits vor langer Zeit bei einem anderen Kunden entdeckt haben, ist, dass das empfohlenen Channel Failover-Vorgehen [ 2 ]:
slave1> STOP SLAVE; slave1> SELECT MAX(epoch) AS latest FROM mysql.ndb_apply_status; master2> SELECT SUBSTRING_INDEX(File, '/', -1) AS master_log_file , Position AS master_log_pos FROM mysql.ndb_binlog_index WHERE epoch > <latest> ORDER BY epoch ASC LIMIT 1; slave2> CHANGE MASTER TO master_log_file='<master_log_file>', master_log_pos=<master_log_pos>;nur funktioniert, wenn wir Last auf dem MySQL Cluster haben. Wenn wir gar keine Last haben, gibt diese Abfrage ein leeres Resultat zurück und es muss der Befehl SHOW MASTER STATUS dazu verwendet werden.
Dokumentationsfehler über log_slave_updatesDiese Situation haben wir fortwährend für Kanal ch2 und ch3 vom Cluster B auf den Cluster A wenn wir KEINE Last auf Cluster B haben und streng der Dokumentation gefolgt wird, wo für ein solches Gebilde gesagt wird: log_slave_updates DARF NICHT eingeschaltet (MUST NOT be enabled) [3] werden.
Ich habe dieses Problem mit ein paar Leuten diskutiert und bin zur Ansicht gekommen, dass die MySQL Cluster Dokumentation hier punktuell falsch ist. Der Master für eine 2 Cluster Replikation KANN log_slave_updates eingeschaltet haben und IMHO MUSS der Master einer 3 Cluster Replikation log_slave_updates eingeschaltet haben.
Aber trotzdem, wenn wir keine Last auf beiden Servern haben, müssen wir das Verfahren ändern um die korrekte Binary Log Position zu bestimmen, wenn wir den Kanal wechseln wollen. Das macht es etwas schwieriger wenn wir den Channel Fail-over automatisieren oder skripten wollen.
Leere EpochenFrüher, wenn ich mich recht erinnere, hat MySQL Cluster immer leere Epochen ins Binary Log geschrieben. Das hatte gewährleistet, dass immer eine gewisse Last auf den Kanälen geherrscht hat. Dann habe ich bei den MySQL Cluster Entwicklern reklamiert und diese haben dieses Problem behoben. Aber für die eben besprochene Situation wäre dieses Verhalten geradezu nützlich und würde Sinn machen. Also habe ich nach der ndb-log-empty-epochs Variablen Ausschau gehalten und gehofft, dass sie dieses Verhalten wieder ermöglicht. Aber irgendwie hat der MySQL Cluster für dieses Set-Up trotz der Verwendung dieser Variable keine leeren Epochen ans Binary Log gemeldet. Zumindest nicht in der kurzen Zeit, wo ich mich mit diesem Problem beschäftigt hatte.
Log_slave_updates wird auch durch den Binlog Injector Thread berücksichtigtEine weitere Erkenntnis mit log_slave_updates war, dass dieser Parameter entsprechend der Dokumentation, nur zum Zug kommt, wenn ein Slave auch als Master agiert [4]. Was heisst, dass er nur die Daten in sein Binary Log schreibt, wenn er die Daten direkt von seinem Master erhält. Es macht den Anschein, dass dies eine falsche Annahme ist. Ein Master scheint auch die Statements welche durch den Binlog Injector Thread [5] über den Cluster kommen, in sein Binary Log zu schreiben. Dies ist möglicherweise ein weiterer Dokumentationsfehler oder zumindest eine Dokumentationslücke.
Skip_slave_start sollte verwendet werdenEine weiter Stolperfalle ist, dass ich vergessen habe, die Variable skip-slave-start zu setzen. Diese Variable sollte IMHO in einem solchen Set-up immer auf dem Slave gesetzt sein. Wenn ein Slave startet, kann er nicht wissen, ob er der aktive Channel sein wird oder nicht.
Zusammenfassung- Überwache Deine Replikations-Kanäle.
- Nutze auto_increment_increment und auto_increment_offset wenn auf beide MySQL Cluster gleichzeitig geschrieben wird oder vermeideAUTO_INCREMENT.
- Verwende ein kluges Channel Fail-over Skript.
- Verwende log_slave_updates auf allen Mastern.
- Verwende skip_slave_start auf allen Slaves.
Das waren die Erkenntnisse unseres letzten Einsatzes mit MySQL Cluster Replikation und Fail-over Replikations-Kanälen. Wenn Sie weitere oder andere Erfahrungen gesammelt haben, wären wir froh, von Ihnen darüber zu hören.
Ein Skript zum automatisierten Fail-over der Kanäle kann unter Download gefunden werden.
Taxonomy upgrade extras: replicationMySQL Clusterfail-overchannelRing-ReplikationgermanMySQL Cluster - Cluster Ring-Replikation mit 2 Replikations-Kanälen
Vor ein paar Tagen hatte ich wieder einmal mit einer MySQL Cluster Replikation zu tun. Ich habe das schon eine Weile nicht mehr angelangt und war somit vorbereitet, wieder einmal ein paar Überraschungen zu erleben.
Diejenige, für welche MySQL Cluster - Cluster Ring-Replikationen das tägliche Brot ist, können diesen Artikel getrost überspringen. Alle anderen können möglicherweise von unseren Erfahrungen profitieren.
Wir hatten das folgende MySQL Cluster Konstrukt im Einsatz:
Mehr Informationen über solche Gebilde können in der MySQL Cluster Dokumentation gefunden werden.
Situationen welche zu einem Channel Fail-over führen:Was sind die Problem, mit dem MySQL Cluster, welche zu einem Channel Fail-over führen:
- Der MySQL Master verliert die Verbindung zum MySQL Cluster (lost_event, gap).
- Der MySQL Master kann mit der Last auf dem MySQL Cluster nicht Schritt halten und verliert daher Events (gap). Ich bin wirklich etwas verwundert über das Argument in der Dokumentation [ 1 ], dass in einem solchen Fall ein Channel Fail-over durchgeführt werden kann oder soll. Weil, wenn der Master 1 mit der Last nicht mehr Schritt halten kann, warum soll es dann Master 2 noch können...?).
Was eine Lücke (gap / lost_event) ist, kann der folgenden Skizze entnommen werden:
Wie ein solches System aufgesetzt wird, wollen wir hier nicht betrachten. Die Anleitung dazu können der MySQL Cluster Dokumentation entnommen werden.
Unsere ErkenntnisseUnsere Erkenntnisse waren folgender Art:
Doppelte Primary Key EinträgeWir erhielten einige doppelte Index Einträge für unsere AUTO_INCREMENT Primary Keys:
ERROR 1062 (23000): Duplicate entry '260' for key 'PRIMARY'Der Grund dafür ist, dass wir ndb_autoincrement_prefetch_sz auf 256 gesetzt hatten, um eine bessere INSERT Performance zu erhalten.
Als Konsequenz erhält man, früher oder später, wenn man Daten in alle mysqld's auf beiden Clustern einfügt, einen Primary Key Konflikt.
Wir haben dieses Problem gelöst, indem wir die auto_increment_increment und auto_increment_offset Werte für die SQL Knoten auf beiden MySQL Clustern entsprechend gesetzt haben.
Empfohlene Channel Fail-over Methode funktioniert nur unter LastEin weiteres Problem, welches wir bereits vor langer Zeit bei einem anderen Kunden entdeckt haben, ist, dass das empfohlenen Channel Failover-Vorgehen [ 2 ]:
slave1> STOP SLAVE; slave1> SELECT MAX(epoch) AS latest FROM mysql.ndb_apply_status; master2> SELECT SUBSTRING_INDEX(File, '/', -1) AS master_log_file , Position AS master_log_pos FROM mysql.ndb_binlog_index WHERE epoch > <latest> ORDER BY epoch ASC LIMIT 1; slave2> CHANGE MASTER TO master_log_file='<master_log_file>', master_log_pos=<master_log_pos>;nur funktioniert, wenn wir Last auf dem MySQL Cluster haben. Wenn wir gar keine Last haben, gibt diese Abfrage ein leeres Resultat zurück und es muss der Befehl SHOW MASTER STATUS dazu verwendet werden.
Dokumentationsfehler über log_slave_updatesDiese Situation haben wir fortwährend für Kanal ch2 und ch3 vom Cluster B auf den Cluster A wenn wir KEINE Last auf Cluster B haben und streng der Dokumentation gefolgt wird, wo für ein solches Gebilde gesagt wird: log_slave_updates DARF NICHT eingeschaltet (MUST NOT be enabled) [3] werden.
Ich habe dieses Problem mit ein paar Leuten diskutiert und bin zur Ansicht gekommen, dass die MySQL Cluster Dokumentation hier punktuell falsch ist. Der Master für eine 2 Cluster Replikation KANN log_slave_updates eingeschaltet haben und IMHO MUSS der Master einer 3 Cluster Replikation log_slave_updates eingeschaltet haben.
Aber trotzdem, wenn wir keine Last auf beiden Servern haben, müssen wir das Verfahren ändern um die korrekte Binary Log Position zu bestimmen, wenn wir den Kanal wechseln wollen. Das macht es etwas schwieriger wenn wir den Channel Fail-over automatisieren oder skripten wollen.
Leere EpochenFrüher, wenn ich mich recht erinnere, hat MySQL Cluster immer leere Epochen ins Binary Log geschrieben. Das hatte gewährleistet, dass immer eine gewisse Last auf den Kanälen geherrscht hat. Dann habe ich bei den MySQL Cluster Entwicklern reklamiert und diese haben dieses Problem behoben. Aber für die eben besprochene Situation wäre dieses Verhalten geradezu nützlich und würde Sinn machen. Also habe ich nach der ndb-log-empty-epochs Variablen Ausschau gehalten und gehofft, dass sie dieses Verhalten wieder ermöglicht. Aber irgendwie hat der MySQL Cluster für dieses Set-Up trotz der Verwendung dieser Variable keine leeren Epochen ans Binary Log gemeldet. Zumindest nicht in der kurzen Zeit, wo ich mich mit diesem Problem beschäftigt hatte.
Log_slave_updates wird auch durch den Binlog Injector Thread berücksichtigtEine weitere Erkenntnis mit log_slave_updates war, dass dieser Parameter entsprechend der Dokumentation, nur zum Zug kommt, wenn ein Slave auch als Master agiert [4]. Was heisst, dass er nur die Daten in sein Binary Log schreibt, wenn er die Daten direkt von seinem Master erhält. Es macht den Anschein, dass dies eine falsche Annahme ist. Ein Master scheint auch die Statements welche durch den Binlog Injector Thread [5] über den Cluster kommen, in sein Binary Log zu schreiben. Dies ist möglicherweise ein weiterer Dokumentationsfehler oder zumindest eine Dokumentationslücke.
Skip_slave_start sollte verwendet werdenEine weiter Stolperfalle ist, dass ich vergessen habe, die Variable skip-slave-start zu setzen. Diese Variable sollte IMHO in einem solchen Set-up immer auf dem Slave gesetzt sein. Wenn ein Slave startet, kann er nicht wissen, ob er der aktive Channel sein wird oder nicht.
Zusammenfassung- Überwache Deine Replikations-Kanäle.
- Nutze auto_increment_increment und auto_increment_offset wenn auf beide MySQL Cluster gleichzeitig geschrieben wird oder vermeideAUTO_INCREMENT.
- Verwende ein kluges Channel Fail-over Skript.
- Verwende log_slave_updates auf allen Mastern.
- Verwende skip_slave_start auf allen Slaves.
Das waren die Erkenntnisse unseres letzten Einsatzes mit MySQL Cluster Replikation und Fail-over Replikations-Kanälen. Wenn Sie weitere oder andere Erfahrungen gesammelt haben, wären wir froh, von Ihnen darüber zu hören.
Ein Skript zum automatisierten Fail-over der Kanäle kann unter Download gefunden werden.
Taxonomy upgrade extras: replicationMySQL Clusterfail-overchannelRing-Replikationgerman