MySQL如果删除了所有用户怎么办?
前提:
1、 判断数据库有没有关闭
2、 判断数据库又没有主从
操作流程:
1、 先关闭数据库
2、 以不验证的方式登陆(无需密码)
3、 进入数据库中在mysql库中授权一个用户
4、 或者向mysql中的user表中插入数据
操作如下:
[[email protected] ~]# mysql -uroot -p123
ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
#这里指定了密码和用户也登陆不了
[[email protected] ~]# service mariadb stop
#停止数据库
[[email protected] ~]# mysqld_safe --skip-grant-tables --skip-networking &
#进行免密登陆
MariaDB [(none)]> use mysql
Database changed
MariaDB [mysql]> GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY ‘password‘ WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> select user, host from user;
------ -----------
| user | host |
------ -----------
| root | localhost |
------ -----------
1 row in set (0.00 sec)
第二种方法
如果使用这种方法需要了解user表中有哪些列
MariaDB [mysql]> desc user; ------------------------ ----------------------------------- ------ ----- --------- ------- | Field | Type | Null | Key | Default | Extra | ------------------------ ----------------------------------- ------ ----- --------- ------- | Host | char(60) | NO | PRI | | | | User | char(16) | NO | PRI | | | | Password | char(41) | NO | | | | | Select_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Insert_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Update_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Delete_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Create_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Drop_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Reload_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Shutdown_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Process_priv | enum(‘N‘,‘Y‘) | NO | | N | | | File_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Grant_priv | enum(‘N‘,‘Y‘) | NO | | N | | | References_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Index_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Alter_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Show_db_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Super_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Create_tmp_table_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Lock_tables_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Execute_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Repl_slave_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Repl_client_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Create_view_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Show_view_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Create_routine_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Alter_routine_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Create_user_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Event_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Trigger_priv | enum(‘N‘,‘Y‘) | NO | | N | | | Create_tablespace_priv | enum(‘N‘,‘Y‘) | NO | | N | | | ssl_type | enum(‘‘,‘ANY‘,‘X509‘,‘SPECIFIED‘) | NO | | | | | ssl_cipher | blob | NO | | NULL | | | x509_issuer | blob | NO | | NULL | | | x509_subject | blob | NO | | NULL | | | max_questions | int(11) unsigned | NO | | 0 | | | max_updates | int(11) unsigned | NO | | 0 | | | max_connections | int(11) unsigned | NO | | 0 | | | max_user_connections | int(11) | NO | | 0 | | | plugin | char(64) | NO | | | | | authentication_string | text | NO | | NULL | | ------------------------ ----------------------------------- ------ ----- --------- ------- 42 rows in set (0.01 sec) |
#这里是user表中的字段,如果需要插入超级用户需要有所有的权力,即这里的列为Y
操作语句
MariaDB [(none)]> insert into mysql.user values(‘127.0.0.1‘,‘root‘,PASSWORD(‘123‘),‘Y‘,‘Y‘, ‘Y‘, ‘Y‘, ‘Y‘, ‘Y‘,‘Y‘, ‘Y‘, ‘Y‘, ‘Y‘, ‘Y‘,‘Y‘, ‘Y‘, ‘Y‘, ‘Y‘, ‘Y‘,‘Y‘, ‘Y‘, ‘Y‘, ‘Y‘, ‘Y‘,‘Y‘, ‘Y‘, ‘Y‘, ‘Y‘, ‘Y‘,‘Y‘, ‘Y‘, ‘Y‘,‘‘,‘‘,‘‘,0,0,0,0,‘mysql_native_password‘,‘‘,‘N‘);
#重启数据库
MariaDB [mysql]> select user,host from user;
------ -----------
| user | host |
------ -----------
| root | 127.0.0.1 |
| root | localhost |
------ -----------
2 rows in set (0.00 sec)
mysql的连接
mysql命令是mysql自带的连接数据库工具,其本质是mysql客户端
常见参数有:
-u 指定用户
-p 指定密码
-h 指定IP地址用于远程连接
-S 指定soket文件
-e 指定使使用的sql语句
--protocol=name 指定连接方式
第三方工具
sqlyon、navtcat
mysqld_safe与mysqld区别
mysqld是mysql的守护进程。每次在使用mysql前必须先用它。mysqld是计算机进程,MySQL数据库服务器相关程序。
mysqld_safe
1. 检查系统和选项。
2. 检查MyISAM表。
3. 保持MySQL服务器窗口。
4. 启动并监视mysqld,如果因错误终止则重启。
5. 将mysqld的错误消息发送到数据目录中的host_name.err 文件。
6. 将mysqld_safe的屏幕输出发送到数据目录中的host_name.safe文件。
mysqld_safe的常用参数详解
参数 |
说明 |
--skip-grant-tables |
跳过安全验证 |
--skip-networking |
关闭tcp连接 |
--datadir=path |
指定安装目录 |
--basedir=path |
指定数据目录 |
--defaults-file=path |
指定数据库配置目录 |
--pid-file=path |
指定pid文件目录 |
--socket=path |
指定socket文件 |
--user=username |
指定启动用户 |
--port=3306 |
指定端口 |
--log-error |
指定错误日志目录 |
MySQL数据库启动流程