数据库工程师整理最常见 mysql 面试题,每一道都是工作面试经典
1、如何启动 MySql 服务
Centos 7.x 系统
2、检测端口是否运行
3、设置或修改 MySql 密码
设置密码
更改密码
msyql 5.7 以上版本修改默认密码命令
4、登陆数据库
05
5、查看当前数据库的字符集
6、查看当前数据库版本
7、查看当前登录用户
8、创建 GBK 字符集数据库 mingongge 并查看完整创建语句
9、创建用户 mingongge 使用之可以管理数据库 mingongge
10、查看创建用户 mingongge 的权限
11、查看当前数据库有哪此用户
12、进入 mingongge 数据库
13、创建一个 innodb GBK 表 test,字段 id int(4)和 name varchar(16)
14、查看建表结构及表结构的 SQL 语句
15、插入一条数据“1,mingongge”
16、再批量插入 2 行数据“2,民工哥”,“3,mingonggeedu”
17、查询名字为 mingongge 的记录
18、把数据 id 等于 1 的名字 mingongge 更改为 mgg
19、在字段 name 前插入 age 字段,类型 tinyint(2)
20、不退出数据库,完成备份 mingongge 数据库
21、删除 test 表中的所有数据,并查看
22、删除表 test 和 mingongge 数据库并查看
23、不退出数据库恢复以上删除的数据
24、把库表的 GBK 字符集修改为 UTF8
25、把 id 列设置为主键,在 Name 字段上创建普通索引
26、在字段 name 后插入手机号字段(shouji),类型 char(11)
27、所有字段上插入 2 条记录(自行设定数据)
28、在手机字段上对前 8 个字符创建普通索引
29、查看创建的索引及索引类型等信息
30、删除 Name,shouji 列的索引
31、对 Name 列前 6 个字符以及手机列的前 8 个字符组建联合索引
32、查询手机号以 137 开头的,名字为 zhao 的记录(提前插入)
33、查询上述语句的执行计划(是否使用联合索引等)
34、把 test 表的引擎改成 MyISAM
35、收回 mingongge 用户的 select 权限
36、删除 mingongge 用户下数据库 mingongge
37、使用 mysqladmin 关闭数据库
38、MySQL 密码丢了,请找回?
001:请解释关系型数据库概念及主要特点?
关系型数据库模型是把复杂的数据结构归结为简单的二元关系,对数据的操作都是建立一个 或多个关系表格上
最大的特点就是二维的表格,通过 SQL 结构查询语句存取数据,保持数据 一致性方面很强大
002:请说出关系型数据库的典型产品、特点及应用场景?
mysql 互联网企业常用
oracle 大型传统企业应用软件
如数据备份、复杂连接查询、一致性数据存储等,还是使用 MySQL 或者其他传统的关系型数据库最合适
003:请解释非关系型数据库概念及主要特点?
非关系型数据库也被称为 NoSQL 数据库,数据存储不需有特有固定的表结构
特点:高性能、高并发、简单易安装
004:请说出非关系型数据库的典型产品、特点及应用场景?
memcaced 纯内存
redis 持久化缓存
mongodb 面向文档
如果需要短时间响应的查询操作,没有良好模式定义的数据存储,或者模式更改频繁的数据存储还是用 NoSQL
005:请详细描述 SQL 语句分类及对应代表性关键字
sql 语句分类如下
DDL 数据定义语言,用来定义数据库对象:库、表、列
代表性关键字:create alter drop
DML 数据操作语言,用来定义数据库记录
代表性关键字:insert delete update
DCL 数据控制语言,用来定义访问权限和安全级别
代表性关键字:grant deny revoke
DQL 数据查询语言,用来查询记录数据
代表性关键字:select
006:请详细描述 char(4)和 varchar(4)的差别
char 长度是固定不可变的,varchar 长度是可变的(在设定内)
比如同样写入 cn 字符,char 类型对应的长度是 4(cn+两个空格),但 varchar 类型对应长度是 2
007:如何创建一个 utf8 字符集的数据库 mingongge?
008:如何授权 mingongge 用户从 172.16.1.0/24 访问数据库
009:什么是 MySQL 多实例,如何配置 MySQL 多实例?
mysql 多实例就是在同一台服务器上启用多个 mysql 服务,它们监听不同的端口,运行多个服务进程
它们相互独立,互不影响的对外提供服务,便于节约服务器资源与后期架构扩展
多实例的配置方法有两种:
1、一个实例一个配置文件,不同端口
2、同一配置文件(my.cnf)下配置不同实例,基于 mysqld_multi 工具
具体配置请参考之前的文章
010:如何加强 MySQL 安全,请给出可行的具体措施?
1、删除数据库不使用的默认用户
2、配置相应的权限(包括远程连接)
3、不可在命令行界面下输入数据库的密码
4、定期修改密码与加强密码的复杂度
011:MySQL root 密码忘了如何找回?
012:delete 和 truncate 删除数据的区别?
前者删除数据可以恢复,它是逐条删除速度慢
后者是物理删除,不可恢复,它是整体删除速度快
013:MySQL Sleep 线程过多如何解决?
1、可以杀掉 sleep 进程,kill PID
2、修改配置,重启服务
如果生产服务器不可随便重启可以使用下面的方法解决
014:sort_buffer_size 参数作用?如何在线修改生效?
在每个 connection(session)第一次连接时需要使用到,来提访问性能
015:如何在线正确清理 MySQL binlog?
MySQL 中的 binlog 日志记录了数据中的数据变动,便于对数据的基于时间点和基于位置的恢复,但日志文件的大小会越来越大,点用大量的磁盘空间,因此需要定时清理一部分日志信息
手工删除:
首先查看主从库正在使用的 binlog 文件名称
删除之前一定要备份
自动删除:
通过设置 binlog 的过期时间让系统自动删除日志
016:Binlog 工作模式有哪些?各什么特点,企业如何选择?
1.Row(行模式)
日志中会记录成每一行数据被修改的形式,然后在 slave 端再对相同的数据进行修改
2.Statement(语句模式)
每一条修改的数据都会完整的记录到主库 master 的 binlog 里面,在 slave 上完整执行在 master 执行的 sql 语句
3.mixed(混合模式)
结合前面的两种模式,如果在工作中有使用函数 或者触发器等特殊功能需求的时候,使用混合模式
数据量达到比较高时候,它就会选择 statement 模式,而不会选择 Row Level 行模式
017:误操作执行了一个 drop 库 SQL 语句,如何完整恢复?
1、停止主从复制,在主库上执行锁表并刷新 binlog 操作,接着恢复之前的全备文件(比如 0 点的全备)
2、将 0 点时的 binlog 文件与全备到故障期间的 binlog 文件合并导出成 sql 语句
3、将导出的 sql 语句中 drop 语句删除,恢复到数据库中
018:mysqldump 备份使用了-A -B 参数,如何实现恢复单表?
-A 此参数作用是备份所有数据库(相当于--all-databases)
-B databasename 备份指定数据(单库备份使用)
备份时指定数据库与表名即可在恢复时只恢复单表
019:详述 MySQL 主从复制原理及配置主从的完整步骤
主从复制的原理如下:
主库开启 binlog 功能并授权从库连接主库,从库通过 change master 得到主库的相关同步信息然后连接主库进行验证,主库 IO 线程根据从库 slave 线程的请求,从 master.info 开始记录的位置点向下开始取信息,同时把取到的位置点和最新的位置与 binlog 信息一同发给从库 IO 线程,从库将相关的 sql 语句存放在 relay-log 里面,最终从库的 sql 线程将 relay-log 里的 sql 语句应用到从库上,至此整个同步过程完成,之后将是无限重复上述过程
完整步骤如下:
1、主库开启 binlog 功能,并进行全备,将全备文件推送到从库服务器上 2、show master statusG 记录下当前的位置信息及二进制文件名 3、登陆从库恢复全备文件 4、执行 change master to 语句 5、执行 start slave and show slave statusG
这些题我已经整理成 pdf 文档免费分享给那些有需要的朋友,同时整理也花费了蛮多时间,需要这份资料的,点击这里即可查看获取方式
版权声明: 本文为 InfoQ 作者【小Q】的原创文章。
原文链接:【http://xie.infoq.cn/article/8c7a5e1e397579008c41fb003】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
评论