Maison >Tutoriel système >Linux >(Question quotidienne) Idées de solutions pour l'exécution par lots de la base de données MySQL

(Question quotidienne) Idées de solutions pour l'exécution par lots de la base de données MySQL

WBOY
WBOYavant
2024-03-02 09:31:18648parcourir

1. Aperçu

Scénario d'application : de nombreux fichiers MySQL doivent être exécutés par lots. Exécuter les fichiers SQL de la base de données MySQL un par un prend trop de temps.

Environnement de débogage : local windows 10, la base de données à exécuter est sur le serveur centos dans le LAN.

Mysql doit être installé localement. Ma version est mysql5.7.

Téléchargement MYSQL :

linux 批量执行脚本_linux批量执行的脚本_批量操作linux

Après avoir téléchargé et installé les variables d'environnement Linux, après avoir ajouté le chemin d'accès aux variables d'environnement, la commande mysql utilisée précédemment peut être utilisée.

1. Vérifiez si la ligne de commande Windows prend en charge la commande mysql

Utilisez la ligne de commande pour vous connecter à MySQL dans cmd. S'il vous demande "pas une commande interne ou externe", vous devez la configurer

.

image.png

批量操作linux_linux 批量执行脚本_linux批量执行的脚本

Vous devez ajouter le répertoire bin sous le répertoire d'installation de MySQL aux variables système. Veuillez découvrir comment utiliser Baidu.

Une fois la configuration terminée, rouvrez cmd et utilisez directement la ligne de commande mysql.

2. Idées de solutions 3. Mise en œuvre spécifique

1. Parcourez le répertoire et générez un nouveau fichier SQL d'exécution par lots batch.sql

Créez un nouveau dossier sqlscripts dans le répertoire racine et chargez tous les scripts à exécuter dans le dossier sqlscripts. Les commandes de traitement par lots seront parcourues et ajoutées au nouveau SQL dans l'ordre.

linux 批量执行脚本_linux批量执行的脚本_批量操作linux

2. Créez un nouveau createsql.bat

Créez un nouveau fichier txt dans le répertoire racine et renommez-le en : creatsql.bat, puis copiez-y le contenu suivant. Ce processus par lots sera parcouru et ajouté à batch.sql dans l'ordre.

@echo off & setlocal EnableDelayedExpansion
del batch.sql
echo 开始执行...
@set source=.
for %%i in (sqlscripts*.sql) do (
  set file=%%~fi
  set file=!file:/=/!
  echo %source% !file!
  echo %source% !file! >> batch.sql
)
echo 执行完毕!
pause

Remarque : j'ai rencontré des problèmes d'encodage pendant le test, tous les fichiers batch ont donc été édités avec notepad++ et le format d'encodage a été modifié en ANSI au lieu d'utf-8 ;

3. Créez une nouvelle mise à jour.bat

Créez un nouveau fichier txt dans le répertoire racine et renommez-le en : update.bat, puis copiez-y le contenu suivant. Ce processus par lots se connectera à la base de données et exécutera le fichier batch.sql nouvellement généré.

::echo off
@echo off
:: 指定MySQL安装路径
:: C:
:: cd C:Program FilesMySQLMySQL Server 5.7bin
:: 数据库主机
@set host=192.10.120.101
:: 数据库名称
@set db=test
:: 用户名
@set userName=root
:: 密码
@set password=123456
:: 获取文件夹所在绝对路径
@set basePath=%~dp0
:: 要执行的sql脚本
@set sqlpath=%basePath%batch.sql
echo 开始执行数据库脚本...
:: 连接MySQL数据库并执行sql脚本 -f 脚本执行过程中,出现错误继续执行 --default-character-set指定导入数据的编码(与数据库编码相同)
mysql -f -h %host% -u %userName% --password=%password% %db% < %sqlpath% --default-character-set=gbk
:: 执行完成后,不立刻关闭dos窗口
echo 所有脚本执行完毕。
del batch.sql
pause

Remarque : Vous devez modifier les valeurs des variables​​dans ce lot script d'exécution par lots Linux, telles que l'hôte, le nom/mot de passe de la base de données et d'autres informations.

4. Exécuter le traitement par lots

Exécutez createsql.bat et vérifiez si batch.sql est correctement exécuté. Update.bat est vérifié pour voir s'il est exécuté normalement IV.

刚才介绍的思路是分为两步,先遍历并整合成一个sql脚本去执行。似乎还有一种方法就是逐字遍历的时侯linux 批量执行脚本,每取出一条就去执行一条。这样写一个批处理就可以搞定了。

具体实现:

新建update_each.bat,内容如下

::echo off
@echo off
:: 指定MySQL安装路径
:: C:
:: cd C:Program FilesMySQLMySQL Server 5.7bin
:: 数据库主机
@set host=192.10.120.101
:: 数据库名称
@set db=test
:: 用户名
@set userName=root
:: 密码
@set password=123456
:: 获取文件夹所在绝对路径
@set basePath=%~dp0
:: 要执行的sql脚本
@set sqlpath=%basePath%all.sql
echo 开始执行数据库脚本...
for %%i in (sqlscripts*.sql) do (
echo 正在执行 %%i 请稍后...
echo set names utf8;>all.sql
echo source %%i>>all.sql
:: 连接MySQL数据库并执行sql脚本 -f 脚本执行过程中,出现错误继续执行 --default-character-set指定导入数据的编码(与数据库编码相同)
mysql -f -h %host% -u %userName% --password=%password% %db% < %sqlpath% --default-character-set=gbk
echo %%i 执行完毕。
)
del all.sql
echo 所有脚本执行完毕。
pause

非常提示编码问题suse linux 下载,批处理命令是ANSI编码格式;sql脚本是UTF-8编码格式。

结束

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer