用户管理
登录用户
客户端远程登录mysql语法:
mysql -u 用户名 -p 密码 -h ip地址 -P 端口号
#如果没有改端口号就不用-P指定端口
[root@xiaobai] mysql -uroot -p'XiaoBai@123!' -h 192.168.202.128 #登录mysql
客户端登录如果报错就进入server端的mysql服务器执行如下操作:
登录MySQL
mysql> use mysql; #进入mysql库
mysql> update user set host = '%' where user = 'root'; #更新root用户的数据信息
mysql> flush privileges; #刷新表信息
-h 指定主机名 [默认为localhost]
-P(大写) MySQL服务器端口 [默认3306]
-u 指定用户名 [默认root]
-p(小写) 指定登录密码 [默认为空密码]
-e 接SQL语句,可以写多条,用分号隔开
-D(大写) 为mysql指定登录数据库
创建删除用户及授权
创建用户及授权
mysql> create user 'xiaobai'@'localhost' identified by 'XiaoBai@123!'; #创建mysql用户xiaobai,并设置密码'
mysql> flush privileges; #更新授权表
#删除xiaobai用户
mysql> drop user 'xiaobai'@'localhost'; #方法1'
mysql> delete from mysql.user where user='xiaobai' and mysql> host='localhost'; #方法2.要跟新表
mysql> flush privileges;
#创建用户语句解读
identified by:设置密码
'xiaobai'@' ':@后的两个引号中间可以是一个ip也可以是一个网段或所有主机
% :所有主机
192.168.202.% :允许192.168.202.0网段的所有主机
192.168.202.128 :指定主机
localhost:指定主机
#授权语句
mysql> grant all on *.* to 'xiaobai'@'localhost' identified by 'XiaoBai@123!'; #授权给xiaobai用户
'修改远程登录
mysql> use mysql;
mysql> update user set host = '192.168.202.%' where = 'xiaobai';
mysql> flush privileges; #刷新权限
修改完表后一定要刷新一下权限
#授权语句解读
grant #修改权限
all #所有权限,(不包括授权权限)
select,update #查看与更新权限
usage #链接登录权限(建立用户会自动添加这个权限)
select,insert #查看与添加数据权限
replication slave 拥有此权限可以查看从服务器,从主服务器读取二进制日志
super 允许用户使用修改全局变量的SET语句以及change master语句
reload 必须拥有reload权限,才可以执行flush [tables、logs、privileges]
#库与表
*.* 所有库所有表
db1.* db1库下的所有表
db1.t1 db1库下的t1表
#来源ip
% 任意来源
192.168.202.% 192.168.202网段的
little.xiaobai.com 域名
_ 代表任意一个字符
#注:生产环境中密码采用高级别的密码,实际生产环境中将'%'换成来源的ip
查看权限
mysql> show grants\G #查看自己的权限(\G:友好输出)
mysql> show grants for 'xiaobai'@'localhost'\G #查看xiaobai用户的权限
修改密码
[root@xiaobai] mysqladmin -uroot -p'XiaoBai@123!' password 'Little@123!' #前面为旧密码,后面为新密码,此命令是在终端上执行的
#修改自己密码
mysql> set password='Little@123!'; #直接写新密码,是在mysql数据库中更改的
#root修改其他用户密码
mysql> use mysql;
mysql> set password for 'xiaobai'@'localhost'='Little@123!'; #后跟新密码
mysql> flush privileges;
权限控制机制
四张表:user,db,tables_priv,columns_priv
1.用户认证 查看mysql.user表
2.权限认证 以select权限为例:
(1).先看 user表里的select_priv权限 。
(Y):不会接着查看其他的表, 拥有查看所有库所有表的权限 。
(N):接着看db表。
(2).db表: 存储了某个用户对一个数据库的权限。
(Y):不会接着查看其他的表 ,拥有查看所有库所有表的权限。
(N):接着看tables_priv表。
3.tables_priv表:可以对单个表进行权限设置
table_priv:如果这个字段的值里包括select, 拥有查看这张表所有字段的权限,不会再接着往下看了 。
table_priv:如果这个字段的值里不包括select,接着查看下张表还需要有column_priv字段权限。
4.columns_priv:针对数据列设置操作权限。
column_priv:有select,则只对某一列有select权限。
日志管理
日志格式 | 作用 |
---|---|
Error Log | 错误日志 :启动,停止,关闭失败报错。rpm安装日志位置 /var/log/mysqld.log ,默认开启 |
Binary Log | 二进制日志(bin log):实现备份,增量备份。只记录改变数据,除了select都记 |
General query log | 通用查询日志:所有的查询都记下来。 默认关闭,一般不开启 |
Relay log | 中继日志(Relay log):读取主服务器的binlog,在slave机器本地回放。保持与主服务器数据一致 |
Slow query log | 慢查询日志,指导调优,定义某一个查询语句,执行时间过长,通过日志提供调优建议给开发 人员 |
DDL log(metadata log) | 定义语句的日志 |
#错误日志配置
[root@xiaobai] vim /etc/my.cnf
log-error=/var/log/mysql.log #编译安装的在/usr/local/mysql/
#二进制日志配置
[root@xiaobai] vim /etc/my.cnf
log-bin=/var/log/mysql-bin/mylog #如果不指定路径默认在/var/lib/mysql
server-id=1 #主从复制时使用
[root@xiaobai] mkdir /var/log/mysql-bin
[root@xiaobai] chown mysql.mysql /var/log/mysql-bin/ #修改属主属组给mysql
[root@xiaobai] systemctl restart mysqld #重启mysql
bin-log日志
解决binlog日志不记录insert语句
登录mysql后,设置binlog的记录格式:
set binlog_format=statement;
然后,最好在my.cnf中添加:
binlog_format=statement
修改完配置文件之后记得重启服务
慢日志
慢查询日志
在mysql的配置文件中加
slow_query_log=1 #开启
slow_query_log_file=/var/log/mysql-slow/slow.log
long_query_time=3 #设置慢查询时间,单位为秒
保存退出后创建相对应的目录,并修改属主属组
重启mysql