1、数据库高负载的排查和解决办法。检查操作系统查看整体负载,使用命令w或者sar -q 1

判断瓶颈在哪个子系统,使用命令w

判断磁盘IO是否较大,使用命令:sar -d 1

判断具体哪个进程消耗的磁盘IO最多,使用命令:iotop检查MySQL层查看当前的MySQL查询语句,使用命令:mysqladmin pr|grep -v Sleep

分析slow log

分析慢查询语句

2、简要说明一下double write的工作机制。

用系统表空间的一块连续磁盘空间(100个连续数据页,大小为2MB)作为doublewrite buffer,当进行脏页刷新时,首先将脏页的副本写到系统表空间的doublewrite buffer 中,之后通过doublewrite buffer再分两次,每次1MB顺序地写入共享表空间的物理磁盘上,然后调用fsync()刷新操作系统IO缓存,最后innodb后台IO线程将脏页刷新到磁盘数据文件。因为doublewrite 页是连续的,因此这个过程是顺序写的,开销并不是很大。

3、半同步复制与异步复制的区别,在5.7做了哪些增强?异步复制:主库执行完commit提交操作后,在主库写入binlog日志后即可成功返回客户端,无需等待binlog日志传送给从库。

MySQL5.7之前的半同步复制:主库在每次事物成功提交时,并不及时反馈给前端应用用户,而是等待其中一个从库也接收到binlog事务并成功写入中继日志后(不等待从库应用这部分日志),主库才返回commit操作成功给客户端。

MySQL5.7半同步复制增强:主库将事务写入binlog,传递到从库并写入从库的relay log,主库等待从库反馈接受到relay log的ack之后,再提交事务并且返回commit ok结果给客户端。

4、简单说一下 MySQL5.7有哪些新特性。从MySQL 5.7开始,root用户的密码不再是空,而是随机产生一个密码

支持JSON

MySQL5.7.6支持使用 generated columns(p1875),这一列由其他列计算而得

sys schema

可以知道哪些语句使用了临时表,哪个用户请求了最多的io,哪个线程占用了最多的内存

索引利用率和冗余索引统计冗余索引

支持将临时表设置为innodb存储引擎

支持虚拟列

5、如何识别表中的重复索引?方法一

使用pt-duplicate-key-checker工具

使用方法:pt-duplicate-key-checker --user='root' --password='xxx' --databases=db_name--tables=idx_test --socket=/tmp/mysql.sock方法二

select * from sys.schema_redundant_indexes

6、MHA在线切换需要满足的条件1、所有slave的IO和SQL线程都在运行

2、所有Seconds_Behind_Master参数小于或者等于running_updates_limit秒。running_updates_limit默认为1

3、通过show processlist输出,没有一个更新花费的时间大于running_updates_limit秒

7、MySQL常见监控项。操作系统层面CPU

内存

IO

网卡MySQL层MySQL是否运行

连接数

qps

tps

慢查询数

打开表数

当前脏页数

锁情况

主从同步状态(包括Slave_IO_Running、Slave_SQL_Running、Seconds_Behind_Master等)

8、MySQL备份策略。配置从库

每天一次全备,开启binlog,实时将主库binlog同步到远程服务器上。

务必进行恢复性测试

9、双一的意义。

innodb_flush_log_at_trx_commit=1

每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去

sync_binlog=1

MySQL 在每写 1次 binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去

保证了数据的安全性,

10、PXC执行SQL的原理。

节点接收sql请求后,在commit之前,有wsrep API调用galera库进行集群内广播,所有其它节点验证成功后事务在集群所有节点进行提交,反之roll back