Sv translation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IntroductionThis page describes the process of rebuilding a Slave-DB & Replication. Since the MySQL Dump command locks the tables, there is no need to create it when there is no traffic on the machine. It can be done during operational hours. With --master-data the command mysqldump stores the correct position for inserting the replication on the slave server.
Step-By-Step Guide
STOP SLAVELogin to the Slave Database MySQL and stop the slave SQL. Leave MySQL again afterwards. Use the following commands for this:
Phase 1 - MySQL DumpA MySQL Dump of the master database is now created. Perform the following steps to create a MySQL Dump and save it to the STORE:
jtel Portal software releaseLog in to the Load Balancer of the cluster and execute the following commands as the jtel user
Create Backup Directory
Create MySQL Dump
MySQL Dump - Until jtel Portal release 3.12
MySQL Dump - From jtel Portal release 3.12 until latest release
MySQL Dump - From MySQL 8.0.27To Check for MySQL Version, log in to the master database server and execute the following command
Brief Explanation of the mysqldump command
Phase 2 - Import Dump on Slave Database
Import Dump - tmux
Import Dump - No tmux
Start Slave - tmux
Start Slave - No tmux
Slave Disk FullThere are several reasons why the slave disk can become full. Following is a summary of the different cases and further below is a detailed explanation:
tmp Directory Is FullIntroductionEvery time a query creates a tmp table, it is written to the temp directory, usually /tmp. This happens when the maximum size exceeds the maximum "in memory" table size. This is defined with the variables The tables in /tmp are kept until the respective DB connection is closed or a DROP TEMPORARY TABLE is called. If the /tmp directory is full, it is likely that a DROP TEMPORARY TABLE is missing somewhere. This can also happen through customer queries to the DB. The installation of tmpwatch creates help in a permanent way Hints:
Procedure
Lots of "relay logs" availableIntroductionMySQL first writes the relay logs from the master to a file. Once replication is interrupted, but the slave relay process continues to operate, the disk is filled by relay logs. This step should be done in any case, especially before the next one (ibdata too large) to make room. ProcedureThe files for the database are usually located in /var/lib/mysql If not, the location can be found in /etc/my.cnf The corresponding entry is datadir=(pfad) Delete all relay logs:
Restart MySQL service
If enough space is available (at least 20%) then proceed with the slave recovery as described above. ibdata files on the slave "very large"IntroductionThe files for the database are usually located in /var/lib/mysql Due to not clearly documented MySQL internas, the file /var/lib/mysql/ibdata1 can be huge compared to the master database. To remedy this, you have to proceed a little more rigorously. ProcedureIf no less than 100% disk can be achieved by the steps above: Unsubscribe the MySQL service from the autostart:
Restart the computer with :
Only works if less than 100% disk is reached (possibly after reboot above) then Log on to the mysql server:
Drop all JTEL databases:
Press CTRL+C to return to the command line, and then
Start MySql Server, and enable it again if necessary:
Check disk space, and proceed with Slave Restore as described above. Still no disk space > 20% freeIntroductionThe slave disk space is still full, more than 80% of the space on the drive is used by normal operation SolutionIn this case the slave is simply too small. The hard disk must be expanded (as with extending the STORE role, apply only to the logical volume where the MySQL database data resides). Then perform the steps again, if the disk is too small, then restore the slave as described above. Or the slave is completely rebuilt with a larger plate. |
Sv translation | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Translations Ignore |
---|
|
MySQL Server mit service mysqld restart
neu starten.
Einen MySQL-Dump schreiben. Auf dem Master-Server nun folgenden Schritte durchführen. Dazu ein Backup-Verzeichnis anlegen und in selbiges wechseln. Der MySQL-Dumb wird nun mit dem folgenden Befehl ausgeführt:
mysqldump -uUSER -pPWD --single-transaction --master-data=2 --databases JTELWeb JTELStats JTELLog --add-drop-database --add-drop-table --events --routines --triggers > filename.sql
Ab Release 3.12 wird folgender Befehl benötigt:
mysqldump -uUSER -pPWD --single-transaction --master-data=2 --databases JTELWeb JTELStats JTELStats2 JTELLog --add-drop-database --add-drop-table --events --routines --triggers > filename.sql
Hierzu eine kurze Erklärung:
Warning |
---|
In Versionen 3.12, 3.14 und 3.15: Wenn sich jemand am Portal Anmeldet, während der Dump gezogen wird, geht das schief. Anbei eine SQL abfrage. Wenn die Zeit sich nach dem ausführen der Abfrage ändert, hat ein Login stattgefunden. Wenn das passiert, muss der Dump erneut gezogen werden und währenddessen dauerhaft geprüft werden, ob ein Login stattgefunden hat. Nur wenn dem nicht so ist, kann man den Dump Fehlerfrei auf den Slave replizieren. SELECT Max(dtAcdLoggedIn) FROM Users; In Versionen 3.11 und abwärts sowie Version 3.16 besteht dieses Problem nicht. |
Verwende hierfür das Tool deiner Wahl: Kommandozeile (scp), WinSCP, ...
Wir wechseln wieder auf den Slave-Server und importieren nun den mysqldump.
Translations Ignore |
---|
|
- In der mysqldump Datei ganz am Anfang finden wir im Kommentarblock eine Zeile, die folgendermaßen aussieht:
CHANGE MASTER TO MASTER_LOG_FILE='binlog.000872', MASTER_LOG_POS=11940974;
Die ParameterMASTER_LOG_FILE
undMASTER_LOG_POS
muss man sich merken. - Wir brauchen den Namen oder die IP vom Master DB Server
- Wir brauchen das Passwort des Benutzers
repl
auf dem Master DB Server. Dies entspricht eigentlich immer dem Passwort des Benutzers root - man kann es am einfachsten ausprobieren, in dem man sich vom Slave auf dem Master mit diesem Passwort anmeldet:mysql -h <masterIP> -u repl -p<Passwort>
- wenn das Funktioniert, weiss man bescheid.
mysql -uUSER -pPWD
CHANGE MASTER TO MASTER_HOST='<name oder IP des master servers>',MASTER_USER='repl',MASTER_PASSWORD='<passwort>',MASTER_LOG_FILE='<Name LogFile>', MASTER_LOG_POS=<Position LogFile>;
Hier sind alle Parameter mit denen aus Schritt 5 zu ersetzen.
Translations Ignore |
---|
|
Nun überprüfen wir den Slave Status (ein paar mal) mit dem Befehl:
Translations Ignore |
---|
|
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Slave Platte Voll
Es gibt diverse Gründe, warum die Slave Platte voll-laufen kann.
tmp Verzeichnis ist voll
Hintergrund
Jedes Mal, wenn eine Query eine tmp Tabelle anlegt, wird dies in das temp Verzeichnis, üblicherweise /tmp geschrieben. Dies geschieht dann, wenn die maximale Größe der maximale "in Memory" Tabellengröße überschritten wird.Dies wird mit den Variablen tmp_table_size
sowie max_heap_table_size
definiert.
Siehe auch https://dev.mysql.com/doc/refman/5.6/en/internal-temporary-tables.html für mehr Information.
Die Tabellen in /tmp werden solange gehalten, bis die jeweilige DB-Verbindung geschlossen wird, oder ein DROP TEMPORARY TABLE aufgerufen wird. Falls das /tmp Verzeichnis voll-läuft, ist zu vermuten dass ein DROP TEMPORARY TABLE irgendwo fehlt. Dies kann durchaus auch durch Kunden-Abfragen an die DB geschehen.
Aushilfe auf permanente Weise schafft hier die Installation von tmpwatch
Hinweise:
- Auf CentOS 6 wird das /tmp Verzeichnis dann standardmäßig dann von Dateien auf den kein Zugriff > 10 Tage nicht erfolgt ist befreit
- Unter Umständen reicht dies nicht aus
- Auf CentOS 7 wird das /tmp Verzeichnis dann standardmäßig dann von Dateien auf den kein Zugriff > 1 Tag nicht erfolgt ist befreit
Vorgehensweise
- Es muss erstmal Platz geschaffen werden. Einfach gnadenlos alles aus /tmp löschen.
- Falls dies genügend Platz verschafft, dann erstmal den mysql Dienst neustarten: service mysql restart
- Falls dann genug Platz vorhanden ist (mindestens ca. 20%), dann mit Wiederherstellung der Replikation wie Oben beschrieben fortfahren.
Jede Menge "relay Logs" vorhanden
MySQL schreibt die Relay-Logs vom Master erstmal in eine Datei. Wenn die Replikation erstmal gebrochen ist, aber der Slave Relay Prozess weiter arbeitet, dann wird die Platte durch Relay Logs befüllt.
Dieser Schritt sollte im jeden Fall durchgeführt werden, insbesondere vor dem nächsten (ibdata zu groß), um Platz zu schaffen.
Vorgehensweise
Die Dateien für die Datenbank befinden sich in der Regel in /var/lib/mysql
Falls nicht, dann ist der Speicherort in /etc/my.cnf zu finden. Der Entsprechende Eintrag ist datadir=(pfad)
Alle Relay Logs löschen:
Translations Ignore cd /var/lib/mysql
rm mysqld-relay-bin*MySQL Dienst neustarten
Translations Ignore service mysqld restart
Falls genug Platz vorhanden (mind. 20%) dann mit der Wiederherstellung des Slaves fortfahren wie oben beschrieben.
ibdata Dateien auf den Slave "Riesen-Groß"
Die Dateien für die Datenbank befinden sich in der Regel in /var/lib/mysql
Auf Grund von nicht klar dokumentierte MySQL internas, kann die Datei /var/lib/mysql/ibdata1 eine riesige Größe annehmen im Vergleich zu der Master Datenbank.
Um dies zu bereinigen, muss man etwas härter vorgehen.
Vorgehensweise
Falls nicht weniger als 100% Platte durch die Schritte Oben erreicht werden kann:Den MySQL Dienst aus der Autostart austragen:
Translations Ignore |
---|
service mysqld disable |
Den Rechner neu starten mit:
Translations Ignore |
---|
reboot |
Geht nur wenn weniger als 100% Platte erreicht ist (ggf. nach Reboot oben) dann:
Auf den mysql Server anmelden:
Translations Ignore |
---|
mysql -u root -p |
Alle JTEL Datenbanken droppen:
Translations Ignore |
---|
SET FOREIGN_KEY_CHECKS=0; |
Mit CTRL+C wieder auf die Kommandozeile, und dann:
Translations Ignore |
---|
service mysqld stop |
MySql Server starten, und ggf. wieder enablen:
Translations Ignore |
---|
service mysqld start |
Plattenplatz prüfen, und mit Slave Wiederherstellung wie oben beschrieben fortfahren.
Trotzdem kein Plattenplatz > 20% Frei
In diesen Fall ist der Slave einfach zu klein. Die Festplatte muss erweitert werden (wie bei Erweiterung der Rolle STORE, nur auf das Logical Volume anwenden auf den die Daten der MySQL Datenbank sich befinden). Dann die Schritte wieder durchführen, bei Platte zu Klein, dann Slave wieder herstellen wie Oben beschrieben.
Oder der Slave wird komplett neu gebaut mit einer größeren Platte.
Sv translation | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||
Reconstruire la BD-esclave et Réplication Comme la commande mysqldump verrouille les tables, il n'est pas nécessaire qu'il n'y ait pas de trafic sur la base de données principale. Avec --master-data, la commande mysqldump enregistre la position correcte pour l'insertion de la réplication sur le serveur esclave. Si le disque dur de l'esclave est plein, veuillez vous référer aux instructions sur cette page ci-dessous - "Disque d'esclave complet".
Disque d'esclave completIl y a plusieurs raisons pour lesquelles le disque esclave peut devenir plein. le répertoire tmp est completInformations généralesChaque fois qu'une requête crée une table tmp, elle est écrite dans le répertoire temporaire, généralement/tmp. Cela se produit lorsque la taille maximale dépasse la taille maximale de la table "en mémoire". Ceci est défini avec les variables See also https://dev.mysql.com/doc/refman/5.6/en/internal-temporary-tables.html pour plus d'informations. Les tables dans / tmp sont conservées jusqu'à ce que la connexion DB respective soit fermée ou qu'une DROP TEMPORARY TABLE soit appelée. Si le répertoire / tmp est plein, il est probable qu'un DROP TEMPORARY TABLE manque quelque part. Cela peut également se produire via des requêtes client adressées à la base de données. L'installation de tmpwatch crée de l'aide de façon permanente Indices:
Procédure
Beaucoup de "journaux de relais" disponiblesMySQL écrit d'abord les journaux de relais du maître dans un fichier. Une fois que la réplication est interrompue, mais que le processus de relais esclave continue à fonctionner, le disque est rempli par les journaux de relais. Cette étape doit être effectuée dans tous les cas, surtout avant la prochaine (ibdata trop grande) pour faire de la place. ProcédureLes fichiers de la base de données se trouvent généralement dans /var/lib/mysql Si ce n'est pas le cas, le lieu peut être trouvé dans /etc/my.cnf L'entrée correspondante est datadir=(pfad)
fichiers ibdata sur l'esclave "très grand"Les fichiers de la base de données se trouvent généralement dans /var/lib/mysql En raison de l'absence de documentation claire sur MySQL internas, le fichier /var/lib/mysql/ibdata1 peut être énorme par rapport à la base de données principale. Pour y remédier, il faut procéder avec un peu plus de rigueur. Procédure
Toujours pas d'espace disque > 20% gratuitDans ce cas, l'esclave est tout simplement trop petit. Le disque dur doit être étendu (comme pour l'extension du rôle STORE, ne s'applique qu'au volume logique où résident les données de la base de données MySQL). Effectuez ensuite à nouveau les étapes, si le disque est trop petit, restaurez l'esclave comme décrit ci-dessus. Ou bien l'esclave est complètement reconstruit avec une plaque plus grande. |