mysql使用1(用户+权限)
Linux元素据(文件属性)存储在inode
忘记本地管理员密码(未忘记密码,直接使用mysqladmin -uroot -p password 新密码)
1关闭数据库
2维护模式启动:mysqld_safe --skip-grant-tables --skip-networking & //重置密码以后使用/etc/init.d/mysqld stop(restart)关闭
说明:--skip-grant-tables跳过授权表,--skip-networking跳过远程登陆
3执行mysql连接客户端,select user,host,authentication_string from mysql.user;查询用户
desc mysql.user;查询表字段,5.7版本密码是authentication_string字段
mysql.session和mysql.sys是系统内置用户
修改密码:
flush privileges; //必须先执行这句,因为--skip-grant-tables在启动时跳过了授权,所以这里要手动从磁盘加载授权表内存
grant all on . to root@'localhost' identified by '新密码'; //也可以用alter user root@'localhost' identified by '新密码';
mysql连接支持两种,远程tcp/ip,本地socket,不依赖网络(mysql -uroot -p密码 [-S /tmp/mysql.sock])
核心程序mysqld,数据文件ibd,实例(后台运行、守护运行的进程),启动时预分配内存大小(独占内存)
实例组成 = mysqld + master thread + work thread(s) + 预分配内存
mysqld服务器进程结构,客户端通过tcp/ip或socket请求连接到mysqld,由内部线程处理,经过连接层->SQL层(sql_mode,sql92标准)->存储引擎层->磁盘、内存、网络
查看连接线程命令:show processlist;终端使用mysql命令连接就是一个会话,在show processlist;能查到,默认能连151给会话,由参数max_connections控制,会话没有动作8小时断开,由参数wait_timeout控制
基于代价的最优执行方法:cpu,内存,io,时间消耗最少
逻辑结构的数据库,在物理存储上是数据文件目录下的一个文件夹,所以在/data/mysql下mkdir 文件夹,在mysql客户端执行show databases;能够查到
8.0版本不太支持MyISAM引擎
myisam的表,3个文件构成,表名.frm存储表结构(列、列属性),表名.MYD存储数据记录,表名.MYI存储索引,没有单独存放表的元数据(表属性)
innodb的表,2给文件构成,表名.frm存储表结构(列、列属性),表名.ibd存储数据记录和索引,数据字典信息(表的元数据即表属性)存在基表(数据目录下ibdata1文件,类似linux的inode)
innodb非分区表:页是最小io单元,区是最小分配单元,多个区构成段(一个表也称为一个段)
ibd文件,每页(page)16k(建库的时候可以调整),每次申请空间分配64页连续空间,即1m(如果page调整为32k,则每次分配32页,即1m),索引按页为单位
64页空间(1m)称为一个区
mysql的用户定义:用户名@'白名单'
举例(添加注释的3种指定网段的较常用,不建议用%,没有起到过滤的作用):
root@'%'
root@'localhost'
root@'127.0.0.1'
root@'10.0.0.%' 代表10.0.0.%/255.255.255.0,即10.0.0.1-10.0.0.255
root@'10.0.0.5%' 代表10.0.0.50-10.0.0.59
root@'10.0.0.0/255.255.254.0' 代表。。。
root@'10.0.%'
创建用户并授权(并设置密码):
create user 用户名@'白名单' identified by '密码'; 不指定identified by则只创建用户
select user,host from mysql.user; 查询用户
grant all on . to 用户@'白名单' identified by '密码'; 授权
8.0之前的版本可以不创建用户,直接授权就能自动创建用户:grant all on . to 用户@'白名单' identified by '密码';
修改用户密码:
alter user 用户名@'白名单' identified by '新密码';
删除用户(生产环境一般屏蔽该功能):
drop user 用户名@'白名单';
权限管理(all+with grant option构成管理员权限,普通用户一般只授予SELECT,UPDATE,INSERT,DELETE权限):
8.0之前,按命令(select、delete、update、insert、drop等)
8.0之后,设定角色,授权角色
权限列表:ALL(普通管理员)、。。。、with grant option(可以给别的用户授权的权限,本地管理员具备)
授权命令:
grant 权限(多给用逗号隔开) on 作用目标(库名.表名,都可以为*) to 用户@'白名单' identified by '密码' [with grant option];
查询权限:
show grants for 用户名@'白名单'; 若查询结果的权限是USAGE,表示只能登陆
回收分配的权限列表中的某些权限:
revoke 权限(如delete) on 作用目标 from 用户@'白名单';
生产中开用户:开发邮件申请
领导批复、作用目标、操作类型、客户端地址(白名单)、账号使用库名或业务名、root权限不给