Bonjour,
Voici mon problème, j'ai des serveurs mysql sous windows qui hébergent plusieurs bases de données dont le nom contient le caractère " : "
J'ai fait un script en batch pour faire un dump des bases de données, chaque base de données est donc sauvegardée sous la forme d'un fichier .sql portant le nom de la base de données (c'est ici que ça pose problème).
Ensuite mon script efface les fichiers ibdata1, ib_logfile0 et ib_logfile1 (qui ont tendance à devenir très lourds au fil du temps),
il détruit ensuite les bases de données à l'exception de la base de données "mysql" qui contient les privilèges et il importe les dumps pour recréer les bases de données comme si de rien n'était.
Le seule objectif étant de réduire la taille des fichiers ibdata1, ib_logfile0 et ib_logfile1.
Ce script a été testé et fonctionne parfaitement lorsqu'il n'y a pas de caractères non pris en charge par windows dans le nom de la base de données.
Je cherche donc à modifier mon script afin de:
1) remplacer le : par un autre caractère (le _ par exemple) dans les fichiers .sql
2) lors de la re création des bases de données à partir des dumps .sql remettre les noms d'origine et donc remplacer le _ par :
Si ça peut permettre d'y voir plus clair voici mon script:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 REM ici on va faire un dump que l'on nommera nomdelabasededonnées.sql c'est là que le problème se pose, certaines bases contenant le caractère : dans leur nom mysql -uroot -pmotdepasseroot -s -N -e "SHOW DATABASES" | for /F "usebackq" %%D in (`findstr /V "information_schema performance_schema"`) do mysqldump %%D -uroot -pmotdepasseroot > E:\mysqlbackups\%%D.sql REM ici on va renommer 2 des fichiers dump afin d'éviter que les bases correspondantes soient supprimées ensuite RENAME E:\mysqlbackups\mysql.sql mysql2.sql RENAME E:\mysqlbackups\performance_schema.sql performance_schema2.sql REM ici on va supprimer les bases de données dont le nom correspond à celui d'un des fichiers dump créés précédemment for /R "E:\mysqlbackups\" %%A IN (*.sql) DO ( mysql -uroot -pmotdepasseroot DROP TABLE IF EXISTS '%%~nA' ) REM on stoppe le serveur mysql sc stop MySQL55 taskkill /IM mysqld.exe /F REM on supprime les fichiers que l'on veut remettre à 0 DEL /F /Q "D:\ProgramData\MySQL\MySQL Server 5.5\data\ib_logfile0" DEL /F /Q "D:\ProgramData\MySQL\MySQL Server 5.5\data\ib_logfile1" DEL /F /Q "D:\ProgramData\MySQL\MySQL Server 5.5\data\ibdata1" REM on démarre le serveur mysql sc start MySQL55 REM on crée les bases de données précédemment supprimées for /R "E:\mysqlbackups\" %%A IN (*.sql) DO ( mysql -uroot -pmotdepasseroot -e "CREATE DATABASE IF NOT EXISTS %%~nA" ) REM on importe les dumps précédemment créés for /R "E:\mysqlbackups\" %%A IN (*.sql) DO ( mysql -uroot -pmotdepasseroot %%~nA < %%A )
Comme on le voit les dumps sont nommés %%D.sql
C'est la variable %%D qui pose donc problème puisqu'il me faut remplacer le caractère : dans celle ci par un autre caractère comme le _ mais je coince, j'ai testé différentes solutions sans succès.
Merci d'avance pour toute aide ou piste qui me sera proposée
Partager