当我尝试按照文档更改 root 密码时,出现 SQL 语法错误或密码未更新
When I attempt to change the root password by following the documentation, I get a SQL Syntax Error or the password doesn't update
我在 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 我正在关注:
The instructions assume that you will start the MySQL server from the
Unix login account that you normally use for running it. For example,
if you run the server using the mysql
login account, you should log in
as mysql
before using the instructions. Alternatively, you can log in
as root
, but in this case you must start mysqld
with the --user=mysql
option. If you start the server as root
without using --user=mysql
,
the server may create root-owned files in the data directory, such as
log files, and these may cause permission-related problems for future
server startups. If that happens, you will need to either change the
ownership of the files to mysql or remove them.
Log on to your system as the Unix user that the MySQL server runs as
(for example, mysql
).
Stop the MySQL server if it is running. Locate the .pid
file that
contains the server's process ID. The exact location and name of this
file depend on your distribution, host name, and configuration. Common
locations are /var/lib/mysql/
, /var/run/mysqld/
, and
/usr/local/mysql/data/
. Generally, the file name has an extension of
.pid
and begins with either mysqld
or your system's host name.
Stop the MySQL server by sending a normal kill
(not kill -9
) to the
mysqld
process. Use the actual path name of the .pid file in the
following command:
shell> kill `cat /mysql-data-directory/host_name.pid`
Use backticks (not forward quotation marks) with the cat command. These cause the
output of cat to be substituted into the kill command.
注意:我使用 top
来结束进程。我确定它不是 运行.
$ ps aux | grep mysql
user 30201 0.0 0.0 10884 2296 pts/6 S+ 09:43 0:00 grep mysql
Create a text file containing the password-assignment statement on a
single line. Replace the password with the password that you want to
use.
MySQL 5.7.6 and later:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
MySQL 5.7.5 and earlier:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
Save the
file. This example assumes that you name the file /home/me/mysql-init
.
The file contains the password, so do not save it where it can be read
by other users. If you are not logged in as mysql
(the user the server
runs as), make sure that the file has permissions that permit mysql
to
read it.
Start the MySQL server with the special --init-file option:
shell> mysqld --init-file=/home/me/mysql-init &
The server executes
the contents of the file named by the --init-file
option at startup,
changing the 'root'@'localhost'
account password.
Other options may be necessary as well, depending on how you normally
start your server. For example, --defaults-file
may be needed before
--init-file
.
After the server has started successfully, delete /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 查询:
If the ALTER USER statement fails to reset the password, try repeating
the procedure using the following statements to modify the user table
directly:
UPDATE mysql.user
SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
当我尝试使用 ALTER USER
查询时,我没有收到任何错误,但密码没有更新。
也许在问这个问题之前我应该明白MariaDB和MySQL的区别
我不知道为什么使用该方法重置 root 密码不起作用,但 MariaDB 有更简单的方法来更改 root 密码,记录在此处:
https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7
Reset the MariaDB Root Password
If you forget your root MariaDB password, it can be reset.
Stop the current MariaDB server instance, then restart it with an option to not ask for a password:
sudo systemctl stop mariadb
sudo mysqld_safe --skip-grant-tables &
Reconnect to the MariaDB server with the MariaDB root account:
mysql -u root
Use the following commands to reset root’s password. Replace password with a strong password:
use mysql;
update user SET PASSWORD=PASSWORD("password") WHERE USER='root';
flush privileges;
exit
Then restart MariaDB:
sudo systemctl start mariadb
我在 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 我正在关注:
The instructions assume that you will start the MySQL server from the Unix login account that you normally use for running it. For example, if you run the server using the
mysql
login account, you should log in asmysql
before using the instructions. Alternatively, you can log in asroot
, but in this case you must startmysqld
with the--user=mysql
option. If you start the server asroot
without using--user=mysql
, the server may create root-owned files in the data directory, such as log files, and these may cause permission-related problems for future server startups. If that happens, you will need to either change the ownership of the files to mysql or remove them.Log on to your system as the Unix user that the MySQL server runs as (for example,
mysql
).Stop the MySQL server if it is running. Locate the
.pid
file that contains the server's process ID. The exact location and name of this file depend on your distribution, host name, and configuration. Common locations are/var/lib/mysql/
,/var/run/mysqld/
, and/usr/local/mysql/data/
. Generally, the file name has an extension of.pid
and begins with eithermysqld
or your system's host name.Stop the MySQL server by sending a normal
kill
(notkill -9
) to themysqld
process. Use the actual path name of the .pid file in the following command:shell> kill `cat /mysql-data-directory/host_name.pid`
Use backticks (not forward quotation marks) with the cat command. These cause the output of cat to be substituted into the kill command.
注意:我使用 top
来结束进程。我确定它不是 运行.
$ ps aux | grep mysql
user 30201 0.0 0.0 10884 2296 pts/6 S+ 09:43 0:00 grep mysql
Create a text file containing the password-assignment statement on a single line. Replace the password with the password that you want to use.
MySQL 5.7.6 and later:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
MySQL 5.7.5 and earlier:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
Save the file. This example assumes that you name the file
/home/me/mysql-init
. The file contains the password, so do not save it where it can be read by other users. If you are not logged in asmysql
(the user the server runs as), make sure that the file has permissions that permitmysql
to read it.Start the MySQL server with the special --init-file option:
shell> mysqld --init-file=/home/me/mysql-init &
The server executes the contents of the file named by the
--init-file
option at startup, changing the'root'@'localhost'
account password.Other options may be necessary as well, depending on how you normally start your server. For example,
--defaults-file
may be needed before--init-file
.After the server has started successfully, delete
/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 查询:
If the ALTER USER statement fails to reset the password, try repeating the procedure using the following statements to modify the user table directly:
UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost'; FLUSH PRIVILEGES;
当我尝试使用 ALTER USER
查询时,我没有收到任何错误,但密码没有更新。
也许在问这个问题之前我应该明白MariaDB和MySQL的区别
我不知道为什么使用该方法重置 root 密码不起作用,但 MariaDB 有更简单的方法来更改 root 密码,记录在此处:
https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7
Reset the MariaDB Root Password
If you forget your root MariaDB password, it can be reset.
Stop the current MariaDB server instance, then restart it with an option to not ask for a password:
sudo systemctl stop mariadb sudo mysqld_safe --skip-grant-tables &
Reconnect to the MariaDB server with the MariaDB root account:
mysql -u root
Use the following commands to reset root’s password. Replace password with a strong password:
use mysql; update user SET PASSWORD=PASSWORD("password") WHERE USER='root'; flush privileges; exit
Then restart MariaDB:
sudo systemctl start mariadb