首页 文章

当我尝试通过遵循文档更改root密码时,我收到SQL语法错误或密码不更新

提问于
浏览
0

我在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我在关注:

说明假定您将从通常用于运行它的Unix登录帐户启动MySQL服务器 . 例如,如果使用mysql登录帐户运行服务器,则应在使用说明之前以mysql身份登录 . 或者,您可以以root用户身份登录,但在这种情况下,您必须使用--user = mysql选项启动mysqld . 如果以root身份启动服务器而不使用--user = mysql,则服务器可能会在数据目录中创建根拥有的文件,例如日志文件,这些可能会导致将来的服务器启动时出现与权限相关的问题 . 如果发生这种情况,您需要将文件的所有权更改为mysql或删除它们 . 以MySQL服务器运行的Unix用户身份登录到您的系统(例如,mysql) . 如果MySQL服务器正在运行,请将其停止 . 找到包含服务器进程ID的.pid文件 . 此文件的确切位置和名称取决于您的分发,主机名和配置 . 常见位置是/ var / lib / mysql /,/ var / run / mysqld /和/ usr / local / mysql / data / . 通常,文件名的扩展名为.pid,以mysqld或系统的主机名开头 . 通过向mysqld进程发送正常kill(而不是kill -9)来停止MySQL服务器 . 在以下命令中使用.pid文件的实际路径名:shell> killcat / 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

在一行上创建一个包含密码赋值语句的文本文件 . 将密码替换为您要使用的密码 . MySQL 5.7.6及更高版本:ALTER USER'root'@'localhost'ENFENTIFIED BY'MyNewPass'; MySQL 5.7.5及更早版本:SET PASSWORD FOR'root'@'localhost'= PASSWORD('MyNewPass');保存文件 . 此示例假定您将文件命名为/ home / me / mysql-init . 该文件包含密码,因此请勿将其保存在其他用户可以读取的位置 . 如果您未以mysql(服务器运行的用户身份)身份登录,请确保该文件具有允许mysql读取它的权限 . 使用特殊的--init-file选项启动MySQL服务器:shell> mysqld --init-file = / home / me / mysql-init&
服务器在启动时执行由--init-file选项命名的文件的内容,更改'root'@'localhost'帐户密码 . 其他选项也可能是必需的,具体取决于您正常启动服务器的方式 . 例如,在--init-file之前可能需要--defaults-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

I found this documentation使用备用SQL查询:

如果ALTER USER语句无法重置密码,请尝试使用以下语句重复该过程以直接修改用户表:UPDATE mysql.user
SET authentication_string = PASSWORD('MyNewPass'),password_expired ='N'
WHERE User ='root'AND Host ='localhost';
FLUSH特权;

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

1 回答

  • 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用户密码 . 用强密码替换密码:使用mysql;
    更新用户SET PASSWORD = PASSWORD(“password”)WHERE USER ='root';
    冲洗特权;
    出口
    然后重启MariaDB:sudo systemctl start mariadb

相关问题