这几天公司要求对上线项目做自动化备份要求,遇到了一些问题,要望:拜托给点建议。
以下是我的脚本:
报错信息:
结果验证:sql文件虽然存在,但是没有数据
test账户已经映射为最高权限
从截图报错信息看,还是test用户权限的问题,直接使用test用户登录mysql可以登录成功吗,参数与你脚本里面的信息保持一致
可以登录,dos窗口可以备份成功,写进脚本就报权限错误。
问题找到了,数据库密码太复杂,这个如何解决?项目对密码有要求,必须复杂点。
@少年Dev: 只要没有windows下的特殊字符密码,都可以识别吧, ”&”字符不可以使用,其余的可以试一下,
你们mysql服务器是运行在windows下吗?我们项目密码之类的都在配置文件里面,直接读取配置文件里的用户、密码等信息,密码也包含一些特殊字符,但是没遇到过你说的这种情况
@regis_code: 是windows环境mysql版本5.6
密码是qwert12345!@#¥%
但是识别不了
你们是写在my.ini文件吗?
@regis_code:dos可以识别,是mysql的问题
@少年Dev: 是使用.ini的文件
我在ubuntu服务器上做了个测试,使用英文的!, 会报错,需要在密码上增加单引号方可正常登录;
具体的操作
使用中文的感叹号 ! 不会报错,增加单引号和不增加单引号都可以正常登录
可以试着增加单引号试试,另外mysql密码及权限管理是有精确匹配的,不确定是不是这方面引起的。
@regis_code: windows环境登陆没问题,但是不能键入明文密码。初步估计是安装mysql的时候对密码安全策略做了修改,不过现在忘记怎么改回了,你说的配置my.ini文件也测试了,配置了不生效,具体原因不清。
@少年Dev: -p后面直接接密码,不能有空格
@regis_code: 那脚本里面是不是也不要空格
@regis_code: 查看了脚本里面没有空格,
@少年Dev: 先在命令行下,完整的输入你备份的命令,密码用单引号括起来,然后在测试脚本
@regis_code:
dos窗口手动备份没问题
@少年Dev: 命令行直接运行增加过-h的参数吗?按脚本里面的命令,除了替换参数,其他的都保持不变可以吗
@regis_code: 也没问题呀
@少年Dev: 查下用户信息看下吧
select user,host from mysql.user;
@regis_code:
@少年Dev: 脚本里面-h后增加的参数是127.0.0.1,你命令行里面用的是localhost,其实是有区别的,试一下改成127.0.0.1可以不,如果也可以我就没什么思路了....
@regis_code: 这个思路之前也测试过了.改成127.0.0.1或者本机IP地址都不行.
@少年Dev: 这个是我使用-hlocalhost 登录和-h127.0.0.1登录的区别,主机hosts已经127.0.0.1与localhost的映射关系
@少年Dev: 脚本运行也是用管理员权限运行的是吗
@regis_code: 对的,是管理员权限运行.问题是密码改成123456后脚本运行也是ok的.
@regis_code: GRANT ALL PRIVILEGES ON . TO 'root'@'%'IDENTIFIED BY 'root' WITH GRANT OPTION;---麻烦帮我看一下这个语句是什么含义?
@少年Dev: 将所有权限给到root用户,并支持用户root给其他用户赋权。
GRANT
ALL PRIVILEGES --所有权限
ON
. --所有库,一般我习惯. 这种写法,指的是所有库下所有表
TO 'root'@'%'IDENTIFIED BY 'root'
WITH GRANT OPTION; --使root用户有给其他用户赋权的权限
@少年Dev: 一般我习惯 星号.星号 这种写法,指的是所有库下所有表,上个评论星号被隐藏了
@regis_code:谢谢解答,不过那个语句也没用, 我用root账户执行报错同样复现.
@少年Dev:
从报错信息上看,还是连接数据库出现了问题
@regis_code: 应该是参数传递有问题,不识别@%,现在只能修改不带那两个参数的密码.
@regis_code: 你好,再问一下哦;下面这个报错遇到过么?
昨天备份还好好的,今天打开电脑就不行了.