MySQL的几个知识点
今天上班没搞什么新的东西,所以简单写点儿MySQL相关的小的tip,希望对大家有所帮助吧,如果你恰好了解这些功能,那权当我没说过。
1、mysqldump可以将数据导出为csv文件。
今天在和同事讨论如何将MySQL中的数据流转到infobright的时候,同事提了两个方案,一个是select into outfile的方法,直接导入到一个csv文件中,还有一个是使用mysqldump进行导入,说实话,这个方法我之前没有用过,因为从来没有尝试过使用mysqldump来导出csv文件,一般导出数据到文件,都是使用的select into outfile的方法。于是我查了查资料,发现mysqldump真的可以导出csv文件,方法大概如下:
mysqldump -uroot -p123456 db_name tbl_name -t -T /data/mysql/data --fields-terminated-by=','
1、db_name;导出的数据库;
2、tbl_name;导出的数据表;
3、-t;不导出create 信息;
4、-T 指定导出文件位置的位置
5、--fields-enclosed-by=\" 字段引号;
6、--fields-terminated-by=, 字段分割符;
这里有几个点需要注意:
a、使用的用户需要有select和file权限
b、到处的目录必须让mysql用户有写权限
c、该操作只能在服务器本地进行,不能远程进行
d、可以结合-w参数,设置条件来过滤出想要到处的记录
2、MySQL8.0版本支持一个用户使用两个密码
这个是另外一个同事发现的,在MySQL8.0.14版本,可以查看官方文档,支持同时存在两个密码,大概讲一下逻辑:
我们知道,mysql中可以使用alter user的语法来修改密码,例如要将root密码置空,假设原来的密码是123456,我们可以使用alter user root@'localhost' identified by '';的方法,那么要在置空之后,使用原来的密码123456也能登录,可以使用下面的语法:
alter user root@'localhost' identified by '' retain current password
这个时候,就可以使用两个密码进行登录了,这个时候,如果我们想回收第一个密码123456,应该怎么办?使用下面的SQL:
alter user root@'localhost' discard old password
使用这个方法之后,老的密码123456将会不可用。
需要注意,在这个过程中,操作账号应该拥有application_password_admin权限或者create user的权限。
最后,这个新的功能有啥用?其实使用在某些对安全要求比较高的业务场景下面。例如业务需要每个季度更换一次登录密码,而且不能停机维护,要做到业务无感知,这种情况下,这个功能就派上用场了。
3、解析innodb数据文件的工具
今天下午还在想,如何能够查看ibdata.ibd这个文件中的内容,晚上就在老叶茶馆的公众号上看到的这个工具,叫innblock,它的功能是可以查看ibd数据文件,可以得到每一行数据的偏移量,并且按照逻辑和物理的顺序排序。给上github地址:https://github.com/gaopengcarl/innblock
还有一个工具叫bcview,可以讲数据文件按照既定的大小分块,例如16kb,然后访问每个块的偏移量后制定的字节数。地址和上面一样。
工具我还没有测试,大家有兴趣可以测试一下。
4、MySQL explain analyze
这也是MySQL8.0的新功能,它是用来分析和理解查询如何执行的,可以理解为一个对explain功能的完善吧。主要有下面2个分支:
a、检查查询计划
explain format=tree select xxxxx
该功能可以向我们显示查询计划和成本估算。
b、分析查询执行
explain analyze select xxxxx
显示在查询上花费的时间以及原因,并生成查询计划
具体用途:可以用来查询为何一个select语句花费了这么长时间?时间都花在了那里?或者是为什么优化器选择了这个计划?等等一系列问题,有兴趣大家可以翻看8.0的官方文档。