https://blog.hbis.fr/2013/01/31/zabbix-mysql_partitioning/
压测收集统计信息脚本
#!/bin/sh
INTERVAL=5
PREFIX=$INTERVAL-sec-status
RUNFILE=/tmp/running
mysql -e 'show global variables' >> mysql-variables
while test -e $RUNFILE; do
file=$(date +%F_%I)
sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")
sleep $sleep
ts="$(date +"TS %s.%N %F %T")"
mysqladmin -uroot -h 127.0.0.1 -P 3307 -p ext -i1 |awk '/Queries/{q=$4-qp;qp=$4}/Threads_connected/{tc=$4}/Threads_running/{printf "%5d %5d %5d\n", q,tc,$4}'
修改默认值
alter table tab_name modify column rental_duration tinyint(3) not null default 5;
alter table tab_name alter column rental_duration set default 5;
充分利用CPU多核处理能力
innodb_read_io_threads
innodb_read_io_threads
innodb_io_capacity 磁盘配置
200 单盘SAS/SATA
2000 SAS*12 RAID10
5000 SSD
50000 FUSION-IO
增加自适应刷新脏页功能
innodb_adaptive_flushing
如果你没有全表扫描,发现youngs/s的值很小,那么就应该增大innodb_old_blocks_pct或者减少innodb_old_blocks_time,
如果你进行了全表扫描,发现non-younngs/s值很小,那么就应该增大innodb_old_blocks_time;
innodb_buffer_pool_instances>1
show engine innodb status\G:《SEMAPHORES》RW-shared OS wait(不多),并且《INSERT BUFFER AND ADAPTIVE HASH INDEX》hash searchs/s占比很多,建议开启。
组提交工作模式只支持在sync_binlog=0的情况下,同样,innodb_support_xa也必须等于0,其目的是保障innodb存储引擎redolog事务日志与binlog日志的顺序一致性;
innodb_purge_threads 参数不支持动态修改,需要添加my.cnf里修改,并且要重启才能生效,当设置为1时,需要结合innodb_purge_batch_size参数来使用,默认值是20;一般默认即可。
innodb_stats_on_metadata参数的作用是:每当查询information_schema元数据库里的表时,innodb还会随机提取数据,更新information_shema.statistics表,并返回查询结果,
当表很大时,耗费的时间很长,很多经常不访问的数据也会进入innodb_buffer_pool缓冲池,并且analyze table和show table status语句也会造成随机提取数据;
set global innodb_stats_on_metadate=off;
relay_log_recovery参数,这个参数的作用是:当slave从宕机后,假如relay-log损坏了,导致一部分中继日志还没有处理,则自动放弃所有未执行的relay-log,
并且重新从master获取日志,这样就保证了relay-log的完整性;默认关闭,建议开启;
建议开启innodb的严格检查模式
set global innodb_strict_mode=1;
innodb_file_format:默认antelope,建议Barracude,如果需要压缩就必须设置成barracude。
如果有很多全表扫描innodb_old_blocks_time要设置大些;
delete a,b from user a join user2 b on a.id=b.id;
mysql升级
1.my.cnf参数注释修改
2.innodb_fast_shutdown=0
3.mysqladmin shutdown
4.mysqld --defaults-file=/etc/my.cnf --skip-grant-tables &
5.$BASEDIR/bin/mysql_upgrade
6.mysqladmin shutdown
7.正常启动
半同步复制
$BASEDIR/lib/plugin:半同步复制的安装目录
install plugin rpl_semi_sync_master soname 'semisync_master.so';
set global rpl_semi_sync_master_enabled=on
install plugin rpl_semi_sync_slave soname 'semisync_master.so';
set global rpl_semi_sync_slave_enabled=on
my.cnf
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
预热buffer_pool缓冲
innodb_buffer_pool_dump_at_shutdown=1 :关闭时将热数据导入到ib_buffer_pool文件中
innodb_buffer_pool_dump_now=1 手工把预热数据导入到本地
innodb_buffer_pool_load_at_startup=1
innodb_buffer_pool_load_now=1 手工把热数据加载到内存
通过binlog日志统计dml语句(row)
mysqlbinlog --no-defaults --base64-output=decode-rows -v -v mysql-bin.000011 |awk '/###/{if($0~/UPDATE|INSERT|DELETE/)count[$2" "$NF]++}END{for(i in count)print i,"\t",count[i]}'|column -t|sort -k3nr|more
binlog_format=MIXED
在以下情况下
1.NDB引擎,表的DML操作增、删、改会以ROW格式记录
2.SQL语句里包含了UUID()函数
3.自增长字段被更新了
4.包含了INSERT DELAYED语句
5.使用了用户定义函数
6.使用了临时表
set global transaction isolation level read committed;
如果是read-committed隔离级别,binlog_format=mixed和binlog_format=row的效果是一样的;
mysql故障切换之事件调度器注意事项
事件只能在master上触发,在slave上不能触发,如果slave上触发了,同步复制就会坏掉。当主从复制故障切换之后,事件的状态还维持着slaveSIDE_disabled.
alter event 'event_name' enables;
人工误删除Innodb ibdata数据文件,如何恢复
1.ps -ef | grep mysql 取得进程号pid
2.ll /proc/$(pid)/fd | grep -E "ib_|ibdata" 查看要恢复的文件
3.flush tables with read lock 进制数据写入
4.set global innodb_max_dirty_pages_pct=0 将mysql脏数据交给系统内存
5.show engine innodb status\G
TRANSACTIONS
------------
Trx id counter 656A6
Purge done for trx's n:o < 656A6 undo n:o < 0
确保后台purge进程把undo log全部清除掉,事务ID要一致
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1
insert buffer合并插入缓存等于1
LOG
---
Log sequence number 507775012
Log flushed up to 507775012
Last checkpoint at 507775012
确保这3个值保持不再变回
BUFFER POOL AND MEMORY
----------------------
Modified db pages 0
确保脏数据等于0
6.复制文件
7.赋权
8.sync;sync;sync
9./etc/init.d/mysql restart
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29620572/viewspace-1827038/
,如需转载,请注明出处,否则将追究法律责任。