percona MYSQL 5.7.13 5.7.14 MYSQLDUMP 导入报错delimiter (修改MYSQLDUMP代码)
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,percona 5.7.13 5.7.14 MYSQLDUMP备份完成后不能呢导回去,文件一大了非常麻烦,最近遇到这样的问题。[root@testmy client]# /mysqldata/mysq
千家信息网最后更新 2025年02月02日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安全错误
数据库的锁怎样保障安全
陕西智慧城管软件开发系统
网络技术与应用哪本书好点
中央网办网络安全中心
cf服务器连接超时请重启客户端
计算机网络技术183班
美国网络安全事故
启尚科技软件开发待遇
惠普服务器统一管理
小型服装店用什么数据库
金山云网络技术有限公司网站
怎么设置远程连接数据库
网络安全三同步管控针对
汇冠股份 投资 网络安全
浙江防爆刀片服务器供应
忻尔软件开发
财政局网络安全各项制度
网络安全的内容包括保密性
当前数据库安全的主要挑战
关于网络安全大赛的游戏
网络安全绑定手机号更换
数据库关闭窗口代码实例
提升网络安全教育的有效途径
网络安全昌平综合台
网上认证服务器地址
整个汉字数据库
视频存储数据库
重庆服务器电源订购
福州手机直播软件开发
汇冠股份 投资 网络安全
网络安全征文获奖标题