mysql系列学习之一(零碎知识点) 发布日期:2017-03-03 00:27:13     博主推荐★

1、在输入命令mysql -uroot -p进入数据库管理之后,看到别人写\G 我却没有,比如show databases;和 show databases \G;一个是表格的一个是纵向的字符串一行行输出;


2、show engines;查看我们所能支持和不支持的数据库引擎,另外可以看到默认的数据库引擎,那么如何切换数据库引擎呢?

可以在[mysqld] 加入:default_storage_engine=InnoDB;重启即可,当然可能你会遇到重启不成功的问题,比如博主用的是wampserver,想试着将默认的InnoDB改成MyISAM但是改完之后发现重启不起来,查看发现mysql/data文件中除了数据库和auto.cnf意外,其他的都删掉,前提是wampserver要停掉服务,不然提示有进程在用,无法删除!

解决方案参看:https://blog.ahamu.cn/blog/detail.html?id=103


3、事务回滚相关

参考网址:http://wolfword.blog.51cto.com/4892126/1300300


4、innodb引擎的redo log日志的原理

参考网址:http://wolfword.blog.51cto.com/4892126/1288383


5、事务隔离级别

show variables like "tx_isolation";

(1)Serializable:可避免脏读、不可重复读、虚读情况的发生。

(2)Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读,是 mysql 默认的事务隔离级别)

(3)Read committed:可避免脏读情况发生。(读取已提交的数据)

(4)Read uncommitted:最低级别,以上情况均无法保证。(读取到了未提交的数据)

当我们将数据库的隔离级别设置为:Serializable 的时候,虽然可以避免所有并发访问的问题,但是 Serializable 采用的是单线程来解决并发访问的问题,也就是说在某一段时间内,只能有一个用户对数据库进行操作,导致其它用户阻塞。导致数据库的访问性能很差。

1.读未提交(Read Uncommitted):这种隔离级别可以让当前事务读取到其它事物还没有提交的数据。这种读取应该是在回滚段中完成的。通过上面的分析,这种隔离级别是最低的,会导致引发脏读,不可重复读,和幻读。

2.读已提交(Read Committed):这种隔离级别可以让当前事务读取到其它事物已经提交的数据。通过上面的分析,这种隔离级别会导致引发不可重复读,和幻读。

3.可重复读取(Repeatable Read):这种隔离级别可以保证在一个事物中多次读取特定记录的时候都是一样的。通过上面的分析,这种隔离级别会导致引发幻读。

4.串行(Serializable):这种隔离级别将事物放在一个队列中,每个事物开始之后,别的事物被挂起。同一个时间点只能有一个事物能操作数据库对象。这种隔离级别对于数据的完整性是最高的,但是同时大大降低了系统的可并发性。


6、mysql二进制日志

(1)binlog_cache_size和max_binlog_cache_size

查看代码:show variables like"%binlog_cache%";

(2)binlog_cache_use

查看代码:show status like "%binlog_cache_use%";

(3)sync_binlog

查看代码:show variables like"%sync_binlog%";

当前的参数是0,说明由系统来控制什么时候同步;

如果这个参数是1,那么每次提交一个事物都会与磁盘同步一次数据;

如果这个参数是2,那么每次提交二个事物都会与磁盘同步一次数据;

记住这些设置全部是针对同一个session的设置,不是共享的


7、日志功能

一般查询日志的作用是记录所有客户端发来的sql语句,也就是记录客户端的所有操作

Log参数将要过时,现在用general_log来代替,所以先两个都设置了

set global general_log=1;设置general_log

set globallog=1;设置log

也可以在my.cnf中添加参数

general_log=1

general_log_file=/tmp/chenzhongyang.log  这样来设定

但是一般情况下我们不打开查询日志功能,因为他对系统效率的影响很大


针对以上一个小小的总结,所有的系统可设置的参数,都可以通过show variables like"%XXX%";查询,所有的过程值都可以通过show status like "%xxx%";来查询


8、慢日志

(1)以前的版本中开启慢查询日志功能的参数是--log_slow_queries在my.cnf文件中指定,但是现在新的版本中用参数--slow_query_log和--slow_query_log_file来指定

slow_query_log=1

slow_query_log_file=/tmp/mysqlslow.log

(2)对于慢查询的定义

show variables like "%long%";//查询当前的long_query_time

set session long_query_time=1;//设置当前慢查询时长为1秒的时候写日志

(3)慢查询相关

如果log_queries_not_using_indexes为ON的话,当执行一个sql语句的时候,如果一个表没有索引就会把这个信息记录在慢查询文件中


9、修改密码

用root用户进入mysql->mysql->user修改密码语句:

update user set password=password('123456') where user='root' and host='localhost';//更改完,要重启下服务


10、mysqldumpslow.pl的用法

mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log

上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。
mysqldumpslow -t 10 -s t -g “left join” host-slow.log
这个是按照时间返回前10条里面含有左连接的sql语句。
用了这个工具就可以查询出来那些sql语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等。

注:
执行mysqldumpslow –h可以查看帮助信息。
主要介绍两个参数-s和-t
-s 这个是排序参数,可选的有:
al: 平均锁定时间
ar: 平均返回记录数
at: 平均查询时间
c: 计数
l: 锁定时间
r: 返回记录
t: 查询时间


11、max_connect_errors问题flush hosts;刷新记录数

12、mysql->user查看权限问题

13、variables查看参数、status查看当前的参数状态

14、更改user的时候需要flush privileges;刷新权限将重新加载user表的内容

15、mysqldump导出数据  mysqldump --databases my -uroot -p123456 -h127.0.0.1 -P3307 > test.sql


16、MyISAM 引擎的数据文件

(1)“.frm”文件  与表相关的元数据(meta)信息都存放在“.frm”文件中,包括表结构的定义信息等。不论是什么存储引擎,每一个表都会有一个以表名命名的“.frm”文件。所有的“.frm”文件都存放在所属数据库的文件夹下面。而且大小也不会变化

(2)“.MYD”文件  “.MYD”文件是MyISAM 存储引擎专用,存放MyISAM 表的数据。每一个MyISAM 表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,和“.frm”文件在一起。

(3)“.MYI”文件  “.MYI”文件也是专属于MyISAM存储引擎的,主要存放MyISAM表的索引相关信息。对于MyISAM存储来说,可以被cache 的内容主要就是来源于“.MYI”文件中。每一个MyISAM表对应一个“.MYI”文件,存放于位置和“.frm”以及“.MYD”一样。


17、innodb 引擎的数据文件

(1)innodb_file_per_table参数的作用是决定innodb引擎的数据是不是每个表一个文件,也就是说是不是每个表独享一个表文件。off表示的是共享,on表示的是独享

show variables like "%per_table%";



(2)“.ibd”文件和ibdata 文件

   ① 这两种文件都是存放Innodb 数据的文件,之所以有两种文件来存放Innodb 的数据(包括索引),是因为Innodb 的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。 独享表空间存储方式使用“.ibd”文件来存放数据,且每个表一个“.ibd”文件,文件存放在和MyISAM数据相同的位置。


   ② 如果选用共享存储表空间来存放数据,则会使用ibdata 文件来存放,所有表共同使用一个(或者多个,可自行配置)ibdata 文件。ibdata 文件可以通过innodb_data_home_dir 和innodb_data_file_path两个参数共同配置组成, innodb_data_home_dir 配置数据存放的总目录, 而innodb_data_file_path 配置每一个文件的名称。当然,也可以不配innodb_data_home_dir而直接在innodb_data_file_path参数配置的时候使用绝对路径来完成配置。

show variables like "%innodb_data%";

   ③ innodb_data_file_path中可以一次配置多个ibdata文件。文件可以是指定大小,也可以是自动扩展的,但是Innodb 限制了仅仅只有最后一个ibdata 文件能够配置成自动扩展类型。当我们需要添加新的ibdata 文件的时候,只能添加在innodb_data_file_path配置的最后,而且必须重启MySQL 才能完成ibdata 的添加工作。

  我们把参数innodb_file_per_table设置成on试试有什么变化,那么这个时候就是一个表一个数据文件了!



18、日志管理

日志主要分为row、Statement、Mixed三种形式!主要内容去百度,这里说的是如何查看日志的代码,因为直接打开是乱码,所以用 --base64-output=DECODE-ROWS -v 来打开日志

mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000004

blob.png

(1)Mysql BInlog日志格式可以通过mysql的my.cnf文件的属性binlog_format指定。如以下:

binlog_format           = MIXED                       //binlog日志格式

log_bin                      =目录/mysql-bin.log    //binlog日志名

expire_logs_days    = 7                                //binlog过期清理时间

max_binlog_size     = 100m                         //binlog每个日志文件大小


(2)Binlog日志格式选择

Mysql默认是使用Statement日志格式,推荐使用MIXED.

由于一些特殊使用,可以考虑使用ROWED,如自己通过binlog日志来同步数据的修改,这样会节省很多相关操作。对于binlog数据处理会变得非常轻松,相对mixed,解析也会很轻松(当然前提是增加的日志量所带来的IO开销在容忍的范围内即可)。


(3)mysqlbinlog格式选择

mysql对于日志格式的选定原则:如果是采用 INSERT,UPDATE,DELETE 等直接操作表的情况,则日志格式根据 binlog_format 的设定而记录,如果是采用 GRANT,REVOKE,SET PASSWORD 等管理语句来做的话,那么无论如何 都采用 SBR 模式记录





博文地址:https://blog.ahamu.cn/blog/detail.html?id=86
   
推荐文章
  • 1
    sysbench
    2020/07/08
  • 2
    phper转java记录篇-spring boot
    2020/06/10
  • 3
    thinkphp5.0使用路由之后,post请求的
    2020/05/19
  • 4
    springboot单元测试aop失效
    2020/05/15
  • 5
    脑海中的JVM
    2020/05/12
  • 6
    IDEA搜索插件时显示search results
    2020/05/12
  • 7
    spring boot 配置加载源码查找
    2020/04/20
  • 8
    通过javap命令分析java汇编指令
    2020/04/16
  • 9
    IDEA小知识:查看JVM内存使用情况的步骤
    2020/04/16
  • 10
    springboot-加载自定义的properti
    2020/04/14
  • 11
    Jenkins执行shell脚本无法启动子进程解决
    2020/04/03
  • 12
    mac idea激活找专业的
    2020/04/02
  • 13
    Jenkins + DockerSwarm 实现弹
    2020/03/31
  • 14
    mac swarm学习过程
    2020/03/31
  • 15
    spring cloud
    2020/03/18
  • 16
    JAVA开发中遇到的问题记录002
    2020/03/12
  • 17
    JAVA开发中遇到的问题记录001
    2020/03/07
  • 18
    php -i查看信息
    2020/02/23
  • 19
    phpStorm中使用xdebug工具调试dock
    2019/12/09
  • 20
    讲的比较好的B+树执行原理的文章
    2019/12/09
最喜标签
NYOJ 面试 AJAX ping CentOS 灰度算法 YII2