Linux运维 第四阶段 (五)MySQL用户和权限管理、日志管理
一、用户和权限管理:
1、相关概念:
》mysql用户:
类似VSFTPD虚拟用户;
密码,自己独有的加密机制,PASSWORD函数;
用户名@主机;
用户名16字符以内,主机(主机名、IP、网络地址、通配符(%,_);
--skip-name-resolve(跳过名称解析,可提高用户连接速度)
账号是用来认证的;
>RENAME USER ‘old_name’@’host’ TO ‘new_name’@’host; (重命名用户)
》权限,授权后才能访问表(数据);
mysql自身库中的表:user,db,host,tables_priv,columns_priv,procs_priv:
user:user account,globalprivileges and other non-privileges column; 全局级别(SUPER,REPLICATION SLAVE,SHUTDOWN)
db:database-levelprivileges 库级权限
host:obsolete 已废弃
tables-priv:table-levelprivileges 表级权限(DELETE,ALTER,TRIGGER,SELECT,INSERT,UPDATE)
columns_priv:column-levelprivileges 列级别权限(SELECT,INSERT,UPDATE)
procs_priv:stored procedure andfunction privileges 存储过程和存储函数权限
proxies_priv:proxy-userprivileges 代理用户权限
mysql在启动时会读取这六张表,并在内存中生成授权表,且每执行一个SQL语句都要检查是否有权限读取或写入;
2、>SELECT * FROM db\G
>CREATE TEMPORARY TABLE tb_name; (临时表――内存表);
USAGE (仅用作连接mysql-server和一些简单命令的使用)
触发器trigger:主动数据库(在执行某些操作时,触发已定义好的语句,如日志记录)
>HELP CREATE USER (创建用户)
>CREATE USER ‘username’@’host’ [IDENTIFIED BY ‘new_pw’];
>FLUSH PRIVILEGES;
>HELP GRANT (给用户授权)
>GRANT privileges1,privileges2 ON [object_type]db_name.tb_name TO ‘username’@’host’ [IDENTIFIED BY ‘new_pw’] [REQUIRE NONE|ssl_option] [WITH with_option];
注:db_name.tb_name(priv_level):
*
*.*
db_name.*
db_name.tb_name
tb_name
db_name.routine_name
with_option:
GRANT_OPTION 用户可将自己已有权限授权给其它用户,非常危险,不建议使用
|MAX_QUERIES_PER_HOUR count 每小时最多查询数
|MAX_UPDATES_PER_HOUR count 第小时最多更新多少条
|MAX_CONNECTIONS_PER_HOUR count 每小时可最多连接失败多少次
|MAX_USER_CONNECTIONS count 同一个用户账号共连进多少次
例:>GRANT EXECUTE ON FUNCTION db.abc TO username@’%’; (当无法判断tb_name是什么对象时使用此项,此例明确说明abc是函数,tb_name不一定都是表,也会是存储过程PROCEDURE和存储函数FUNCTION)
>GRANT UPDATE ON jiaowu.tutors TO ‘username’@’%’ REQUIRE SSL; (连接时必须要以SSL建立安全连接,还可以以X509方式)
>GRANT UPDATE(Age) ON jiaowu,stu TO ‘username’@’host’; (仅授权某字段)
>GRANT SUPER ON *.* TO ‘username’@’host’; (SUPER与WITH GRANTOPTION两项要慎重授权)
>SHOW GRANTS FOR ‘username’@’host’; (查看某用户权限,字段授权与库、表授权不在同一行)
>HELP REVOKE
>REVOKE priv1,priv2 ON db_name.tb_name FROM ‘user’@’host’;
3、重新找回管理员密码:
#service mysqld stop
#vim /etc/rc.d/init.d/mysqld
$bindir/mysqld_safe --skip-grant-tables --skip-networking --datadir="$datadir"--pid-file="$mysqld_pid……(添加--skip-grant-tables跳过授权表和--skip-networking禁止连接网络)
#service mysqld start
#mysql
>UPDATE mysql.user SET PASSWORD=PASSWORD(‘new_password’) WHERE User=’root’;
(仅能通过手动更改user表中内容,不能用SET及mysqladmin更改密码,因为授权表已跳过)
#service mysqld stop(停止服务将/etc/rc.d/init.d/mysqld改回原来状态,重启服务即可)。
二、日志管理
1、错误日志:
服务器启动和关闭过程中的信息;
服务器运行过程中的错误信息;
事件调度器运行一个事件时产生的信息;
在从服务器上启动从服务器进程时产生的信息;
local.localdomain.err 默认在数据目录中,主机名.err
log_warnings 默认记录(0不记录|1记录)
log_err
2、一般查询日志:默认关闭,若开启有关数据库所有操作都记录,浪费磁盘空间,关键消耗系统资源(大量磁盘IO,任何产生IO的地方就是性能降低的地方)
general_log
general_log_file
localhost.log
log_output FILE|TABLE|NONE (可保存至表中,注意若打开了general_log但log_output为NONE,则不会记录任何信息)
3、慢查询日志:生产环境下分析用,提高性能的指标
long_query_time 默认为10S
log_slow_queries等同于slow_query_log
slow_query_log_file 或更改位置要重启服务
log_output FILE|TABLE|NONE
>SET GLOBAL slow_query_log=1 动态调整,永久生效要写入配置文件
4、中继日志:在slave-server上要执行的日志
relay-log
FIO(Fusion-IO)
IOPS:每秒执行的IO数,一般磁盘100,好的SCSI 200,SSD1000-2000
5、二进制日志:任何引起或可能引起数据库变化的操作,可用于复制及即时点恢复
二进制日志滚动:达到设定的上限值;>FLUSH LOGS;每重启服务;
二进制日志最好单独放在另一做了LVM的磁盘上;
格式:statement;row;mixed
事件:产生的时间(starttime);相对位置(position)
文件:索引文件mysql-bin.index、二进制日志文件如mysql-bin.000001
命令:
#mysqlbinlog mysql-bin.000001(查看二进制日志文件内容,不给选项则是文件全部内容)
--start-datetime (格式:’yyyy-mm-dd hh:mm:ss’
--stop-datetime (不指stop则是到文件尾部)
--start-position
--stop-position
>SHOW MASTER STATUS; (查看当前正在使用的二进制日志)
>SHOW BINARY LOGS; (查看服务器二进制日志)
>SHOW BINLOG EVENTS IN ‘mysql-bin.000001’[FROM 107]; (在mysql命令行模式下查看二进制日志内容)
>PURGE BINARY LOGS TO ‘mysql-bin.000005’; (删除5之前的二进制日志文件,不包括5,不能用#rm -rf直接删除二进制日志,否则mysql会崩溃)
>FLUSH LOGS; (仅滚动二进制日志,错误日志是关闭后再打开,在slave-server上是滚动中继日志)
binlog_cache_size
binlog_stmt_cache-size 调高性能可提高,但潜在的丢失的数据量也大,不建议调大
log_bin 是否启用二进制日志
sql_log_bin 用在即时点还原,还原前临时关闭写入二进制日志,恢复好后再开启
sync_binlog 设置多少次操作同步到磁盘,0不同步,此项与autocommit有关
max_binlog_cache_size 控制上限
max_binlog_size
6、事务日志:
事务性存储引擎来保证ACID(atomicity,consistency,isolation,durability)
事务日志可用来rollback回滚,而二进制日志是重放redo
二进制日志是用来还原数据库的,而事务日志是用来保证事务本身的可靠性
innodb_flush_log_at_trx_commit (
0,每秒同步并执行磁盘flush操作;
1,每事务同步,并执行磁盘flush操作;
2,每事务同步,但不执行磁盘flush操作,由OS决定什么时候flush,常用此项)
innodb_log_buffer_size 内存缓冲大小,默认8M
innodb_log_file_size 日志文件大小,默认5M
innodb_log_files_in_group 默认2(高级用法:可将做成两组镜像)
innodb_log_group_home_dir
innodb_mirrored_log_groups
>SHOW ENGINES;
MRG_MyISAM
ARCHIVE 归档,将表归档压缩存放
CSV 利用文本文件存储表(方便移植)
MEMORY
BLACKHOLE
注:不建议使用混合引擎,要么使用MyISAM,要么使用InnoDB。
MyISAM:
不支持事务;
表锁,锁力度大,读多性能还行,读写一样多时性能会下降;
不支持外键;
BTREE索引,FULLTEXT,支持空间索引。
InnoDB:
OLTP在线事务处理;
行级锁,锁力度精细;
BTREE索引,聚簇索引,自适应hash索引;
表空间,raw磁盘设备(裸设备)
本篇是学习《马哥网络视频》做的笔记。
本文出自 “Linux运维重难点学习笔记” 博客,谢绝转载!