MySQL教程学习之面试题15_MySQL数据库综合型面试题汇总2
一、如何加强MySQL安全,请给出可行的具体措施?
1.避免直接从互联网访问mysql数据库,确保特定主机才拥有访问权限。
2.定期备份数据库
3.禁用或限制远程访问
在my.cnf文件里设置bind-address指定ip
4.移除test数据库(默认匿名用户可以访问test数据库)
5.禁用local infile
mysql> select load_file("");
在my.cnf里[mysqld]下添加set-variable=local-infile=0
6.移除匿名账户和废弃的账户
7.限制mysql数据库用户的权限
8.移除和禁用.mysql_history文件
# cat ~/.mysql_history
# export MYSQL_HISTFILE=/dev/null
二、delete和truncate删除数据的区别?
truncate table test执行更快,清空物理文件,清空表中的所有内容
delete from test是逻辑删除,按行删除,而且可以通过where语句选择要删除的行
三、MySQL Sleep线程过多如何解决?
mysql> show processlist\G
# mysqladmin -uroot -pfgedu123 processlist
修改my.cnf文件里的wait_timeout的值,让其更小一些,默认wait_timeout =28800,这里改为100
mysql> set global wait_timeout=100;
mysql> show global variables like "wait_timeout";
四、sort_buffer_size参数作用?如何在线修改生效?
mysql执行排序使用的缓冲大小。如果想要增加order by的速度,首先看是否可以让mysql使用索引而不是额外的排序阶段,如果不能,可以尝试增加sort_buffer_size变量的大小。
mysql> set global sort_buffer_size =131072; #单位为B,即128KB,默认64K
五、如何授权oldboy用户从192.168.1.0/24访问数据库。
mysql> grant all on *.* to fgedu@'192.168.1.%' identified by 'fgedu123';
六、什么是MySQL多实例,如何配置MySQL多实例?
风哥MySQL教程指示:在一台服务器上,mysql服务开启多个不同的端口,运行多个服务进程,这些mysql服务进程通过不同的socket来监听不同的数据端口,进而互不干涉的提供各自的服务。
七、如何在线正确清理MySQL binlog?
自动清除
mysql> set global expire_logs_days=15; #设置binlog过期时间为5天
手动清除
mysql> purge binary logs to "mysql-bin.000012"; #/删除mysql-bin.000007之前的所有binlog日志
八、MySQL的SQL语句如何优化,至少说出5条.
风哥MySQL学习教程指示:
1.在表中建立索引,优先考虑where、group by使用到的字段
2.尽量避免使用select *,返回无用的字段会降低查询效率
3.尽量避免使用in和not in,会导致数据库引擎放弃索引进行全表扫描
4.尽量避免使用or,会导致数据库引擎放弃索引进行全表扫描
5.尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描