第一次进入mysql是没有密码的。
但是必须以root权限进入。
sudo mysql;
或者
sudo mysql -u root -p; #由于没有密码,直接回车
通过客户端连接上mysql之后。
#修改密码
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘8888’;
现在登录就必须使用命令(但无需root权限)
mysql -u root -p
这mysql客户端里。
show global variables like ‘port’;
=================================================================================
注意这里说的是服务器,如果是客户端的话,使用quit
或者exit
退出客户端即可。
- 开启、重启、关闭
service mysql start;
service mysql restart;
service musql stop;
然后检查一下,进程是否存在
ps -ef | grep -v grep | grep mysqld
=========================================================================
所有创建的用户其实也都存储在数据库里。
进入客户端后。
use mysql;
查看已有用户(发现有一个用户 root),密码是加密的(不可逆)。
select host,user,authentication_string from user;
±----------±-----------------±-----------------------------------------------------------------------+
| host | user | authentication_string |
±----------±-----------------±-----------------------------------------------------------------------+
| localhost | debian-sys-maint | $A 005 005 005E.4]U;R!IJglg8z1k5ChuV/hyf7jBrhTPR59gr3l5AN2YjwXKUKs5zzgg7 |
| localhost | mysql.infoschema | $A 005 005 005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session | $A 005 005 005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys | $A 005 005 005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root | *79F03894C8051E03949A9F87C0824822405C5079 |
±----------±-----------------±-----------------------------------------------------------------------+
为了创建用户,就必须要知道存储用户的表结构。
使用如下命令。
show columns from user;
可以发现,有两个键是主键:要连接的客户端的主机名、用户名。
以及配置的各种权限(增删改查、建库建表等等)。
±-------------------------±----------------------------------±-----±----±----------------------±------+
| Field | Type | Null | Key | Default | Extra |
±-------------------------±----------------------------------±-----±----±----------------------±------+
| Host | char(255) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| 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 unsigned | NO | | 0 | |
| max_updates | int unsigned | NO | | 0 | |
| max_connections | int unsigned | NO | | 0 | |
| max_user_connections | int unsigned | NO | | 0 | |
| plugin | char(64) | NO | | caching_sha2_password | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum(‘N’,‘Y’) | NO | | N | |
| password_last_changed | timestamp | YES | | NULL | |
| password_lifetime | smallint unsigned | YES | | NULL | |
| account_locked | enum(‘N’,‘Y’) | NO | | N | |
| Create_role_priv | enum(‘N’,‘Y’) | NO | | N | |
| Drop_role_priv | enum(‘N’,‘Y’) | NO | | N | |
| Password_reuse_history | smallint unsigned | YES | | NULL | |
| Password_reuse_time | smallint unsigned | YES | | NULL | |
| Password_require_current | enum(‘N’,‘Y’) | YES | | NULL | |
| User_attributes | json | YES | | NULL | |
±-------------------------±----------------------------------±-----±----±----------------------±------+
但是不建议直接在这张表中插入数据。
举一个例子。
通过create user
语句。
用户名是guest,ip地址是我宿主机的名字,密码是8899。
create user ‘guest’@‘远程客户端ip’ identified by ‘8899’;
如果没有主机名,就是默认是%
,也就是对所有主机开放连接权限。
grant
命令就不细说了。可以参考《mysql必知必会》。
下面的命令将所有数据库的所有权限分配给某个用户(这里是 guest
)。
不过实际上这很危险
grant all privileges on . to ‘guest’;
出现下面的,是因为现在的mysql版本必须先创建用户然后分配权限。
ERROR 1410 (42000): You are not allowed to create a user with GRANT
检查某个用户的权限
show grants for ‘guest’;
在设置mysql允许远程访问,首先编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf;
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉bind-address = 127.0.0.1。
重启mysql服务器。
service mysql restart