(neu gepostet von der Linux-Community)
Die InnoDB-Speicher-Engine von MySQL kann nicht nur Indizes zwischenspeichern, sondern auch Daten zwischenspeichern. Wenn ihre Tabellen und Indizes auf Rohgeräten (Raw Device) gespeichert sind, können sie den Cache und den Puffer des Dateisystems umgehen und direkt auf sie zugreifen Dadurch wird die Belastung des Linux-Dateisystems erheblich verringert und die Systemleistung erheblich verbessert.
Darüber hinaus können wir aus den Optimierungsprinzipien von Bare-Devices in Datenbankanwendungen auch eine grundlegende Richtung der Datenbankoptimierung erkennen, nämlich wie die starke Belastung des Dateisystems durch die einzigartige E/A-Intensität verringert werden kann Zugriff auf die Datenbank. Daher können auch bei vorhandenen dateisystembasierten Datenbankspeicher-Engines spezielle Dateisystem-Mounting-Methoden in Betracht gezogen werden.
Zum Beispiel kann die Verwendung von noatime als Mount-Parameter für eine Partition, die Datenbankdateien speichert, die Systemleistung bis zu einem gewissen Grad verbessern, da Zugriffszeiten nicht mehr aufgezeichnet werden.
────────────────────────────────────── ───── ──── ──────────────────────────────—
Die neueste Konfiguration dieser Notizen: ───── ──── ────────────────────────────────────── ────────── ────────────
Betriebssystem: CentOS6
HDD: /dev/sdc /dev/sdd
RAW: /dev/ raw/raw1 /dev/raw/raw2
MySQL: 5.1.61
BENUTZER: mysql:mysql
(1) Bereiten Sie das Rohgerät vor
─ ──── ──── ─────────────────────────────────────── ────────── ─────────────────——
Vor der Verwendung von Nacktgeräten muss das Festplattengerät an das Nacktgerät gebunden werden:
# /bin/raw /dev/raw/raw1 /dev/sdc;
/dev/raw/raw1: gebunden an Dur 8, Moll 32
---------------- - ------------------------------------------------- - --
Binden Sie ein weiteres Rohgerät und erteilen Sie dann dem laufenden Benutzer Ihrer MySQL-Datenbank das Recht, das Rohgerät zu lesen und zu schreiben:
# /bin/raw /dev/raw/raw2 /dev/sdd;
# chown root:mysql /dev/raw/raw1 /dev/raw/raw2;# chmod 0660 /dev/raw /raw1 /dev/raw/raw2;
# /bin/raw -q /dev/raw/raw1;
# /bin/ls -l /dev/raw/raw1;
# blockdev --report /dev/raw/raw1;
# blockdev --report /dev/sdc;
---------------------------------------- -------------------------------------------------- -----
ACTION=="add", KERNEL=="sdc", GROUP=="mysql", MODE=="0660", RUN+="/bin/raw /dev/raw/raw1 % N"
ACTION=="add", KERNEL=="sdd", GROUP=="mysql", MODE=="0660", RUN+="/bin/raw /dev/raw/raw2 %N"
------------------------------------------------ --------------------------------
Hinweis: Stellen Sie sicher, dass das Gerät /dev/sdc und /dev/sdd ist bindet sich automatisch, wenn der Server neu gestartet wird.
# vi /etc/udev/rules.d/41-local-permissions-rules;
────────────────────────────────────── ───── ──── ────────────────────────────
(2) Sichern Sie bei Bedarf zuerst die alte InnoDB-Datentabelle── ──────────────────────────────────────── ── ──────── ───────────────────────
Wenn Ihre Datenbank bereits läuft und die vorhandenen Daten in der alten InnoDB-Engine gespeichert sind. Darunter, falls nötig migrieren,
Bitte verwenden Sie den Befehl mysqldump, um Ihre Daten zu exportieren, bevor Sie die Datenbank schließen, und importieren Sie sie dann, nachdem die neue Engine konfiguriert ist.
Sie können auf die folgenden SQL-Befehle zurückgreifen, um Ihre InnoDB-Datentabelle anzuzeigen und zu exportieren:
mysql> SELECT table_schema,table_name,engine FROM INFORMATION_SCHEMA.TABLES;
mysql> SELECT table_schema, table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine='InnoDB';
Bei Bedarf können Sie mysqldump zum Exportieren von Daten verwenden. Bitte verwenden Sie das folgende Format (bitte verwenden Sie die entsprechenden Datenbank- und Tabellennamen):
mysqldump -u root -p -h localhost [Datenbank].[Tabelle] > Datenbank.table.sql
Hinweis: Sie müssen die alten Daten Tabelle für Tabelle exportieren.
────────────────────────────────────── ───────── ───────────────────────────────
(3) 初始化阶段MySQL的配置
───── ──────────────────────────────────────── ────────── ───────────────────────
Wenn Sie eine neue Datendatei erstellen, geben Sie das Schlüsselwort newraw
unmittelbar nach der Datendateigröße in innodb_data_file_path ein:
# vi /etc/my.cnf;
------------------------------------------------- ---------------------------------------------
[mysqld ]
innodb_buffer_pool_size=128M
innodb_data_home_dir=
innodb_data_file_path=/dev/raw/raw1:64Mnewraw;/dev/raw/raw2:64Mnewraw
------------- -------------------------------------------------- -----------------
后记:
mysql 还提供了另一种实现方式, my.ini und innodb_flush_method
innodb_flush_method = O_DIRECT
这样也可以实现直接I/O
Das obige ist der detaillierte Inhalt vonMysql innodb konfiguriert Raw so, dass es den Kernel-Puffer umgeht und direkte E/A unter Linux realisiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!