percona MYSQL 5.7.13 5.7.14 MYSQLDUMP 导入报错delimiter (修改MYSQLDUMP代码)
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,percona 5.7.13 5.7.14 MYSQLDUMP备份完成后不能呢导回去,文件一大了非常麻烦,最近遇到这样的问题。[root@testmy client]# /mysqldata/mysq
千家信息网最后更新 2025年11月09日percona MYSQL 5.7.13 5.7.14 MYSQLDUMP 导入报错delimiter (修改MYSQLDUMP代码)percona 5.7.13 5.7.14 MYSQLDUMP备份完成后不能呢导回去,
文件一大了非常麻烦,最近遇到这样的问题。
[root@testmy client]# /mysqldata/mysql3308/bin/mysql -uroot -pEnter password:
ERROR at line 63: DELIMITER must be followed by a 'delimiter' character or string
ERROR 1064 (42000) at line 64: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4
其实这里就是DELIMITER 后面的;;解析了,只要把;;转变为$$ 就好了.
[root@testmy client]# sed -i "s/;;/$$/g" log.sql
[root@testmy client]# /mysqldata/mysql3308/bin/mysql -uroot -pEnter password:
[root@testmy client]#
当然我这里是测试库,如果真的是线上库量非常大作sed谈何容易。所以决定从mysqldump下手改一下标识即可。
下面是修改部分,因为MYSQLDUMP是独立的工具,这些函数全是static函数,可以放心修改,如果是外部函数真
还不敢改,修改源码的client/mysqldump.c 如下部分修改了:
static uint dump_events_for_db(char *db)
2547 fprintf(sql_file,
2548 "DELIMITER ;;\n"
2549 "%s ;;\n"
2550 "DELIMITER ;\n",
修改为
static uint dump_events_for_db(char *db)
2547 fprintf(sql_file,
2548 "DELIMITER $$\n"
2549 "%s $$\n"
2550 "DELIMITER ;\n",
static void dump_trigger_old(FILE *sql_file, MYSQL_RES *show_triggers_rs,
MYSQL_ROW *show_trigger_row,
const char *table_name)
3247 fprintf(sql_file,
3248 "DELIMITER ;;\n"
3249 "/*!50003 SET SESSION SQL_MODE=\"%s\" */;;\n"
3250 "/*!50003 CREATE */ ",
3251 (*show_trigger_row)[6]);
修改为:
3247 fprintf(sql_file,
3248 "DELIMITER $$\n"
3249 "/*!50003 SET SESSION SQL_MODE=\"%s\" */$\n"
3250 "/*!50003 CREATE */ ",
3251 (*show_trigger_row)[6]);
static int dump_trigger(FILE *sql_file, MYSQL_RES *show_create_trigger_rs,
const char *db_name,
const char *db_cl_name)
3334 fprintf(sql_file,
3335 "DELIMITER ;;\n"
3336 "/*!50003 %s */;;\n"
3337 "DELIMITER ;\n",
3338 (const char *) (query_str != NULL ? query_str : row[2]));
修改为:
3334 fprintf(sql_file,
3335 "DELIMITER $$\n"
3336 "/*!50003 %s */$$\n"
3337 "DELIMITER ;\n",
3338 (const char *) (query_str != NULL ? query_str : row[2]));
最后需要重新cmake一下make编译一下不需要make install 把mysqldump 拷贝到相应的目录即可
修改后
[root@testmy client]# more log.log |grep '$$'
DELIMITER $$
end */$$
DELIMITER $$
end $$
[root@testmy client]# /mysqldata/mysql3308/bin/mysql -uroot -pEnter password:
[root@testmy client]#
不会报错了。
文件一大了非常麻烦,最近遇到这样的问题。
[root@testmy client]# /mysqldata/mysql3308/bin/mysql -uroot -p
ERROR at line 63: DELIMITER must be followed by a 'delimiter' character or string
ERROR 1064 (42000) at line 64: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4
其实这里就是DELIMITER 后面的;;解析了,只要把;;转变为$$ 就好了.
[root@testmy client]# sed -i "s/;;/$$/g" log.sql
[root@testmy client]# /mysqldata/mysql3308/bin/mysql -uroot -p
[root@testmy client]#
当然我这里是测试库,如果真的是线上库量非常大作sed谈何容易。所以决定从mysqldump下手改一下标识即可。
下面是修改部分,因为MYSQLDUMP是独立的工具,这些函数全是static函数,可以放心修改,如果是外部函数真
还不敢改,修改源码的client/mysqldump.c 如下部分修改了:
static uint dump_events_for_db(char *db)
2547 fprintf(sql_file,
2548 "DELIMITER ;;\n"
2549 "%s ;;\n"
2550 "DELIMITER ;\n",
修改为
static uint dump_events_for_db(char *db)
2547 fprintf(sql_file,
2548 "DELIMITER $$\n"
2549 "%s $$\n"
2550 "DELIMITER ;\n",
static void dump_trigger_old(FILE *sql_file, MYSQL_RES *show_triggers_rs,
MYSQL_ROW *show_trigger_row,
const char *table_name)
3247 fprintf(sql_file,
3248 "DELIMITER ;;\n"
3249 "/*!50003 SET SESSION SQL_MODE=\"%s\" */;;\n"
3250 "/*!50003 CREATE */ ",
3251 (*show_trigger_row)[6]);
修改为:
3247 fprintf(sql_file,
3248 "DELIMITER $$\n"
3249 "/*!50003 SET SESSION SQL_MODE=\"%s\" */$\n"
3250 "/*!50003 CREATE */ ",
3251 (*show_trigger_row)[6]);
static int dump_trigger(FILE *sql_file, MYSQL_RES *show_create_trigger_rs,
const char *db_name,
const char *db_cl_name)
3334 fprintf(sql_file,
3335 "DELIMITER ;;\n"
3336 "/*!50003 %s */;;\n"
3337 "DELIMITER ;\n",
3338 (const char *) (query_str != NULL ? query_str : row[2]));
修改为:
3334 fprintf(sql_file,
3335 "DELIMITER $$\n"
3336 "/*!50003 %s */$$\n"
3337 "DELIMITER ;\n",
3338 (const char *) (query_str != NULL ? query_str : row[2]));
最后需要重新cmake一下make编译一下不需要make install 把mysqldump 拷贝到相应的目录即可
修改后
[root@testmy client]# more log.log |grep '$$'
DELIMITER $$
end */$$
DELIMITER $$
end $$
[root@testmy client]# /mysqldata/mysql3308/bin/mysql -uroot -p
[root@testmy client]#
不会报错了。
函数
部分
谈何容易
备份
就是
工具
拷贝
文件
标识
源码
目录
问题
麻烦
测试
独立
编译
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
东西湖定制软件开发方案
软件开发的专业知识技能
山西智能软件开发服务至上
甘肃职业技能大赛网络安全
蒙泰数据库
云桌面服务器gpu
京东软件开发加班多吗
dfs文件服务器中间件
萍乡app与软件开发费用
如何使用云服务器数据库
mc永恒世界服务器
网络安全繁荣文化
自己电脑做服务器可以做网站吗
mcpe服务器租用
山西网络安全服务
破解psv无法连接服务器
黑龙江知网数据库
游戏图标软件开发
凌云诺服务器配置
苏州软件开发哪家公司好
数据库的表列被称为
美国网络安全法特点是
服务器配置管理口图片
Ibm服务器主板黄灯亮了
谷歌有免费dns服务器吗
金蝶云星空服务器角色
机票预订系统数据库
海螺水泥软件开发
tr服务器
上传图片并保存到数据库