需要用到的两个参数:
--skip-grant-tables:跳过授权表
--skip-networking:跳过TCP/IP连接 //限制了远程登陆,只允许使用socket方式登录,避免造成安全问题
方法一:
可以在启动数据库的时候,加上--skip-grant-tables
~] # service mysqld start --skip-grant-tables --skip-networking
在启动数据库的时候跳过授权表
注意:必须使用service DEAMON start/restart,使用 systemctl不生效
方法二:
1. 关闭数据库
systemctl stop mysqld
2. 使用安全模式启动
mysqld_safe --skip-grant-tables --skip-networking &
或者
service mysqld start --skip-grant-tables --skip-networking
3. 登陆数据库并修改密码
[root@VM-16-80-centos ~]# mysql //无需密码就可以登录
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.17-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create user root@'%' identified by 'redhat';
ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement
MariaDB [(none)]> flush privileges; //刷新授权表,因为上一句报错是因为目前处于安全模式中,无法读取到授权表,因此也就无法修改密码
Query OK, 0 rows affected (0.003 sec)
MariaDB [(none)]> create user root@'%' identified by 'redhat';
Query OK, 0 rows affected (0.000 sec)
//此处可以使用create,也可以使用alter,alter本来就可以用来修改密码
4. 重启数据库到正常模式
service mysqld rstart
或者
systemctl restart mysqld
启动过程:
方法三:
可以将--skip-grant-tables --skip-networking直接添加到/etc/my.cnf配置文件中,如下:
[mysqld]
skip-grant-tables
skip-networking
然后restart数据库,直接可以无需密码登录
[root@VM-16-80-centos ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.17-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>