Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So verwalten Sie MySQL – für Oracle-DBAs

Open-Source-Datenbanken werden schnell zum Mainstream, daher ist die Migration von proprietären Engines zu Open-Source-Engines jetzt eine Art Branchentrend. Das bedeutet auch, dass wir DBAs oft mehrere Datenbank-Backends verwalten müssen.

In den letzten Blogbeiträgen haben mein Kollege Paul Namuag und ich verschiedene Aspekte der Migration von Oracle zu Percona, MariaDB und MySQL behandelt. Das offensichtliche Ziel der Migration besteht darin, Ihre Anwendung in der neuen Datenbankumgebung effizienter zum Laufen zu bringen, aber es ist entscheidend sicherzustellen, dass die Mitarbeiter bereit sind, sie zu unterstützen.

Dieser Blog behandelt die grundlegenden Operationen von MySQL unter Bezugnahme auf ähnliche Aufgaben, die Sie täglich in Ihrer Oracle-Umgebung ausführen würden. Es bietet Ihnen einen tiefen Einblick in verschiedene Themen, um Zeit zu sparen, da Sie sich auf Oracle-Wissen beziehen können, das Sie bereits im Laufe der Jahre aufgebaut haben.

Wir werden auch über externe Befehlszeilen-Tools sprechen, die in der standardmäßigen MySQL-Installation fehlen, aber für die effiziente Durchführung täglicher Operationen benötigt werden. Die Open-Source-Version enthält beispielsweise kein Äquivalent zu Oracle Cloud Control, also schauen Sie sich ClusterControl an, wenn Sie nach etwas Ähnlichem suchen.

In diesem Blog gehen wir davon aus, dass Sie Oracle besser kennen als MySQL und daher gerne die Korrelation zwischen den beiden kennen würden. Die Beispiele basieren auf der Linux-Plattform, es gibt jedoch viele Ähnlichkeiten bei der Verwaltung von MySQL unter Windows.

Wie verbinde ich mich mit MySQL?

Beginnen wir unsere Reise mit einer sehr (scheinbar) grundlegenden Aufgabe. Tatsächlich ist dies eine Art von Aufgabe, die aufgrund unterschiedlicher Anmeldekonzepte in Oracle und MySQL für einige Verwirrung sorgen kann.

Das Äquivalent von sqlplus / als Sysdba-Verbindung ist der „mysql“-Terminalbefehl mit einem Flag -uroot. In der MySQL-Welt heißt der Superuser root. MySQL-Datenbankbenutzer (einschließlich Root) werden durch den Namen und den Host definiert, von dem aus eine Verbindung hergestellt werden kann.

Die Informationen über Benutzer und Hosts, von denen aus eine Verbindung hergestellt werden kann, werden in der Tabelle mysql.user gespeichert. Beim Verbindungsversuch prüft MySQL, ob Host, Benutzername und Passwort des Clients mit der Zeile in der Metadatentabelle übereinstimmen.

Dies ist ein etwas anderer Ansatz als bei Oracle, wo wir nur einen Benutzernamen und ein Kennwort haben, aber diejenigen, die mit Oracle Connection Manager vertraut sind, werden möglicherweise einige Ähnlichkeiten feststellen.

Sie werden keine vordefinierten TNS-Einträge wie in Oracle finden. Normalerweise benötigen wir für eine Admin-Verbindung Benutzer, Passwort und -h Host-Flag. Der Standardport ist 3306 (wie 1521 in Oracle), aber dies kann je nach Setup variieren.

Standardmäßig wird bei vielen Installationen die Root-Zugriffsverbindung von jedem Computer ([email protected]’%’) blockiert, sodass Sie sich bei dem Server anmelden müssen, auf dem MySQL gehostet wird, normalerweise über ssh.

Geben Sie Folgendes ein:

mysql -u root

Wenn das Root-Passwort nicht gesetzt ist, reicht dies aus. Wenn das Passwort erforderlich ist, sollten Sie das Flag -p hinzufügen.

mysql -u root -p

Sie sind jetzt beim mysql-Client (dem Äquivalent von sqlplus) angemeldet und sehen eine Eingabeaufforderung, normalerweise „mysql>“.

Ist MySQL betriebsbereit?

Sie können das Startskript des mysql-Dienstes oder den Befehl mysqladmin verwenden, um herauszufinden, ob er ausgeführt wird. Dann können Sie den Befehl ps verwenden, um zu sehen, ob mysql-Prozesse aktiv sind und ausgeführt werden. Eine weitere Alternative kann mysqladmin sein, ein Dienstprogramm, das zur Durchführung von Verwaltungsvorgängen verwendet wird.

mysqladmin -u root -p status

Unter Debian:

/etc/init.d/mysql status

Wenn Sie RedHat oder Fedora verwenden, können Sie das folgende Skript verwenden:

service mysqld status

Oder

/etc/init.d/mysqld status

Oder

systemctl status mysql.service

Auf MariaDB-Instanzen sollten Sie nach dem MariaDB-Dienstnamen suchen.

systemctl status mariadb

Was ist in dieser Datenbank?

Wie in Oracle können Sie die Metadatenobjekte abfragen, um Informationen über Datenbankobjekte zu erhalten.

Es ist üblich, hier einige Abkürzungen zu verwenden, Befehle, die Ihnen helfen, Objekte aufzulisten oder DDL der Objekte zu erhalten.

show databases;
use database_name;
show tables;
show table status;
show index from table_name;
show create table table_name;

Ähnlich wie bei Oracle können Sie die Tabelle beschreiben:

desc table_name;

Wo werden meine Daten gespeichert?

Es gibt keinen dedizierten internen Speicher wie ASM in MySQL. Alle Datendateien werden in den regulären Einhängepunkten des Betriebssystems platziert. Bei einer Standardinstallation finden Sie Ihre Daten in:

/var/lib/mysql

Der Speicherort basiert auf der Variablen datadir.

[email protected]:~# cat /etc/mysql/my.cnf | grep datadir
datadir=/var/lib/mysql

Sie sehen dort ein Verzeichnis für jede Datenbank.

Je nach Version und Speichermodul (ja, hier gibt es einige) kann das Verzeichnis der Datenbank Dateien im Format *.frm enthalten, die die Struktur jeder Tabelle innerhalb der Datenbank definieren. Für MyISAM-Tabellen werden die Daten (*.MYD) und Indizes (*.MYI) auch in diesem Verzeichnis gespeichert.

InnoDB-Tabellen werden in InnoDB-Tablespaces gespeichert. Diese bestehen jeweils aus einer oder mehreren Dateien, die den Tablespaces von Oracle ähneln. In einer Standardinstallation werden alle InnoDB-Daten und -Indizes für alle Datenbanken auf einem MySQL-Server in einem Tablespace gespeichert, der aus einer Datei besteht:/var/lib/mysql/ibdata1. In den meisten Setups verwalten Sie keine Tablespaces wie in Oracle. Die beste Vorgehensweise besteht darin, sie mit aktivierter automatischer Verlängerung und unbegrenzter maximaler Größe beizubehalten.

[email protected]:~# cat /etc/mysql/my.cnf | grep innodb-data-file-path
innodb-data-file-path = ibdata1:100M:autoextend

InnoDB verfügt über Protokolldateien, die den Redo-Protokollen von Oracle entsprechen und eine automatische Wiederherstellung nach einem Absturz ermöglichen. Standardmäßig gibt es zwei Protokolldateien:/var/lib/mysql/ib_logfile0 und /var/lib/mysql/ib_logfile1. Undo-Daten werden in der Tablespace-Datei gespeichert.

[email protected]:/var/lib/mysql# ls -rtla | grep logfile
-rw-rw----  1 mysql mysql  268435456 Dec 15 00:59 ib_logfile1
-rw-rw----  1 mysql mysql  268435456 Mar  6 11:45 ib_logfile0

Wo sind die Metadaten-Informationen?

Es gibt keine Ansichten vom Typ dba_*, user_*, all_*, aber MySQL hat interne Metadatenansichten.

Information_schema ist im SQL 2003-Standard definiert und wird von anderen großen Datenbanken implementiert, z. SQL Server, PostgreSQL.

Seit MySQL 5.0 ist die Datenbank information_schema verfügbar, die Data-Dictionary-Informationen enthält. Die Informationen wurden tatsächlich in den externen FRM-Dateien gespeichert. Endlich, nach vielen Jahren sind die .frm-Dateien in Version 8.0 verschwunden. Die Metadaten sind weiterhin in der information_schema-Datenbank sichtbar, verwenden jedoch die InnoDB-Speicher-Engine.

Um alle aktuellen Ansichten zu sehen, die im Datenwörterbuch des MySQL-Clients enthalten sind, wechseln Sie zur information_schema-Datenbank:

use information_schema;
show tables;

Weitere Informationen finden Sie in der MySQL-Datenbank, die Informationen zu Datenbank, Ereignis (MySQL-Jobs), Plugins, Replikation, Datenbank, Benutzer usw. enthält.

Die Anzahl der Aufrufe hängt von Version und Hersteller ab.

Wählen Sie * aus v$session

Oracles select * from v$session wird hier mit dem Befehl SHOW PROCESSLIST dargestellt, der die Liste der Threads anzeigt.

mysql> SHOW PROCESSLIST;
+---------+------------------+------------------+--------------------+---------+--------+--------------------+------------------+-----------+---------------+
| Id      | User             | Host             | db                 | Command | Time   | State              | Info             | Rows_sent | Rows_examined |
+---------+------------------+------------------+--------------------+---------+--------+--------------------+------------------+-----------+---------------+
|       1 | system user      |                  | NULL               | Sleep   | 469264 | wsrep aborter idle | NULL             |         0 |             0 |
|       2 | system user      |                  | NULL               | Sleep   | 469264 | NULL               | NULL             |         0 |             0 |
|       3 | system user      |                  | NULL               | Sleep   | 469257 | NULL               | NULL             |         0 |             0 |
|       4 | system user      |                  | NULL               | Sleep   | 469257 | NULL               | NULL             |         0 |             0 |
|       6 | system user      |                  | NULL               | Sleep   | 469257 | NULL               | NULL             |         0 |             0 |
|      16 | maxscale         | 10.0.3.168:5914  | NULL               | Sleep   |      5 |                    | NULL             |         4 |             4 |
|      59 | proxysql-monitor | 10.0.3.168:6650  | NULL               | Sleep   |      7 |                    | NULL             |         0 |             0 |
|      81 | proxysql-monitor | 10.0.3.78:62896  | NULL               | Sleep   |      6 |                    | NULL             |         0 |             0 |
|    1564 | proxysql-monitor | 10.0.3.78:25064  | NULL               | Sleep   |      3 |                    | NULL             |         0 |             0 |
| 1822418 | cmon             | 10.0.3.168:41202 | information_schema | Sleep   |      0 |                    | NULL             |         0 |             8 |
| 1822631 | cmon             | 10.0.3.168:43254 | information_schema | Sleep   |      4 |                    | NULL             |         1 |             1 |
| 1822646 | cmon             | 10.0.3.168:43408 | information_schema | Sleep   |      0 |                    | NULL             |       464 |           464 |
| 2773260 | backupuser       | localhost        | mysql              | Query   |      0 | init               | SHOW PROCESSLIST |         0 |             0 |
+---------+------------------+------------------+--------------------+---------+--------+--------------------+------------------+-----------+---------------+


13 rows in set (0.00 sec)

Sie basiert auf Informationen, die in der Ansicht information_schema.processlist gespeichert sind. Die Ansicht erfordert das PROCESS-Privileg. Es kann Ihnen auch dabei helfen, zu überprüfen, ob die maximale Anzahl an Prozessen erschöpft ist.

Wo ist ein Warnprotokoll?

Das Fehlerprotokoll kann in my.cnf oder über den Befehl show variables gefunden werden.

mysql> show variables like 'log_error';
+---------------+--------------------------+
| Variable_name | Value                    |
+---------------+--------------------------+
| log_error     | /var/lib/mysql/error.log |
+---------------+--------------------------+
1 row in set (0.00 sec)

Wo ist die Liste der Benutzer und ihrer Berechtigungen?

Die Informationen über Benutzer werden in der Tabelle mysql.user gespeichert, während die Berechtigungen an mehreren Stellen gespeichert werden, einschließlich mysql.user, mysql.tables_priv,

Der MySQL-Benutzerzugriff ist definiert in:

mysql.columns_priv, mysql.tables_priv, mysql.db,mysql.user

Die bevorzugte Methode zum Auflisten von Grants ist die Verwendung von pt-grants, dem Tool aus dem Percona-Toolkit (ein Muss für jeden MySQL-DBA).

pt-show-grants --host localhost --user root --ask-pass

Alternativ können Sie die folgende Abfrage (erstellt von Calvaldo)

verwenden
SELECT
    CONCAT("`",gcl.Db,"`") AS 'Database(s) Affected',
    CONCAT("`",gcl.Table_name,"`") AS 'Table(s) Affected',
    gcl.User AS 'User-Account(s) Affected',
    IF(gcl.Host='%','ALL',gcl.Host) AS 'Remote-IP(s) Affected',
    CONCAT("GRANT ",UPPER(gcl.Column_priv)," (",GROUP_CONCAT(gcl.Column_name),") ",
                 "ON `",gcl.Db,"`.`",gcl.Table_name,"` ",
                 "TO '",gcl.User,"'@'",gcl.Host,"';") AS 'GRANT Statement (Reconstructed)'
FROM mysql.columns_priv gcl
GROUP BY CONCAT(gcl.Db,gcl.Table_name,gcl.User,gcl.Host)
/* SELECT * FROM mysql.columns_priv */

UNION

/* [Database.Table]-Specific Grants */
SELECT
    CONCAT("`",gtb.Db,"`") AS 'Database(s) Affected',
    CONCAT("`",gtb.Table_name,"`") AS 'Table(s) Affected',
    gtb.User AS 'User-Account(s) Affected',
    IF(gtb.Host='%','ALL',gtb.Host) AS 'Remote-IP(s) Affected',
    CONCAT(
        "GRANT ",UPPER(gtb.Table_priv)," ",
        "ON `",gtb.Db,"`.`",gtb.Table_name,"` ",
        "TO '",gtb.User,"'@'",gtb.Host,"';"
    ) AS 'GRANT Statement (Reconstructed)'
FROM mysql.tables_priv gtb
WHERE gtb.Table_priv!=''
/* SELECT * FROM mysql.tables_priv */

UNION

/* Database-Specific Grants */
SELECT
    CONCAT("`",gdb.Db,"`") AS 'Database(s) Affected',
    "ALL" AS 'Table(s) Affected',
    gdb.User AS 'User-Account(s) Affected',
    IF(gdb.Host='%','ALL',gdb.Host) AS 'Remote-IP(s) Affected',
    CONCAT(
        'GRANT ',
        CONCAT_WS(',',
            IF(gdb.Select_priv='Y','SELECT',NULL),
            IF(gdb.Insert_priv='Y','INSERT',NULL),
            IF(gdb.Update_priv='Y','UPDATE',NULL),
            IF(gdb.Delete_priv='Y','DELETE',NULL),
            IF(gdb.Create_priv='Y','CREATE',NULL),
            IF(gdb.Drop_priv='Y','DROP',NULL),
            IF(gdb.Grant_priv='Y','GRANT',NULL),
            IF(gdb.References_priv='Y','REFERENCES',NULL),
            IF(gdb.Index_priv='Y','INDEX',NULL),
            IF(gdb.Alter_priv='Y','ALTER',NULL),
            IF(gdb.Create_tmp_table_priv='Y','CREATE TEMPORARY TABLES',NULL),
            IF(gdb.Lock_tables_priv='Y','LOCK TABLES',NULL),
            IF(gdb.Create_view_priv='Y','CREATE VIEW',NULL),
            IF(gdb.Show_view_priv='Y','SHOW VIEW',NULL),
            IF(gdb.Create_routine_priv='Y','CREATE ROUTINE',NULL),
            IF(gdb.Alter_routine_priv='Y','ALTER ROUTINE',NULL),
            IF(gdb.Execute_priv='Y','EXECUTE',NULL),
            IF(gdb.Event_priv='Y','EVENT',NULL),
            IF(gdb.Trigger_priv='Y','TRIGGER',NULL)
        ),
        " ON `",gdb.Db,"`.* TO '",gdb.User,"'@'",gdb.Host,"';"
    ) AS 'GRANT Statement (Reconstructed)'
FROM mysql.db gdb
WHERE gdb.Db != ''
/* SELECT * FROM mysql.db */

UNION

/* User-Specific Grants */
SELECT
    "ALL" AS 'Database(s) Affected',
    "ALL" AS 'Table(s) Affected',
    gus.User AS 'User-Account(s) Affected',
    IF(gus.Host='%','ALL',gus.Host) AS 'Remote-IP(s) Affected',
    CONCAT(
        "GRANT ",
        IF((gus.Select_priv='N')&(gus.Insert_priv='N')&(gus.Update_priv='N')&(gus.Delete_priv='N')&(gus.Create_priv='N')&(gus.Drop_priv='N')&(gus.Reload_priv='N')&(gus.Shutdown_priv='N')&(gus.Process_priv='N')&(gus.File_priv='N')&(gus.References_priv='N')&(gus.Index_priv='N')&(gus.Alter_priv='N')&(gus.Show_db_priv='N')&(gus.Super_priv='N')&(gus.Create_tmp_table_priv='N')&(gus.Lock_tables_priv='N')&(gus.Execute_priv='N')&(gus.Repl_slave_priv='N')&(gus.Repl_client_priv='N')&(gus.Create_view_priv='N')&(gus.Show_view_priv='N')&(gus.Create_routine_priv='N')&(gus.Alter_routine_priv='N')&(gus.Create_user_priv='N')&(gus.Event_priv='N')&(gus.Trigger_priv='N')&(gus.Create_tablespace_priv='N')&(gus.Grant_priv='N'),
            "USAGE",
            IF((gus.Select_priv='Y')&(gus.Insert_priv='Y')&(gus.Update_priv='Y')&(gus.Delete_priv='Y')&(gus.Create_priv='Y')&(gus.Drop_priv='Y')&(gus.Reload_priv='Y')&(gus.Shutdown_priv='Y')&(gus.Process_priv='Y')&(gus.File_priv='Y')&(gus.References_priv='Y')&(gus.Index_priv='Y')&(gus.Alter_priv='Y')&(gus.Show_db_priv='Y')&(gus.Super_priv='Y')&(gus.Create_tmp_table_priv='Y')&(gus.Lock_tables_priv='Y')&(gus.Execute_priv='Y')&(gus.Repl_slave_priv='Y')&(gus.Repl_client_priv='Y')&(gus.Create_view_priv='Y')&(gus.Show_view_priv='Y')&(gus.Create_routine_priv='Y')&(gus.Alter_routine_priv='Y')&(gus.Create_user_priv='Y')&(gus.Event_priv='Y')&(gus.Trigger_priv='Y')&(gus.Create_tablespace_priv='Y')&(gus.Grant_priv='Y'),
                "ALL PRIVILEGES",
                CONCAT_WS(',',
                    IF(gus.Select_priv='Y','SELECT',NULL),
                    IF(gus.Insert_priv='Y','INSERT',NULL),
                    IF(gus.Update_priv='Y','UPDATE',NULL),
                    IF(gus.Delete_priv='Y','DELETE',NULL),
                    IF(gus.Create_priv='Y','CREATE',NULL),
                    IF(gus.Drop_priv='Y','DROP',NULL),
                    IF(gus.Reload_priv='Y','RELOAD',NULL),
                    IF(gus.Shutdown_priv='Y','SHUTDOWN',NULL),
                    IF(gus.Process_priv='Y','PROCESS',NULL),
                    IF(gus.File_priv='Y','FILE',NULL),
                    IF(gus.References_priv='Y','REFERENCES',NULL),
                    IF(gus.Index_priv='Y','INDEX',NULL),
                    IF(gus.Alter_priv='Y','ALTER',NULL),
                    IF(gus.Show_db_priv='Y','SHOW DATABASES',NULL),
                    IF(gus.Super_priv='Y','SUPER',NULL),
                    IF(gus.Create_tmp_table_priv='Y','CREATE TEMPORARY TABLES',NULL),
                    IF(gus.Lock_tables_priv='Y','LOCK TABLES',NULL),
                    IF(gus.Execute_priv='Y','EXECUTE',NULL),
                    IF(gus.Repl_slave_priv='Y','REPLICATION SLAVE',NULL),
                    IF(gus.Repl_client_priv='Y','REPLICATION CLIENT',NULL),
                    IF(gus.Create_view_priv='Y','CREATE VIEW',NULL),
                    IF(gus.Show_view_priv='Y','SHOW VIEW',NULL),
                    IF(gus.Create_routine_priv='Y','CREATE ROUTINE',NULL),
                    IF(gus.Alter_routine_priv='Y','ALTER ROUTINE',NULL),
                    IF(gus.Create_user_priv='Y','CREATE USER',NULL),
                    IF(gus.Event_priv='Y','EVENT',NULL),
                    IF(gus.Trigger_priv='Y','TRIGGER',NULL),
                    IF(gus.Create_tablespace_priv='Y','CREATE TABLESPACE',NULL)
                )
            )
        ),
        " ON *.* TO '",gus.User,"'@'",gus.Host,"' REQUIRE ",
        CASE gus.ssl_type
            WHEN 'ANY' THEN
                "SSL "
            WHEN 'X509' THEN
                "X509 "
            WHEN 'SPECIFIED' THEN
                CONCAT_WS("AND ",
                    IF((LENGTH(gus.ssl_cipher)>0),CONCAT("CIPHER '",CONVERT(gus.ssl_cipher USING utf8),"' "),NULL),
                    IF((LENGTH(gus.x509_issuer)>0),CONCAT("ISSUER '",CONVERT(gus.ssl_cipher USING utf8),"' "),NULL),
                    IF((LENGTH(gus.x509_subject)>0),CONCAT("SUBJECT '",CONVERT(gus.ssl_cipher USING utf8),"' "),NULL)
                )
            ELSE "NONE "
        END,
        "WITH ",
        IF(gus.Grant_priv='Y',"GRANT OPTION ",""),
        "MAX_QUERIES_PER_HOUR ",gus.max_questions," ",
        "MAX_CONNECTIONS_PER_HOUR ",gus.max_connections," ",
        "MAX_UPDATES_PER_HOUR ",gus.max_updates," ",
        "MAX_USER_CONNECTIONS ",gus.max_user_connections,
        ";"
    ) AS 'GRANT Statement (Reconstructed)'
FROM mysql.user gus;

So erstellen Sie einen MySQL-Benutzer

Das Verfahren zum Erstellen von Benutzern ähnelt dem von Oracle. Das einfachste Beispiel könnte sein:

CREATE user 'username'@'hostname' identified by 'password';
GRANT privilege_name on *.* TO 'username'@'hostname';

Die Option zum Gewähren und Erstellen in einer Zeile mit:

GRANT privilege_name  ON *.* TO 'username'@'hostname' identified by 'password';

wurde in MySQL 8.0 entfernt.

Wie starte und stoppe ich MySQL?

Sie können MySQL mit dem Dienst stoppen und starten.

Der tatsächliche Befehl hängt von der Linux-Distribution und dem Dienstnamen ab.

Nachfolgend finden Sie ein Beispiel mit dem Dienstnamen mysqld.

Ubuntu

/etc/init.d/mysqld start 
/etc/init.d/mysqld stop 
/etc/init.d/mysqld restart

RedHat/Centos

service mysqld start 
service mysqld stop 
service mysqld restart
systemctl start mysqld.service
systemctl stop mysqld.service
systemctl restart mysqld.service

Wo sind die MySQL-Server-Konfigurationsdaten?

Die Konfiguration wird in der Datei my.cnf gespeichert.

Bis Version 8.0 erforderte jede dynamische Einstellungsänderung, die nach einem Neustart bestehen bleiben sollte, eine manuelle Aktualisierung der Datei my.cnf. Ähnlich wie bei „scope=both“ von Oracle können Sie Werte mit der Option „persistent“ ändern.

mysql> SET PERSIST max_connections = 1000;
mysql> SET @@PERSIST.max_connections = 1000;

Verwenden Sie für ältere Versionen:

mysql> SET GLOBAL max_connections = 1000;
$ vi /etc/mysql/my.cnf
SET GLOBAL max_connections = 1000;

Wie sichere ich MySQL?

Es gibt zwei Möglichkeiten, ein MySQL-Backup auszuführen.

Für kleinere Datenbanken oder kleinere selektive Backups können Sie den mysqldump-Befehl verwenden.

Datenbanksicherung mit mysqldump (logische Sicherung):

mysqldump -uuser -p --databases db_name --routines --events --single-transaction | gzip > db_name_backup.sql.gz

xtrabackup, mariabackup (heiße binäre Sicherung)

Die bevorzugte Methode ist die Verwendung von xtrabackup oder mariabackup, externen Tools, um Hot-Binär-Backups auszuführen.

Oracle bietet Hot Binary Backup in der kostenpflichtigen Version namens MySQL Enterprise Edition an.

mariabackup --user=root --password=PASSWORD --backup --target-dir=/u01/backups/

Sicherung auf anderen Server streamen

Starten Sie einen Listener auf dem externen Server auf dem bevorzugten Port (in diesem Beispiel 1984)

nc -l 1984 | pigz -cd - | pv | xbstream -x -C /u01/backups

Backup ausführen und auf externen Host übertragen

innobackupex --user=root --password=PASSWORD --stream=xbstream /var/tmp | pigz  | pv | nc external_host.com 1984

Benutzerberechtigung kopieren

Es ist oft erforderlich, Benutzerberechtigungen zu kopieren und auf die anderen Server zu übertragen.

Der empfohlene Weg, dies zu tun, ist die Verwendung von pt-show-grants.

pt-show-grants > /u01/backups

Wie stelle ich MySQL wieder her?

Logische Sicherungswiederherstellung

MySQLdump erstellt die SQL-Datei, die mit dem Quellbefehl ausgeführt werden kann.

Verwenden Sie den tee-Befehl, um die Protokolldatei der Ausführung aufzubewahren.

mysql> tee dump.log
mysql> source mysqldump.sql

Binäre Backup-Wiederherstellung (xtrabackup/mariabackup)

Um MySQL aus der binären Sicherung wiederherzustellen, müssen Sie zuerst die Dateien wiederherstellen und dann die Protokolldateien anwenden.

Sie können diesen Prozess mit dem Wiederherstellen und Wiederherstellen in Oracle vergleichen.

xtrabackup --copy-back --target-dir=/var/lib/data
innobackupex --apply-log --use-memory=[values in MB or GB] /var/lib/data

Hoffentlich geben diese Tipps einen guten Überblick über die Durchführung grundlegender Verwaltungsaufgaben.