我在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查询的
如果ALTER USER语句无法重置密码,请尝试重复 该过程使用以下语句来修改用户表 直接:
UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost'; FLUSH PRIVILEGES;
当我尝试而不是ALTER USER
查询时,我没有收到任何错误,但密码没有得到更新。
答案 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