【已解答】MySql 密码含特殊字符备份失败
面板版本:宝塔linux面板 7.9.2系统版本:CentOS Linux release 7.9.2009 (Core)
问题现象:备份代码未考虑密码本身具有特殊字符时的情况,导致备份失败。
重现方式:mysql8.0 数据库密码为类似【b66v4_vX+b-,X&aDvb12)(sPre,&a*】,因含有特殊字符,而代码拼接出的 mysqldump 命令中 -p 参数内容没有用引号引起来会导致命令执行错误从而备份失败,由于未产生备份文件,后面会报 FileNotFoundError 错误,整个备份工作失败。
在/www/server/panel/class/panelBackup.py559 行开始下面的几行
导致
经试验,上述代码拼接命令处改为下面所示后,备份成功:
backup_cmd = mysqldump_bin + " -h " + conn_config['db_host'] + " -P " + str(conn_config['db_port']) + " -E -R --default-character-set="+ character +" --force --hex-blob --opt " + db_name + " -u " + str(conn_config['db_user']) + " -p'"+str(conn_config['db_password'])+"' 2>"+self._err_log+"| gzip > " + dfile
您好,您是通过命令行修改的吗?面板内是有判断过滤一些特殊字符的 谢花郎 发表于 2022-6-13 15:04
您好,您是通过命令行修改的吗?面板内是有判断过滤一些特殊字符的
这样的逻辑并不能覆盖到很多情况,宝塔自己的本机数据库在面板操作时不允许特殊符号做密码,但无法限制别人用命令行修改数据库,另外宝塔提供的添加远程数据库功能,这样也限制不到别人的远程数据库密码格式的,阿里云、腾讯云的云数据库密码格式可以有特殊符号,纳管到宝塔里后做备份就会报错。 宝塔用户_gexvvk 发表于 2022-6-13 15:59
这样的逻辑并不能覆盖到很多情况,宝塔自己的本机数据库在面板操作时不允许特殊符号做密码,但无法限制别 ...
感谢您的反馈,目前面板上的数据库密码规则没法完全兼容市面上云数据库包含特殊符号密码格式,后续会逐步兼容。 本帖最后由 宝塔用户_gexvvk 于 2022-6-28 16:54 编辑
大炮运维V587 发表于 2022-6-19 11:41
感谢您的反馈,目前面板上的数据库密码规则没法完全兼容市面上云数据库包含特殊符号密码格式,后续会逐步 ...
(1)宝塔在 mysql 所支持的数据库密码上限定了格式,我想是有其自己的理由的。这里并不需要讨论这个限制是否合理。
(2)也并不需要在密码格式上兼容别的所有云数据库厂商,只需在宝塔的备份程序里拼接 mysqldump 命令的时候加下引号就可以解决这个问题,这是 mysqldump 命令的选项。
如下图,我这里已经测试过了。
文件位置:/www/server/panel/class/panelBackup.py
宝塔用户_gexvvk 发表于 2022-6-28 16:50
(1)宝塔在 mysql 所支持的数据库密码上限定了格式,我想是有其自己的理由的。这里并不需要讨论这个限制 ...
感谢您的反馈,后续我们会进行优化,采取更合理的方式解决这个问题!
页:
[1]