mysql-sql小技能
1.select查询结果以指定字符串分割
1
select concat_ws('|', page_id, cache_time, last_cache_time) from a_page;
2.格式化时间
1
DATE_FORMAT(last_cache_time,'%Y%m%d%H%i%s')
3.表备份
1
create table e_email_0_bak_202011122005 select * from e_email_0;
4.查看数据运行时长,判断是否宕机
1
show global status like 'uptime';
5.批量删除表
1
2
3
select concat("DROP TABLE IF EXISTS ", table_name, ";") from information_schema.tables where table_schema="Your_database_name";
将查询出的
6.批量杀死进程
1
2
3
4
5
6
7
8
9
bash命令行:
获取id
for i in $( mysql -t -A -h 127.0.0.1 -P 3306 -uroot -pyTaFp=4vH@gKAp86kC -e "show processlist" | awk -F"|" '{print $2}' |grep -Ew "[0-9]+")
do
echo $i
done
删除进程
echo $i 改为 kill $i
7.高并发insert ignore是选择innodb还是myisam? tokudb好像也可以
(1) 如果不是对事务要求非常的强,高并发写推荐选择MyISAM。
- MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少,能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小;
- InnoDB存储引擎在插入数据时会花更多的开销在维护完整性、维持事务上,所以效率比MyISAM低;
- 就查询速度而言,MyISAM比InnoDB更优越,并且还有MyISAM索引,可以很好的优化查询速度
(2) 如何提高INSERT效率
- 批量插入VALUES,而不是每一次插入都是一条数据
- 删除MySQL的索引,有索引存在插入速度会受很大的影响;
- 题主的表有3个int字段,并且都是唯一索引,可以指定一个主键。
(3)三种插入方法,insert into、replace into及insert ignore
8.mysql数据库引擎切换
1
2
3
4
5
#未测试过
mysql5.1版本之后:
ALTER TABLE t1 ENGINE = InnoDB;
mysql5.1版本之前:
alter table kcb type = InnoDB;
9.mysql binlog日志自动清理及手动删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 如果没有主从可不在意
1.关闭mysql主从,关闭binlog;配置文件
vim /etc/my.cnf
屏蔽 关于 log-bin 的全部删除
# log-bin=mysql-bin
# binlog_format=mixed
2.开启mysql主从,设置expire_logs_days;
永久修改
vim /etc/my.cnf
# x 是自动删除的天数, 最大99天
# 默认值为0,表示“没有自动删除”
expire_logs_days = x
临时修改
> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 0 |
+------------------+-------+
> set global expire_logs_days = 99;
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 99 |
+------------------+-------+
> flush log; #直接生效
3.手动清除binlog文件
> PURGE MASTER LOGS TO 'MySQL-bin.010'; //清除MySQL-bin.010日志
> PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00'; //清除2008-06-22 13:00:00前binlog日志
> PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY); //清除3天前binlog日志BEFORE,变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。
本文由作者按照
CC BY 4.0
进行授权