In diesem Abschnitt werden gespeicherte Prozeduren für Cloud SQL-Instanzen beschrieben.
Eine gespeicherte Prozedur beinhaltet einen SQL-Code, den Sie wiederverwenden können.
Verwenden Sie zum Ausführen der gespeicherten Prozedur den Befehl CALL und ersetzen Sie die folgende Variable:
- procedure_name: der Name des gespeicherten Verfahrens.
CALL procedure_name(parameters);
Informationen zum Erstellen einer gespeicherten Prozedur finden Sie unter denCREATE PROCEDURE- und CREATE FUNCTION-Anweisungen.
Cloud SQL unterstützt die CREATE FUNCTION-Anweisung nicht. Weitere Informationen finden Sie unter Nicht unterstützte MySQL-Features für Cloud SQL.
Gespeicherte Prozeduren für verwaltete Replikatindexe
Mit den folgenden gespeicherten Prozeduren können Sie verwaltete Replikatindexe für Ihre Replikate erstellen, verwalten und löschen. Wenn Ihre Replikate neu erstellt werden, werden diese Indexe automatisch wiederhergestellt.
Bei jedem Aufruf einer gespeicherten Prozedur wird eine COMMIT-Anweisung ausgeführt, mit der die Änderungen in der aktuellen Sitzung abgeschlossen werden. Daher können DML-Anweisungen (Datenbearbeitungssprache), die mit diesen gespeicherten Prozeduren ausgeführt werden, nicht innerhalb einer Transaktion rückgängig gemacht werden.
Weitere Informationen finden Sie unter Verwaltete Replikatindexe.
mysql.cloudsql_replica_idx_defn_create
Syntax
mysql.cloudsql_replica_idx_defn_create(IDXNAME, CREATESTMT)
Beschreibung
Erstellt eine Definition für einen sekundären Index. Führen Sie diese gespeicherte Prozedur auf der primären Instanz aus, um die Indexdefinition auf die Replikate zu replizieren.
Die gespeicherte Prozedur gibt eine IDXID zurück, eine eindeutige Ganzzahl-ID der Definition des sekundären Index.
- IDXNAME: Name für die Indexdefinition.
- CREATESTMT: SQL-Anweisung zum Erstellen des Index. Muss eine DDL-Anweisung mit Schema-Präfix (z. B.
schema_name.table_name) sein.
mysql.cloudsql_replica_idx_defn_drop
Syntax
mysql.cloudsql_replica_idx_defn_drop(IDXID)
Beschreibung
Löscht eine sekundäre Indexdefinition. Führen Sie diese gespeicherte Prozedur auf der primären Instanz aus.
- IDXID: Eindeutige Ganzzahl-ID der Indexdefinition des gelöschten Index.
mysql.cloudsql_replica_idx_group_add
Syntax
mysql.cloudsql_replica_idx_group_add(IDXID, GRPNAME)
Beschreibung
Fügt einer Replikatgruppe eine sekundäre Indexdefinition hinzu. Führen Sie diese gespeicherte Prozedur auf der primären Instanz aus.
- IDXID: Eindeutige Ganzzahl-ID der Indexdefinition.
- GRPNAME: Name der Replikatgruppe. GRPNAME ist ein benutzerdefinierter Name, den Sie auswählen. Wenn diese Replikatgruppe nicht vorhanden ist, erstellt Cloud SQL eine neue.
mysql.cloudsql_replica_idx_group_drop
Syntax
mysql.cloudsql_replica_idx_group_drop(IDXID, GRPNAME)
Beschreibung
Löscht einen sekundären Index aus einer Replikationsgruppenzuordnung. Führen Sie diese gespeicherte Prozedur auf der primären Instanz aus.
- IDXID: Eindeutige Ganzzahl-ID der Indexdefinition.
- GRPNAME: Name der Replikatgruppe.
mysql.cloudsql_replica_idx_show_status
Syntax
mysql.cloudsql_replica_idx_show_status()
Beschreibung
Zeigt den Status und Fortschritt laufender Indexerstellungs- oder Löschvorgänge auf einer Replikatinstanz an.
Wenn Sie einen detaillierten Fortschrittsbericht aufrufen möchten, müssen Sie das MySQL-Leistungsschema auf der Instanz aktivieren. Außerdem müssen Sie die Stage-Instrumente und -Nutzer aktivieren. Führen Sie dazu die folgenden SQL-Befehle aus:
Aktivieren Sie die Stage-Instrumente:
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'stage/innodb/alter%';
Aktivieren Sie die Stage-Ereignis-Consumer:
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE 'events_stages_%';
Weitere Informationen finden Sie unter Beispiel für das Monitoring von ALTER TABLE mit dem Leistungsschema.
mysql.cloudsql_replica_idx_show_errors
Syntax
mysql.cloudsql_replica_idx_show_errors()
Beschreibung
Listet Versuche zur Neuerstellung von Indexen auf, die bei der letzten Ausführung fehlgeschlagen sind, und zeigt Fehlermeldungen und die Anzahl der Wiederholungsversuche auf einer Replikatinstanz an. Ein Fehler bei einem Index blockiert nicht die Ausführung nachfolgender Indexe in der Warteschlange.
mysql.cloudsql_replica_idx_show_all
Syntax
mysql.cloudsql_replica_idx_show_all()
Beschreibung
Listet den Status, die Anzahl der Wiederholungsversuche, die Ausführungsdauer und die Fehlermeldungen für alle Datensätze zur Neuerstellung von sekundären Replikatindexen in der Metadatenstatustabelle auf. Führen Sie diese gespeicherte Prozedur auf einer Replikatinstanz aus.
Gespeicherte Prozeduren für selbstverwaltete Replikatindexe
Mit den folgenden gespeicherten Prozeduren können Sie sekundäre Indexe direkt auf einem Replikat hinzufügen und löschen. Diese Indexe bleiben jedoch nicht erhalten, wenn das Replikat neu erstellt wird.
mysql.addSecondaryIdxOnReplica
Syntax
mysql.addSecondaryIdxOnReplica(IDXTYPE, IDXNAME, TABLENAME, IDXDEFINITION, IDXOPTION)
Beschreibung
Fügt einen sekundären Index zur Datenbank hinzu. Diese gespeicherte Prozedur ist ein Wrapper für die DDL-Anweisung CREATE INDEX.
- IDXTYPE: Typ des Index, der erstellt werden soll. Übergeben Sie beispielsweise
UNIQUE, um einen eindeutigen Index zu erstellen. - IDXNAME: Name des Index.
- TABLENAME: Name der Tabelle im Format
schema_name.table_name. - IDXDEFINITION: Definition des Index. Verwenden Sie keine äußeren Klammern.
- IDXOPTION: Zusätzliche Optionen, die zur Erstellung des Index übergeben werden sollen. In MySQL 8.0 könnte eine Option beispielsweise
INVISIBLEfür einen unsichtbaren Index übergeben.
mysql.dropSecondaryIdxOnReplica
Syntax
mysql.dropSecondaryIdxOnReplica(IDXNAME, TABLENAME, IDXOPTION)
Beschreibung
Löscht einen sekundären Index für die Datenbank. Diese gespeicherte Prozedur ist ein Wrapper für die DDL-Anweisung DROP INDEX.
- IDXNAME: Name des Index.
- TABLENAME: Name der Tabelle im Format
schema_name.table_name. - IDXOPTION: Zusätzliche Optionen, die beim Löschen eines Index übergeben werden sollen. Beispiel: eine Algorithmusoption wie
INPLACE.
Gespeicherte Prozeduren für die Replikation externer Server
Sie können die folgende gespeicherte Prozedur während der Replikation des externen Servers verwenden.
mysql.skipReplicationError
Syntax
mysql.skipReplicationError()
Beschreibung
Überspringt einen Replikationsfehler, der während der Replikation des externen Servers aufgetreten ist, und setzt dann die Replikation fort.
Sie können diese gespeicherte Prozedur nur ausführen, wenn ein Replikationsfehler aufgetreten ist und die E/A- und SQL-Threads beendet wurden.
Diese gespeicherte Prozedur führt Folgendes aus:
Bestimmt, ob eine GTID-basierte oder eine auf der Position des binären Logs basierende Replikation verwendet wird.
Wenn die parallele Replikation verwendet wird, ruft die gespeicherte Prozedur zuerst
START_SLAVE_UNTIL_SQL_AFTER_MTS_GAPSoderSTART_REPLICA UNTIL_SQL_AFTER_MTS_GAPSauf, um sicherzustellen, dass es keine Lücken in den angewendeten Transaktionen bis zur fehlgeschlagenen Transaktion gibt. Anschließend wird die Replikationskonfiguration vorübergehend auf Single-Threaded festgelegt.Bei der binären logpositionsbasierten Replikation wird durch das Verfahren
SQL_SLAVE_SKIP_COUNTERoderSQL_REPLICA_SKIP_COUNTER = 1festgelegt, um die aktuelle Transaktion zu überspringen.Bei der GTID-basierten Replikation bestimmt die gespeicherte Prozedur die GTID der aktuellen fehlgeschlagenen Transaktion anhand der Informationen in der Statusvariable
gtid_executed. Anschließend wird eine leere Transaktion eingefügt, um diese GTID zu füllen.Wenn die parallele Replikation zuvor deaktiviert war, wird sie durch die gespeicherte Prozedur wieder aktiviert.
Die gespeicherte Prozedur setzt die Replikation fort.
In der Tabelle mysql.skip_replication_error_history werden alle Aufrufe dieser gespeicherten Prozedur protokolliert.