Linux学习之旅之MySQL用户管理
一、用户基础知识
完整用户名格式:'用户名'@'主机地址'
MySQL 用户不是单靠名字,用户名 + 主机 组合才是唯一账号
| 主机 |
说明 |
'root'@'localhost' |
只能本机登录,127.0.0.1,不允许外网 |
'user1'@'192.168.1.100' |
只能从这个 IP 登录 |
'user1'@'192.168.1.%' |
192.168.1 网段所有机器,% 通配符 |
'user1'@'%' |
任意 IP 都可以远程登录 |
mysql> select Host,User from mysql.user;
+-----------+------------------+
| Host | User |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
4 rows in set (0.01 sec)
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
二、用户管理
1、创建用户
mysql> create user 'xyx'@'10.0.0.%' identified by 'Xyx@123456';
Query OK, 0 rows affected (0.11 sec)
mysql> select host,user from mysql.user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| 10.0.0.% | xyx |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.01 sec)
2、修改用户
mysql> rename user 'xyx'@'10.0.0.%' to 'xyx'@'%';
Query OK, 0 rows affected (0.02 sec)
mysql> select host,user from mysql.user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | xyx |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.01 sec)
3、删除用户
mysql> drop user 'xyx'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> select host,user from mysql.user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
4 rows in set (0.00 sec)
4、修改密码
mysql> create user 'xyx'@'10.0.0.%' identified by 'Xyx@123456';
Query OK, 0 rows affected (0.02 sec)
mysql> select host,user from mysql.user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| 10.0.0.% | xyx |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)
mysql> alter user 'xyx'@'10.0.0.%' identified by 'Xyx@1234';
Query OK, 0 rows affected (0.02 sec)
三、权限管理
1、权限对比
#root用户
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| db1 |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.02 sec)
#未授权普通用户xyx
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+
2 rows in set (0.02 sec)
mysql> create database db2;
ERROR 1044 (42000): Access denied for user 'xyx'@'10.0.0.%' to database 'db2'
mysql>
2、授权
#grant 权限列表 on 库.表 to '用户名'@'主机';
mysql> grant all on *.* to 'xyx'@'10.0.0.%';
Query OK, 0 rows affected (0.02 sec)
#授权后
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| db1 |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
#此时用户xyx没有授权权限
mysql> create user 'myy'@'%' identified by 'Myy@1234';
Query OK, 0 rows affected (0.02 sec)
mysql> grant all on *.* to 'myy'@'%';
ERROR 1045 (28000): Access denied for user 'xyx'@'10.0.0.%' (using password: YES)
#权限授权后
mysql> grant all on *.* to 'xyx'@'10.0.0.%' with grant option;
Query OK, 0 rows affected (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> grant all on *.* to 'myy'@'%';
Query OK, 0 rows affected (0.03 sec)
#取消授权
mysql> revoke all on *.* from 'myy'@'%';
Query OK, 0 rows affected (0.01 sec)
四、索引
1、索引是什么
#索引就是数据库给表建立的「目录」,作用是加快查询速度,代价是占用磁盘空间、减慢增删改 (INSERT/UPDATE/DELETE) 速度。
#InnoDB是最常用存储引擎,索引底层是 B+ Tree
特点:
--所有数据都存在叶子节点
--叶子节点用链表相连,范围查询非常快
--非叶子节点只存索引键,不存真实数据,树高度很低,查询磁盘 IO 少
2、创建与删除索引
mysql> create index username on stu(name);
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc stu;
+--------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------------+------+-----+---------+----------------+
| id | int unsigned | NO | PRI | NULL | auto_increment |
| name | char(30) | YES | MUL | NULL | |
| mobile | char(11) | YES | | NULL | |
| age | tinyint unsigned | YES | | 18 | |
| is_del | tinyint(1) | YES | | 1 | |
+--------+------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql> show index from stu\G
*************************** 2. row ***************************
Table: stu
Non_unique: 1
Key_name: username
Seq_in_index: 1
Column_name: name
Collation: A
Cardinality: 9
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
Visible: YES
Expression: NULL
2 rows in set (0.00 sec)
mysql> drop index username on stu;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show index from stu\G
*************************** 1. row ***************************
Table: stu
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 9
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
Visible: YES
Expression: NULL
1 row in set (0.00 sec)
mysql> desc stu;
+--------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------------+------+-----+---------+----------------+
| id | int unsigned | NO | PRI | NULL | auto_increment |
| name | char(30) | YES | | NULL | |
| mobile | char(11) | YES | | NULL | |
| age | tinyint unsigned | YES | | 18 | |
| is_del | tinyint(1) | YES | | 1 | |
+--------+------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
五、环境变量和属性
1、变量种类
| 变量类型 |
符号 / 关键字 |
作用范围 |
生命周期 |
修改后是否永久 |
| 全局变量 |
@@global.变量名 |
所有新的客户端连接 |
MySQL 服务运行期间,重启失效 |
❌临时 set 修改会丢失;写到 my.cnf 才永久 |
| 会话变量 |
@@session.变量名 / @@local.变量名 |
仅当前这一个数据库连接 |
断开连接立刻消失 |
❌断开就失效 |
| 用户自定义变量 |
@变量名 |
当前会话连接 |
断开连接立刻消失 |
❌断开就失效 |
2、查看变量
mysql> show variables like "log%";
+----------------------------------------+----------------------------------------+
| Variable_name | Value |
+----------------------------------------+----------------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/binlog |
| log_bin_index | /var/lib/mysql/binlog.index |
| log_bin_trust_function_creators | OFF |
| log_error | /var/log/mysql/error.log |
| log_error_services | log_filter_internal; log_sink_internal |
| log_error_suppression_list | |
| log_error_verbosity | 2 |
| log_timestamps | UTC |
+----------------------------------------+----------------------------------------+
20 rows in set (0.00 sec)
mysql> SELECT @@global.max_connections;
+--------------------------+
| @@global.max_connections |
+--------------------------+
| 151 |
+--------------------------+
1 row in set (0.00 sec)
3、修改全局变量
mysql> set global max_connections=2000;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@global.max_connections;
+--------------------------+
| @@global.max_connections |
+--------------------------+
| 2000 |
+--------------------------+
1 row in set (0.00 sec)
4、修改会话变量
mysql> select @@session.autocommit;
+----------------------+
| @@session.autocommit |
+----------------------+
| 1 |
+----------------------+
1 row in set (0.00 sec)
mysql> select @@session.autocommit;
+----------------------+
| @@session.autocommit |
+----------------------+
| 0 |
+----------------------+
1 row in set (0.00 sec)
5、自定义变量
mysql> select @@session.autocommit;
+----------------------+
| @@session.autocommit |
+----------------------+
| 0 |
+----------------------+
1 row in set (0.00 sec)
mysql> set @xyx='XYX';
Query OK, 0 rows affected (0.00 sec)
mysql> select @xyx;
+------+
| @xyx |
+------+
| XYX |
+------+
1 row in set (0.00 sec)
root@MySQL-13:/etc/mysql# pwd
/etc/mysql
root@MySQL-13:/etc/mysql# ls
conf.d my.cnf mysql.conf.d