mysql修改密码遇到ERROR 1064 (42000): You have an error in your SQL syntax、ERROR 1290、ERROR 1396等报错解决方案
前提:mysql忘记密码,进行修改密码操作
修改配置文件
vim /etc/my.cnf
在 [mysqld] 小节下添加一行:(这一行配置让 mysqld 启动时不对密码进行验证)
skip-grant-tables=1
重启 mysqld 服务:
systemctl restart mysqld
无需密码就可以登录到 mysql:
mysql -u root
修改用户密码遇到的问题(ERROR 1064、ERROR 1290)
set password for root@localhost = password('ctsi@Passw0rd');
ALTER USER 'root'@'localhost' IDENTIFIED BY 'ctsi@Passw0rd';
这两种命令均出现报错,
mysql> set password for root@localhost = password('ctsi@Passw0rd');
ERROR 1064 (42000): 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 'for root@localhost = password('ctsi@Passw0rd')' at line 1
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'ctsi@Passw0rd';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
解决办法
执行//刷新系统权限表命令(flush privileges;)即可正常修改;
mysql> flush privileges;
Query OK, 0 rows affected (0.08 sec)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'ctsi@Passw0rd';
Query OK, 0 rows affected (0.02 sec)
创建用户遇到的问题(ERROR 1396)
mysql> CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'ctsi@Passw0rd';
ERROR 1396 (HY000): Operation CREATE USER failed for 'root'@'127.0.0.1'
解决办法
多半是因为之前创建过,有残留,删除痕迹即可
mysql> drop user 'root'@'127.0.0.1';
Query OK, 0 rows affected (0.02 sec)
常用创建用户及赋权命令
允许本地访问的用户(127.0.0.1)
mysql>CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '123456';
允许外网IP访问的用户
mysql>CREATE USER 'root'@'%' IDENTIFIED BY '123456';
授予用户在本地服务器对所有数据库的全部权限
mysql>grant all privileges on *.* to 'root'@'127.0.0.1';
mysql>alter user 'root'@'127.0.0.1' identified with mysql_native_password by '123456';
刷新授权
mysql>FLUSH PRIVILEGES;
创建一个专门用于主从复制的用户
mysql> create user 'repl'@'%' identified by '123456';
mysql> grant replication slave on *.* to 'repl'@'%';
mysql> flush privileges;