3 votes

Utilisation du disque brut de MySQL sous Windows ?

J'ai des difficultés à faire en sorte que MySQL 5.7 utilise le disque brut (un périphérique bloc, contournant le système de fichiers) pour ses données. Ma compréhension de l'architecture la documentation c'est qu'en fait, la première fois que mysqld est exécuté, la configuration doit avoir le paramètre newraw dans la valeur de innodb_data_file_path et doit être remplacé par raw pour la deuxième exécution.

[mysqld]
innodb_data_home_dir    =
innodb_data_file_path   = //./E::512Gnewraw

default-time-zone       = SYSTEM
basedir                 = C:/MySQLSrv/
tmpdir                  = F:/MySQLTemp/
datadir                 = F:/MySQLData-raw/
pid-file                = mysql.pid
port                    = 3306
socket                  = MySQL
enable-named-pipe       = 1
skip-external-locking
key_buffer_size         = 16M
innodb_log_file_size = 26547M
max_allowed_packet      = 90M
table_open_cache        = 64
sort_buffer_size        = 512K
net_buffer_length       = 8K
read_buffer_size        = 256K
read_rnd_buffer_size    = 512K
myisam_sort_buffer_size = 8M
innodb_page_size = 64K

Les E : et F : sont des partitions sur un grand vdisk (~35 TB) - partitionnement GPT, la première partition est réglée sur "non formatée" par la gestion de disque de Windows, et la seconde est un NTFS conventionnel de 4 TB. (J'ai réglé la taille du fichier de données innodb sur 512 Go juste temporairement, après avoir échoué à faire fonctionner le système avec 4 To, ce qui est en fait ce que je veux pour un test). Je démarre essentiellement l'installation de MySQL à partir de zéro, donc ma première exécution de mysqld a été faite avec l'option --initialize-insecure option. Cette opération a pris un certain temps (à peu près le temps auquel je m'attendais, compte tenu de la taille configurée pour le fichier de données et du taux de transfert du disque observé dans le Gestionnaire de tâches) et a finalement produit la structure de fichier habituelle sous le nom configuré de datadir . Il s'agit notamment de la mysql avec plusieurs *.ibd ce qui, je n'en suis pas sûr, est censé se produire. Néanmoins, aucune erreur n'apparaît dans les journaux de mySQL, et la ligne de progression qui se termine à 524200 suggère que le tablespace a été initialisé.

2021-10-21T09:47:55.686131Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-10-21T09:47:55.692239Z 0 [Warning] InnoDB: innodb-page-size has been changed from the default value 16384 to 65536.
 100 200 300 400 500 <snip> 523900 524000 524100 524200
 100 200 300 400 500 <snip> 26200 26300 26400 26500
 100 200 300 400 500 <snip> 26200 26300 26400 26500
2021-10-21T09:56:54.318875Z 0 [Warning] InnoDB: New log files created, LSN=130881
2021-10-21T09:56:54.471343Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-10-21T09:56:54.533557Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 389cd84c-3255-11ec-8327-005056971dce.
2021-10-21T09:56:54.536035Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-10-21T09:56:56.339721Z 0 [Warning] CA certificate ca.pem is self signed.
2021-10-21T09:56:56.436944Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

J'ai donc changé l'option pour raw et lancez le service (je l'avais déjà créé auparavant). Le service se termine immédiatement, indiquant qu'il voulait créer un tablespace (encore une fois ?) parce qu'il ne le trouvait pas, et que c'est une mauvaise idée si les redo logs existent - ce qui est le cas, la page --initialize-insecure les a créés, comme prévu.

2021-10-21T10:08:09.625276Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-10-21T10:08:09.625424Z 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
2021-10-21T10:08:09.625800Z 0 [Note] MySQL (mysqld 5.7.29) starting as process 3356 ...
2021-10-21T10:08:09.634217Z 0 [Warning] InnoDB: innodb-page-size has been changed from the default value 16384 to 65536.
2021-10-21T10:08:09.634627Z 0 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions
2021-10-21T10:08:09.634873Z 0 [Note] InnoDB: Uses event mutexes
2021-10-21T10:08:09.635033Z 0 [Note] InnoDB: _mm_lfence() and _mm_sfence() are used for memory barrier
2021-10-21T10:08:09.635262Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2021-10-21T10:08:09.636051Z 0 [Note] InnoDB: Number of pools: 1
2021-10-21T10:08:09.636460Z 0 [Note] InnoDB: Not using CPU crc32 instructions
2021-10-21T10:08:09.638441Z 0 [Note] InnoDB: Initializing buffer pool, total size = 52G, instances = 16, chunk size = 128M
2021-10-21T10:08:10.597917Z 0 [Note] InnoDB: Completed initialization of buffer pool
2021-10-21T10:08:11.118090Z 0 [Note] InnoDB: The first innodb_system data file '//./E:' did not exist. A new tablespace will be created!
2021-10-21T10:08:11.118733Z 0 [ERROR] InnoDB: redo log file '.\ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2021-10-21T10:08:11.119256Z 0 [ERROR] InnoDB: InnoDB Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.
2021-10-21T10:08:11.336787Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2021-10-21T10:08:11.337058Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2021-10-21T10:08:11.337286Z 0 [ERROR] Failed to initialize builtin plugins.
2021-10-21T10:08:11.337474Z 0 [ERROR] Aborting

2021-10-21T10:08:11.337615Z 0 [Note] Binlog end
2021-10-21T10:08:11.337839Z 0 [Note] Shutting down plugin 'CSV'
2021-10-21T10:08:11.338806Z 0 [Note] MySQL: Shutdown complete

Qu'est-ce qui m'échappe ? Pourquoi MySQL ne trouve-t-il pas le fichier de données du disque brut après l'avoir initialisé ?

1voto

Wilson Hauck Points 306

Il semble que vous ne respectiez pas ce détail spécifique de la documentation citée.

Le //./ correspond à la syntaxe Windows de \.\ pour accéder aux lecteurs physiques.

La syntaxe de Windows est différente de celle du système d'exploitation Linux.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X