MySQL主从复制为从库授权时报错:SQL语法错误求助
解决MySQL从库授权时的1064语法错误
嘿,这个问题我之前帮同事排查过,核心原因是你用的MySQL版本(大概率是8.0及以上)已经彻底弃用了GRANT语句里带IDENTIFIED BY PASSWORD的写法,而且从8.0开始,创建用户和授权必须分成两步操作,不能在同一条语句里完成。
为什么会报错?
在MySQL 5.7及更早的版本里,你可以在GRANT语句里同时完成用户创建、密码设置和权限授予,但8.0版本做了权限体系的优化:
- 移除了
GRANT语句中设置密码的语法,不再支持IDENTIFIED BY PASSWORD这种写法 - 要求必须先创建用户,再单独执行授权操作
- 另外,就算你用的是明文密码,去掉
PASSWORD关键字,8.0也不允许在GRANT里附带密码设置了
正确的操作流程
1. 先创建目标用户(如果用户还不存在)
如果你用明文密码设置,执行这条:
CREATE USER 'root'@'172.17.0.5' IDENTIFIED BY 'root123';
如果你的密码是已经哈希过的密文(比如从旧库导出的密码字符串),可以用这个写法:
CREATE USER 'root'@'172.17.0.5' IDENTIFIED BY PASSWORD '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B';
(上面的密文是root123的MD5哈希值,你需要替换成自己实际的哈希密码)
2. 给用户授予复制从库所需的权限
GRANT REPLICATION SLAVE ON *.* TO 'root'@'172.17.0.5';
3. 刷新权限(可选,但建议执行)
这一步能让权限变更立即生效:
FLUSH PRIVILEGES;
如果你用的是MySQL 5.7及更早版本
要是你的数据库版本比较旧,也可以用简化的写法(不过还是推荐按分开的步骤来,方便后续升级):
- 明文密码的情况,去掉
PASSWORD关键字:
GRANT REPLICATION SLAVE ON *.* TO root@'172.17.0.5' IDENTIFIED BY 'root123';
- 哈希密码的情况,保留
PASSWORD:
GRANT REPLICATION SLAVE ON *.* TO root@'172.17.0.5' IDENTIFIED BY PASSWORD '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B';
内容的提问来源于stack exchange,提问作者gann yee
相关产品推荐
相关产品推荐

