MySQL使用触发器进行备份

触发器+脚本备份

实现方案:

1.配置mysql调用外部脚本的插件mysqludf

链接:https://pan.baidu.com/s/1MCrf1u_SRWwcZoxM9JDNiw

提取码:kgt0

解压

2.解压后放进:

mysql安装路径/lib/plugin/

3.在mysql执行命令创建自定义函数,下面创建两个函数的返回执行结果,另一个是返回命令行的字符串

java 复制代码
1 DROP FUNCTION IF EXISTS sys_exec;
2 DROP FUNCTION IF EXISTS sys_eval;
3 CREATE FUNCTION sys_exec RETURNS integer SONAME 'lib_mysqludf_sys_x64.dll';
4 CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys_x64.dll';
5 SELECT sys_eval("ipconfig/all");

执行结果显示为lib_mysqludf_sys_x64.dll要替换成mysql安装路径/lib/plugin/路径中的文件名

即为成功,且可在名为mysql的数据库->func表中看到

4、使用sys_exec备份

创建备份bat文件

sql 复制代码
@echo off
set BACKUP_DIR=E:\database
set MYSQL_USER=roXXX   // 自己的mysql用户名
set MYSQL_PASS=1XXXX   // 自己的mysql密码
set MYSQL_HOST=localhost
set DATABASE_NAME=XXXXXX // 自己的数据库表名
set DATE=%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%
set DATE=%DATE: =0%


// 跳转自己mysql安装位置
pushd C:\Program Files\MySQL\MySQL Server 8.0\bin  //存储
REM 创建备份文件

mysqldump -u %MYSQL_USER% -p%MYSQL_PASS% -h %MYSQL_HOST% %DATABASE_NAME% > %BACKUP_DIR%\mysql_backup_%DATABASE_NAME%_%DATE%.sql


REM 压缩备份文件(可选)
REM 你也可以选择使用 zip 或其他压缩工具进行备份压缩
REM 例如使用 7zip
REM "C:\Program Files\7-Zip\7z.exe" a -tzip %BACKUP_DIR%\mysql_backup_%DATE%.zip %BACKUP_DIR%\mysql_backup_%DATE%.sql

REM 删除超过30天的备份文件(可选)
forfiles /p "%BACKUP_DIR%" /m *.sql /d -30 /c "cmd /c del @path"

[mysqldump]

user=user_name

password=password

创建触发器命令

java 复制代码
-- 每次触发器进行备份
新增
CREATE TRIGGER `insert-change` AFTER INSERT ON `表名`
FOR EACH ROW 
BEGIN
    DECLARE redata INT;
    SELECT sys_exec('E:/database/XXXXX备份文件.bat') INTO redata;
END;


修改
CREATE TRIGGER `update-change` AFTER UPDATE ON `表名`
FOR EACH ROW 
BEGIN
    DECLARE redata INT;
    SELECT sys_exec('E:/database/XXXXX.bat') INTO redata;
END;

删除
CREATE TRIGGER `delete-change` AFTER DELETE ON `表名`
FOR EACH ROW 
BEGIN
    DECLARE redata INT;
    SELECT sys_exec('E:/database/XXXXX.bat') INTO redata;
END;

当表被修改时,会进行备份

5.可能的报错信息

解决办法:把my.ini 中的

secure-file-priv=""

java 复制代码
1.secure_file_priv = NULL ,限制文件的读取和写入。

2.secure_file_priv = 文件路径 ,限制文件的读取和写入只能在设定的文件夹中。

3.secure_file_priv= "", 对文件和读取和写入没有任何限制。
相关推荐
还鮟2 分钟前
CTF Web的数组巧用
android
陈敬雷-充电了么-CEO兼CTO25 分钟前
推荐算法系统系列>推荐数据仓库集市的ETL数据处理
大数据·数据库·数据仓库·数据挖掘·数据分析·etl·推荐算法
MeshddY28 分钟前
(超详细)数据库项目初体验:使用C语言连接数据库完成短地址服务(本地运行版)
c语言·数据库·单片机
wuxinyan12328 分钟前
Java面试题033:一文深入了解MySQL(5)
java·数据库·mysql·面试
笑衬人心。30 分钟前
Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
linux·mysql·ubuntu
萧曵 丶1 小时前
Spring @TransactionalEventListener
java·数据库·spring·事务·transactional·异步
坤坤不爱吃鱼1 小时前
【MySQL\Oracle\PostgreSQL】迁移到openGauss数据出现的问题解决方案
mysql·postgresql·oracle
胡斌附体1 小时前
mobaxterm终端sqlplus乱码问题解决
数据库·乱码·sqlplus·字符集设置
moon66sun1 小时前
开源项目XYZ.ESB:数据库到数据库(DB->DB)集成
数据库·esb
小蜜蜂嗡嗡1 小时前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio