mysql的一些问题处理及优化
1、MySQL Sleep线程过多如何解决?
1、可以杀掉sleep进程,kill PID
2、修改配置,重启服务
[mysqld]
wait_timeout = 600
interactive_timeout=30
#如果生产服务器不可随便重启可以使用下面的方法解决
set global wait_timeout=600
set global interactive_timeout=30;
2、sort_buffer_size参数作用?如何在线修改生效?
在每个connection(session)第一次连接时需要使用到,来提访问性能
set global sort_buffer_size = 2M
3、如何在线正确清理MySQL binlog?
MySQL中的binlog日志记录了数据中的数据变动,便于对数据的基于时间点和基于位置的恢复
但日志文件的大小会越来越大,点用大量的磁盘空间,因此需要定时清理一部分日志信息
手工删除:
首先查看主从库正在使用的binlog文件名称
show master(slave) status\G
删除之前一定要备份
purge master logs before’2017-09-01 00:00:00’;
#删除指定时间前的日志
purge master logs to’mysql-bin.000001’;
#删除指定的日志文件
自动删除:
通过设置binlog的过期时间让系统自动删除日志
show variables like ‘expire_logs_days’;
et global expire_logs_days = 30;
#查看过期时间与设置过期时间
4、Binlog工作模式有哪些?各什么特点,企业如何选择?
1.Row(行模式);
日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改
2.Statement(语句模式)
每一条修改的数据都会完整的记录到主库master的binlog里面,在slave上完整执行在master执行的sql语句
3.mixed(混合模式)
结合前面的两种模式,如果在工作中有使用函数 或者触发器等特殊功能需求的时候,使用混合模式
数据量达到比较高时候,它就会选择 statement模式,而不会选择Row Level行模式
5、误操作执行了一个drop库SQL语句,如何完整恢复?
1、停止主从复制,在主库上执行锁表并刷新binlog操作,接着恢复之前的全备文件(比如0点的全备)
2、将0点时的binlog文件与全备到故障期间的binlog文件合并导出成sql语句
mysqlbinlog --no-defaults mysql-bin.000011 mysql-bin.000012 >bin.sql
3、将导出的sql语句中drop语句删除,恢复到数据库中
mysql -uroot -pmysql123 < bin.sql
mysqldump备份使用了-A -B参数,如何实现恢复单表?
-A 此参数作用是备份所有数据库(相当于–all-databases)
-B databasename 备份指定数据(单库备份使用)
MySQL如何实现双向互为主从复制,并说明应用场景?
双向同步主要应用于解决单一主库写的压力,具体配置如下
主库配置
[mysqld]
auto_increment_increment = 2 #起始ID
auto_increment_offset = 1 #ID自增间隔
log-slave-updates
从库配置
[mysqld]
auto_increment_increment = 2 #起始ID
auto_increment_offset = 2 #ID自增间隔
log-slave-updates
主从库服务器都需要重启mysql服务
MySQL主从复制故障如何解决?
登陆从库
1、执行stop slave;停止主从同步
2、然后set global sql_slave_skip_counter = 1;跳过一步错误
3、最后执行 start slave;并查看主从同步状态
需要重新进行主从同步操作步骤如下
进入主库
1、进行全备数据库并刷新binlog,查看主库此的状态
2、恢复全备文件到从库,然后执行change master
3、开启主从同步start slave;并查看主从同步状态
6、MySQL数据库如何实现读写分离?
1、通过开发程序实现
2、通过其它工具实现(如mysql-mmm)
7、MySQL高可用方案有哪些,各自特点,企业如何选择?
高可用方案有
1、主从架构
2、MySQL+MMM
3、MySQL+MHA
4、mysql+haproxy+drbd
5、mysql+proxy+amoeba