MySQL面试相关问题及答案

(1)基础笔试命令考察

1.开启MySQL服务
systemctl start mysqld 或 service mysqld start

2.检测端口是否运行
lsof -i :3306 或 netstat -anpult | grep 3306

3.为MySQL设置密码或者修改密码。
A.mysqladmin方法
mysqladmin -u用户名 -p旧密码 password 新密码
例:mysqladmin -uroot -p123456 password 12345
B.set password命令
登陆MySQL
set password for 用户名@localhost = password(‘新密码’);
例:set pasword for root@localhost = password(‘123456’);
C.update直接编辑user表
use mysql;
update user set password=password(‘123456’) where user=‘root’ and host=‘localhost’;
flush privileges;

4.登陆MySQL数据库。
mysql -h localhost -P 3306 -uroot -p

5.查看当前数据库的字符集
show create database 库名\G

6.查看当前数据库版本
mysql -V
select version();

7.查看当前登录的用户。
select user();

8.创建GBK字符集的数据库test,并查看已建库完整语句
create database test character set GBK;
show create database test;

9.创建用户testuser,使之可以管理数据库test
grant all privileges on test.* to ‘testuser’@‘localhost’ identified by ‘12QW!@qw’;

10.查看创建的用户testuser拥有哪些权限
show grants for ‘testuser’@‘localhost’;

11.查看当前数据库里有哪些用户
select user,host from mysql.user;

12.进入test数据库
use test;

13.创建一innodb utf8表test,字段id int(4)和name varchar(16)
create table test(id int(4),name varchar(16)) engine=innodb;

14.查看建表结构及表结构的SQL语句
show create table test;
desc test;

15.插入一条数据“1,teststu”
insert into test values(1,‘teststu’);

16.再批量插入2行数据 “2,学生”,“3,教师”
insert into test(id,name) values(2,‘学生’),(3,‘教师’);

17.查询名字为"学生"的记录
select id,name from test where name=‘学生’;

18.把数据id等于1的名字teststu更改为testedu
update test set name=‘testedu’ where id=1;

19.在字段name前插入age字段,类型tinyint(2),完成后再删除此字段。
alter table test add age tinyint(2) after id;
alter table test drop age;

20.不退出数据库,完成备份test数据库到/home
system mysqldump -uroot -p -B test > /home/test.sql

21.删除test表中的所有数据,并查看
delete from test; 会生成日志,序号ID会延续之前
truncate table test; 无日志,序号ID重新开始
select * from test;

22.删除表test和test数据库并查看
drop table test;
show databases;

23.不退出数据库恢复以上删除的数据
system mysql -uroot -p < /home/test.sql

24.把库表的GBK字符集修改为UTF8。
alter database test default character set utf8;
alter table test default character set utf8;

25.把id列设置为主键,在Name字段上创建普通索引。
alter table test add primary key(id);
alter table test add index index_name(name);

26.在字段name后插入手机号字段(shouji),类型char(11)。
alter table test add shouji char(11) after name;

27.所有字段上插入2条记录(自行设定数据)
insert into test(id,name,shouji) values (4,‘医生’,‘12345678901’),(5,‘工人’,‘90876543212’);

28.在手机字段上对前8个字符创建普通索引。
create index index_shouji on test(shouji(8));

29.查看创建的索引及索引类型等信息。
show index from test\G

30.删除Name,shouji列的索引。
alter table test drop index index_name;
alter table test drop index index_shouji;

31.对Name列的前6个字符以及手机列的前8个字符组建联合索引。
create index index_name_shouji on test(name(6),shouji(8));

32.查询手机号以123开头的,名字为医生的记录(提前插入)。
select * from test where name=‘医生’ and shouji like ‘123%’;

33.查询上述语句的执行计划(是否使用联合索引等)。
explain select * from test where name=‘医生’ and shouji like ‘123%’\G

34.把test表的引擎改成MyISAM。
alter table test engine=myisam;

35.收回testuser用户的select权限。
revoke select on test.* from testuser@‘localhost’;

36.删除test用户。
delete from mysql.user where user=‘testuser’;

37.删除test数据库。
drop database test;

38.使用mysqladmin关闭数据库。
mysqladmin -uroot -p shudown

39.MySQL密码丢了,请找回?
my.cnf 加入配置项 skip-grant-tables 重启登陆
updata user set password=password(‘123456’) where user=‘root’;
flush privileges;
注释后重启新密码登陆

(2)MySQL运维基础知识面试问答题

面试题001:请解释关系型数据库概念及主要特点?

是指采用了关系模型来组织的数据库。由二维表及其之间的联系所组成的一个数据组织。

特点:
数据集中控制,数据独立,数据共享,减少数据冗余,数据结构化
其优点:事物的一致性。容易理解,使用方便,易于维护,支持SQL。
其缺点:高并发读写需求,对传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
海量数据的高效读写,对于数据量巨大的网站来说,关系型数据库查询效率非常低。
固定表结构。

面试题002:请说出关系型数据库的典型产品、特点及应用场景?

SQLserver特点:真正的客户机/服务器体系结构图形化用户界面,丰富的编程接口工具与Windows NT 完全集成具有很好的伸缩性。应用场景:主机为Windows系统,主要应用于web网站的建设,承载中小型web后台数据。

MySQL特点:体积小,成本低,开放源代码,可运行多数系统平台上,轻量级,易扩展。高并发读写需求:网站的用户并发非常高,往往达到每秒上万请求,硬盘I/O是瓶颈。应用场景:广泛应用在Internet上的中小型网站中。

Oracle特点:跨平台运行,安全。性能最高,对硬件要求高,价格昂贵。应用场景:大部分国企事业单位都用Oracle,在电信行业占用最大的份额。

面试题003:请解释非关系型数据库概念及主要特点?
是指那些非关系型的,分布式的数据库。特点:一般不保证ACID的数据存储系统。使用键值对存储数据且结构不固定。数据没有耦合性,容易扩展,不停工SQL支持,学习使用成本较高。

面试题004:请说出非关系型数据库的典型产品、特点及应用场景?

MongoDB特点:高性能,易部署,易使用。面向集合存储,易存储对象类型的数据,模式只有,自动处理脆片,以支持云计算层次的扩展性。应用场景:网站数据,MongoDB非常适合实时插入,更新与查询。缓存,适合作为信息基础设施的缓存层,大尺寸、低价值的数据。高伸缩性的场景

Redis特点:性能极高,能支持超过100k+每秒的读写频率。丰富的数据类型,所有操作都是原子性的。使用场景:少量的数据存储,高速的读写访问。

SQLlite特点:嵌入式,零配置,无需安装和管理配置。ACID事务。存储在单一磁盘文件中的一个完整的数据库。应用场景:需要数据库的小型桌面软件。需要数据库的手机软件,作为数据容器的应用场景。

面试题005:请详细描述SQL语句分类及对应代表性关键字。
DDL(Data Definition Language) 数据库定义语言(create,alter,drop),管理基础数据库,例如:库,表。
DCL(Data Control Language)数据控制语言(grant、revoke、commit、rollback),用户授权,权限收回,数据提交回滚等。
DML(Data Manipulation Language)数据操作语言(select、insert、delete、update)针对数据库里的标记录

面试题006:请详细描述char(4)和varchar(4)的差别。
char(4)定义的是固定长度4,存储时如果字符数不够4位,会在后面用空格补全入数据库。
varchar(4)定义的是变长长度,存储时如果字符没有达到定义的位数4时,也不会在后面补空格。

面试题007:如何创建一个utf8字符集的数据库test?
create databases test character set utf8;

面试题008:如何授权testuser用户从172.16.1.0/24访问数据库。
grant all on . to ‘testuser’@‘172.16.1.%’ identified by ‘123456’;

面试题009:什么是MySQL多实例,如何配置MySQL多实例?
在一台服务器上,MySQL服务开启多个不同的端口,运行多个服务进程,这些MySQL服务进程通过不同的socket来监听不同的数据端口,进而互不干涉的提供各自的服务。
配置不同的配置文件指向不同的数据文件夹和相应的端口。通过配置文件启动MySQL服务。

面试题010:如何加强MySQL安全,请给出可行的具体措施?
避免直接从互联网访问MySQL数据库,确保特定主机才拥有访问权限。
定期备份数据库
禁用或限制远程访问
在my.cnf文件中设置bind-address 指定ip
移除test数据库(默认匿名用户可以访问test数据库)
禁用 local infile 。 数据库中执行 select load_file(’/etc/passwd’); 。在my.cnf 里[mysqld]下添加 set-variable=local-infile=0
移除匿名账户和废弃的账户
限制MySQL数据库用户的权限
移除和禁用.mysql_history 文件 cat ~/.mysql_history export MYSQL_HISTFILE=/dev/null

面试题011:MySQL root密码忘了如何找回?
my.cnf 加入配置项 skip-grant-tables 重启登陆
updata user set password=password(‘123456’) where user=‘root’;
flush privileges;
my.cnf 注释后重启新密码登陆

面试题012:delete和truncate删除数据的区别?
truncate table test 执行更快,清空物理文件,清空表中的所有内容。
delete from test 是逻辑删除,安行删除,而且可以通过where语句选择要删除的行

面试题013:MySQL Sleep线程过多如何解决?
查看方式show processlist\G 或命令行 mysqladmin -uroot -p processlist
修改my.cnf 文件中的wait_timeout 的值,让其更小一些,默认 wait_timeout=2880,改为100.
set global wait_timeout=100;
show global variables like ‘wait_timeout’;

面试题014:sort_buffer_size参数作用?如何在线修改生效?
mysql 执行排序使用的缓冲大小,如果想要增加order by 的速度,首先看是否可以让 mysql 使用索引而不是额外的排序阶段,如果不能,可以尝试增加sort_buffer_size 变量的大小。
set global sort_buffer_size=131072;单位为B,即128K,默认64K

面试题015:如何在线正确清理MySQL binlog?
自动清除 set global expire_logs_days=30;设置binlog过期时间为30天
手动清除 purge binary logs to ‘mysql-bin.000003’; 删除mysql-bin.000003之前的所有binlog日志

面试题016:Binlog工作模式有哪些?各什么特点,企业如何选择?
row level 行级模式。优点,记录数据详细(每行),主从一致。缺点,占用大量的磁盘空间,降低了磁盘的性能。
statement level 模式(默认)。优点,记录的简单,内容少,节约了IO,提高性能。缺点,导致主从不一致。
MIXED 混合模式。结合了statement 和 row 模式的优点,会根据执行的每一条具体SQL语句来区分对待记录的日志形式。对于函数,触发器,存储过程会自动使用row level模式
企业场景选择:
statement 模式,使用mysql的功能较少(不用存储过程,触发器,函数),选择默认的。
MIXED模式,用到mysql的特殊功能(存储过程,触发器,函数)
row模式, 用到mysql的特殊功能(存储过程,触发器,函数),有希望数据最大化一致性。

面试题017:误操作执行了一个drop库SQL语句,如何完整恢复?
如果条件允许,操作前禁止外面一切服务器访问mysql数据库。具体步骤如下,
手动切割binlog日志并记好切割好的binlog日志文件位置,这里假设为187,备份全部binlog日志
找到之前全备份数据最后备份到的binlog文件位置并记好位置,这里假设150
用mysqladmin命令将150到187的binlog文件中的SQL语句分离出来,并找到drop库的语句将其删除
将之前全备份数据导入mysql服务器
将步骤3中分离的SQL语句导入mysql服务器
将009binlog文件删除,再次刷新binlog日志,到此数据库已恢复成功。

面试题018:mysqldump备份使用了-A -B参数,如何实现恢复单表?
先用sed或awk将全库中的需要的表结构过滤出来
sed -e’/./{H;$!d;}’ -e ‘x;/CREATE TABLE test/!d;q’ /backup/test.sql > test_create.sql
再用grep 将全库中相应的表内容过滤出来
grep 'INSERT INTO t_order’ /backup/dbname.sql > test_data.sql
将sed 和grep 的数据导入到数据库即可

面试题019:详述MySQL主从复制原理及配置主从的完整步骤。
主:binlog线程,记录所有改变了数据库的语句,放进master上的binlog中
从:IO线程,在使用start slave 之后,负责从master上拉取binlog内容,放进自己的relay log 中
从:SQL执行线程,执行relay log 中的语句。
配置步骤:
主库开启binlog日志功能
全备份数据库,记录好binlog文件和相应的位置
从库上配置和主库的连接信息
将全备份数据导入从库
从库启动slave
在从库上查看同步状态,确认是否同步成功

面试题020:如何开启从库的binlog功能?
在my.cnf 文件中写入log-bin=mysql-bin

面试题021:MySQL如何实现双向互为主从复制,并说明应用场景?
两台数据库都开启binlog功能,相互为主从配置
双主的实现方式主要有两种:
1、让表的ID自增,然后主1写1、3、5,主2写2、4、6
2、不让表的ID自增,然后通过web端程序去seq 服务器取ID,写入双主。
双主工作场景为高并发写的场景,慎用。

面试题022:MySQL如何实现级联同步,并说明应用场景?
每一台数据库开启binlog功能设为主服务器,第二台数据库也开启binlog功能,设为第一台服务器的从服务器,设为其他数据库主服务器

面试题023:MySQL主从复制故障如何解决?
办法一:登陆从库上操作
stop slave; 临时停止同步开关
set global sql_slave_skip_counter=1; 将同步指针向下移动一个,也可以多一个,如果多次不同步,可以重复操作。
start slave;重启主从复制开关

办法二:在my.cnf 配置文件中加入参数
slave-skip-errors=1123,1457

办法三:主库binlog日志找到相应的节点,删除从库中错误点数据。导入相应的节点数据。

面试题024:如何监控主从复制是否故障?
查看slave 端的IO和SQL进程状态是否OK,同步延迟时间是否小于1分钟
show slave status\G

面试题025:MySQL数据库如何实现读写分离?
通过程序实现读写分离(性能,效率最佳。推荐)PHP和Java程序都可以通过设置多个连接文件轻松实现对数据库的读写分离。
通过软件实现读写分离MySQL-proxy,Amoeba 等代理软件可以实现读写分离功能,但最常用最好用的还是程序实现读写分离。
开发dbproxy

面试题026:生产一主多从从库宕机,如何手工恢复?
处理方法,重做slave
停止slave
导入备份数据
配置master.info 信息
启动slave
检查从库状态

面试题027:生产一主多从主库宕机,如何手工恢复?
1、主库宕机分为数据库宕机和服务器宕机,不管哪种都要进行主从切换
2、登陆从库检查IO线程和SQL线程状态 show processlist\G ,确认SQL线程已读完,所有 relay-log
3、登陆所有从库检查master.info 信息,查看哪个从库的binlog文件和位置是最新的,选择最新的从库切换为主库(或利用半同步功能,直接悬着做了实时同步的从库为主库)
4、如果主库只是库宕了,服务还在运行,则可以把binlog拉取到提升为主库的从库应用。
5、登陆要切换为主库的从库,进行切换操作。stop slave; reset master; quit;
6、进入要切换的从库数据目录,删除master.info和relay-log.info文件,并检查授权表,read_only等参数
7、修改my.cnf 配置文件,开启binlog,注释从库参数 log-bin=/data/3306/mysql-master-bin #log-slave-updates #read-only
8、对同步用户进行提权,保证权限与主库用户权限一样,重启数据库提升为主库
9、其他从库操作 检查运行环境和用户,停止从库,修改master信息 ,启动从库同步,检查同步状态
10、修改web程序的连接配置,从原主库指向新主库
11、维护损坏的主库,完成后作为从库使用,或切换回来
12、如果主库没有宕机,只是想按计划切换一下主库。 主库锁表 登陆所有从库检查同步状态,查看是否完成同步, 其它按上面步骤进行切换

面试题028:工作中遇到过哪些数据库故障,请描述2个例子?
主从复制延迟。
数据库读写压力较大,访问速度较慢。

面试题029:MySQL出现复制延迟有哪些原因?如何解决?
1、主从库太多复制延迟,建议从库数量3-5个为宜,要复制的从节点数量过多,会导致复制延迟。
2、从库硬件比主库差,导致复制延迟。查看master和slave的系统配置,可能会因为机器配置问题,包括磁盘IO、CPU、内存等各方面因素造成复制的延迟,一般发生在高并发大数据的写入场景。
3、慢SQL语句过多。假如一条SQL语句执行时间是20秒,那么执行完毕到从库上能查到至少是290秒,可以修改分多次写入,通过查询慢日志或show full processlist 命令找出来执行时间长的查询语句或者大的事物。
4、主从复制设计问题 主从复制单线程,如果主库写并发太大,来不及传送到从库就会导致延迟,更高版本的mysql可以支持多线程复制。
5、主从库之间的网络延迟 主库的网卡,网线,连接的交换机等网络设备都可能成为复制的瓶颈,导致复制延迟,另外,跨公网主从复制很容易导致主从复制延迟。
6、主库读写压力大,导致复制延迟。 主库硬件要高一些,架构的前端要加buffer。

面试题030:给出企业生产大型MySQL集群架构可行备份方案?
利用mysqldump 做定时备份,根据情况可按天或按周做全库备份。
用rsync 对主库binlog做实时备份

面试题031:什么是数据库事务,事务有哪些特性?企业如何选择?
事务就是指逻辑上的一组SQL语句操作,组成这组操作的各个SQL语句,执行时要么全成功要么全失败。
事务的四大特性(ACID):
原子性 整个事务的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误会被回滚到事务开始前的状态
一致性 事务发生前和发生后,数据的完整性必须保持一致
隔离性 当并发访问数据库时,一个正在执行的事物在执行完毕前,对于其他的会话是不可见的,多个并发事物之间的数据是相互隔离的
持久性 一个事物一旦被提交,它对数据库中的数据改变就是永久性的,如果出了错误,事物也不允许撤销。

面试题032:请解释全备、增备、冷备、热备概念及企业实践经验?
全备:备份数据库所有数据
增备:一次性备份所有数据,然后在增量备份
冷备:需要关闭mysql服务,读写请求均不允许写请求的情况下备份
温备:服务在线,但仅支持读请求,不允许写请求的情况下备份
热备:备份的同时,业务不受影响

面试题033:MySQL的SQL语句如何优化?
在表中建立索引,优先考虑where、group by 使用到的字段
尽量避免使用select * ,返回无用的字段会降低查询效率
尽量避免使用 in 和 not in ,会导致数据库引擎放弃索引进行权标扫描
尽量避免使用 or ,会导致数据库引擎放弃索引进行全表扫描
尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描

面试题034:企业生产MySQL集群架构如何设计备份方案?
部署3台及以上服务器,做主从架构,实现读写分离以及灾备需求。定时全备以及实时增量备份。

面试题035:开发有一堆数据发给dba执行,DBA执行需注意什么?
需要注意语句是否有格式上的错误,执行时会出错导致过程中断
还需要注意语句的执行时间是否过长,是否会对服务器负载产生压力,影响实际生产

面试题036:如何调整生产线中MySQL数据库的字符集。
首先导出库的表结构 -d 只导出表结构,然后批量替换
导出库中的所有数据(不在生产新数据的前提下)
全局替换 set names = …
删除原有库与表,并新创建出来,在导入建库与建表语句与所有数据

面试题037:请描述MySQL里中文数据乱码原理,如何防止乱码?
服务器系统、数据库、客户端三方字符集不一致导致,需要统一字符

面试题038:企业生产MySQL如何优化(请多角度描述)?
提升服务器硬件资源与网络带宽
优化mysql服务配置文件
开启慢查询日志然后分析问题所在

面试题039:MySQL高可用方案有哪些,各自特点,企业如何选择?
主从复制+读写分离
优点:成本低、架构简单、易实施,维护方便
缺点:master出现问题后不能自动到slave上,需要人工干涉
MySQL cluster
优点:安全性高,稳定性高。可以在线增加节点
缺点:架构复杂,至少三个节点,对于引擎只能用ndb ,不支持外键,管理复杂,部署费时且是收费的。
heartbeat/keepalived + 双主从复制
优点:安全性,稳定性高,出现故障系统将自动切换,从而保证服务的连续性
缺点:可能会发生脑裂
Heartbeat+DRBD+MySQL
优点:安全性、稳定性、出现故障系统将自动切换,从而保证服务的连续性
缺点:只用一台服务器提供服务,成本高,可能发生脑裂

面试题040:如何分表分库备份及批量恢复(口述脚本实现过程)?
备份库 mysqldump -u 用户名 -p 密码 数据库名 > 备份的文件名
备份表 mysqldump -u 用户名 -p 密码 数据库名 表名 > 备份的文件名

面试题041:如何批量更改数据库表的引擎?
通过mysqldump命令备份一个sql文件,再用sed命令替换,或脚本进行修改
#!/bin/sh
user=root
passwd=123456
cmd="mysql -u u s e r − p user -p userppasswd "
dump=“mysqldump -u u s e r − p user -p userppasswd”
for database in $cmd -e "show databases;"|sed '1,2d'|egrep -v "mysql|performance_schema"
do
for tables in dump -e "show tables from $databses;"|sed '1d'
do
$cmd “alter table d a t a b a s e . database. database.tables engine = MyISAm;”
done
done

面试题042:如何批量更改数据库字符集?
#!/bin/bash
cmd=‘msql -uroot -p123456 -e’
$cmd ‘show databases;’|grep -v Database > /home/file.txt
database=/home/file.txt
for n in cat $database
do
$cmd ‘alter database $n default character set utf8;’
done

面试题043:网站打开慢,请给出排查方法,如是数据库慢导致,如何排查并解决,请分析并举例?
检查操作系统是否负载过高
登陆mysql查看有哪些sql语句占用时间过长,show processlist;
用 explain 查看消耗时间过长的SQL语句是否走了索引
对SQL语句优化,建立索引

面试题044:xtranbackup的备份、增量备份及恢复的工作原理?
XtraBackup基于innodb的crash-recovery功能,他会复制innodb的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致
innodb维护了一个redo log ,又称为transaction log (事务日志),它包含了innodb数据的所有改动情况
当innodb启动的时候,它会先去检查data file 和 transaction log,并且会做两步操作:
XtraBackup在备份的时候,一页一页的复制innodb的数据,而且不锁表,与此同时,XtraBackup还有另外一个线程监视着transaction log,一旦log 发生变化,就把变化过的log pages 复制走。由于transaction log 文件大小有限制,写满后,就会重头开始写,所以新数据可能会覆盖到旧的数据。
在prepare过程中,XtraBackup使用复制到的transaction log 对备份出来的innodb data file 进行crash recovery

面试题045:误执行drop数据,如何通过xtranbackup恢复?
关闭mysql服务
移除mysql的data目录及数据
将备份的数据恢复到mysql的data目录
启动mysql服务

面试题046:如何做主从数据一致性校验?
主从一致性校验有多种工具。例如checksum 、mysqldiff、pt-table-chacksum 等

面试题047:如果监控MySQL的增删改查次数?
show global status where variable_name in(‘com_select’,‘com_insert’,‘com_delete’,‘com_update’);

面试题048:MySQL索引的种类及工作原理。
普通索引:最基本的索引,没有任何限制。
唯一索引:与普通索引类似,不同的是,索引列的值必须唯一,但允许有空值。
主键索引:它是一种特殊的唯一索引,不允许有空值。一张表只能有一个主键。
组合索引:是将多个字段建到一个索引里。

面试题049:请描述MySQL不同引擎锁的机制。
mysql引擎默认所级别
MyISAM和MEMORY采用表级锁(table-level locking)
BDB 采用页面锁(page-level locking)或表级锁,默认为页面锁
innodb支持行级锁(row-level locking)和表级锁,默认为行级锁
表锁分为表共享读锁(共享锁)与表独占写锁(排它锁)
意向锁是innodb自动加的,不需要用户干预。分为意向共享锁与意向排它锁。

面试题050:请描述InnoDB支持的四种事务隔离级别名称及特点。
未提交读(Read uncommitted)本隔离级别很少用于实际应用,所有事务能看到其他未提交事务执行结果,也被称之为脏读。
已提交读(Read committed) 大多数数据库默认的隔离级别(但不是mysql默认)。一个事物只能看见已经提交事务所做的改变,不可重复读。
可重复读(Repeatable read)mysql默认事务隔离级别,确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。会导致幻读。通过间隙锁解决。
可串行化(SERIALIZABLE) 最高隔离级别,通过强制事务排序,使之不可能互相冲突,从而解决幻读问题。,可能导致大量超时现象和锁竞争。

面试题051:如何自定义脚本启动MySQL(说出关键命令)
mysqld_safe --defaults-file=/data/3306/my.cnf &

面试题052:如何自定义脚本平滑关闭MySQL(说出关键命令)
mysqladmin -uroot -p123456 -S /data/3306/mysql.sock shutdown

面试题053:MySQL MHA高可用软件的详细工作原理
从宕机崩溃的master保存的二进制日志事件(binlog events)
识别含有最新更新的slave
应用差异的中继日志(relay log)到其他slave
应用从master保存的二进制日志事件(binlog events)
提升一个slave为新的master
使其他的slave连接新的master进行复制

面试题054:你们的公司如何实现数据库读写分离的?
通过程序实现的读写分离
insert update delete alter 等走主库,select 等走从库

面试题055:请简单描述下MySQL的体系结构知识?
连接层:最先连接处理的是连接层,包括通信协议、线程处理、用户名密码认证三部分
SQL层:核心服务都在这层实现。包含权限判断,查询缓存,解析器,预处理,查询优化器,缓存和执行计划
存储引擎层:主要负责mysql中数据的存储和提取
文件系统层:在操作系统的文件系统之上,并完成与存储引擎的交互

面试题056:请简单描述下InnoDB引擎的内部结构原理?
整体分为三层:内存结构,cache,磁盘结构

面试题056:mysql服务器CPU,或者IO压力很大,怎么定位问题?
首先用top 和iostat命令,定位是什么进程占用CPU和磁盘IO
确认mysql问题,登陆数据库,通过show full processlist 命令,查看正在执行sql语句,是否有语句长时间执行使数据库卡住
执行show engine innodb status\G 命令,查看数据库是否有锁资源争用
查看mysql慢查询日志,是否有慢sql
找到引起数据库占用资源搞的语句,进行优化,根据实际情况建立索引或删除不合适索引

不一定完全准确,欢迎指正
部分转载自:https://blog.csdn.net/dupengshixu/article/details/82810091

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值