当我尝试按照文档更改root密码时,出现SQL语法错误或密码未更新

时间:2017-11-17 16:03:06

标签: sql linux mariadb change-password

我在Linux机器上运行MariaDB MySQL。当我尝试按照文档更改密码时,MySQL在启动时给出了以下错误:

2017-11-17  9:25:47 139640910462912 [Note] Server socket created on IP: '::'.
ERROR: 1064 You have an error in your SQL syntax; check the manual that corresponds
   to your MariaDB server version for the right syntax to use near 
   'USER 'root'@'localhost' IDENTIFIED BY 'pA$sWord^';' at line 1
2017-11-17  9:25:47 139640910462912 [Note] mysqld: ready for connections.
Version: '10.1.28-MariaDB'  socket: '/run/mysqld/mysqld.sock'  port: 3306  MariaDB Server

The specific documentation我正在关注:

  

说明假设您将从中启动MySQL服务器   您通常用于运行它的Unix登录帐户。例如,   如果使用mysql登录帐户运行服务器,则应该登录   在使用说明之前为mysql。或者,您可以登录   作为root,但在这种情况下,您必须使用mysqld启动--user=mysql   选项。如果您在不使用root的情况下以--user=mysql启动服务器,   服务器可以在数据目录中创建根拥有的文件,例如   日志文件,这些可能会导致将来与权限相关的问题   服务器初创公司。如果发生这种情况,您需要更改   将文件归属于mysql或删除它们。

     

以MySQL服务器运行的Unix用户身份登录系统   (例如,mysql)。

     

如果MySQL服务器正在运行,请将其停止。找到那个.pid文件   包含服务器的进程ID。确切的位置和名称   文件取决于您的分发,主机名和配置。共同   地点是/var/lib/mysql//var/run/mysqld/和   /usr/local/mysql/data/。通常,文件名的扩展名为   .pid并以mysqld或您系统的主机名开头。

     

通过发送普通kill(不是kill -9)来停止MySQL服务器   mysqld进程。使用.pid文件的实际路径名   以下命令:

shell> kill `cat /mysql-data-directory/host_name.pid` 
     

使用cat命令使用反引号(不是正向引号)。这些导致了   cat的输出被替换为kill命令。

注意:我使用top来结束该过程。我确定它没有运行。

$ ps aux | grep mysql
user 30201  0.0  0.0  10884  2296 pts/6    S+   09:43   0:00 grep mysql
  

在a上创建一个包含密码赋值语句的文本文件   单线。用您想要的密码替换密码   使用

     

MySQL 5.7.6及更高版本:

     

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

     

MySQL 5.7.5及更早版本:

     

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

     

保存   文件。此示例假定您将文件命名为/home/me/mysql-init。   该文件包含密码,因此请勿将其保存在可以读取的位置   由其他用户。如果您未以mysql(服务器用户)身份登录   运行as),确保该文件具有允许mysql的权限   读它。

     

使用特殊的--init-file选项启动MySQL服务器:

shell> mysqld --init-file=/home/me/mysql-init & 
     

服务器执行   启动时--init-file选项命名的文件内容,   更改'root'@'localhost'帐户密码。

     

根据您的正常情况,也可能需要其他选项   启动你的服务器。例如,之前可能需要--defaults-file   --init-file

     

服务器成功启动后,删除/home/me/mysql-init

MariaDB版本:

$ sudo pacman -Q | grep mariadb
libmariadbclient 10.1.28-1
mariadb 10.1.28-1
mariadb-clients 10.1.28-1

档案/change_root_password.txt

$ ls -lha /change_root_pwd.txt 
-rwxrwxrwx 1 mysql mysql 56 Nov 17 09:24 /change_root_pwd.txt
$ cat /change_root_pwd.txt 
ALTER USER 'root'@'localhost' IDENTIFIED BY 'pA$sWord^';

用于启动导致上述错误的mysqld的命令:

sudo mysqld --user=mysql --init-file=/change_root_pwd.txt 
带有备用SQL查询的

I found this documentation

  

如果ALTER USER语句无法重置密码,请尝试重复   该过程使用以下语句来修改用户表   直接:

UPDATE mysql.user
    SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'
    WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

当我尝试而不是ALTER USER查询时,我没有收到任何错误,但密码没有得到更新。

1 个答案:

答案 0 :(得分:1)

在提出这个问题之前,也许我应该理解MariaDB和MySQL之间的区别。

我不知道为什么使用该方法重置root密码不起作用,但MariaDB有一种更简单的方法来更改root密码,这里记录了:

https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7

  

重置MariaDB Root密码

     

如果您忘记了根MariaDB密码,可以重置密码。

     

停止当前的MariaDB服务器实例,然后使用不要求输入密码的选项重新启动它:

sudo systemctl stop mariadb
sudo mysqld_safe --skip-grant-tables &
     

使用MariaDB root帐户重新连接MariaDB服务器:

mysql -u root
     

使用以下命令重置root用户密码。用强密码替换密码:

use mysql;
update user SET PASSWORD=PASSWORD("password") WHERE USER='root';
flush privileges;
exit
     

然后重启MariaDB:

sudo systemctl start mariadb