Mysql点滴

1 开启event_scheduler

  1.1 找到my.cnf的位置

    find / |grep my.cnf

  1.2 修改my.cnf配置

    vim ./usr/my.cnf

    [mysqld]
    event_scheduler=ON

  1.3 restart mysql

    service mysql restart.

2 创建分区表

 1.1 创建分区表 

  DROP TABLE IF EXISTS `tb_report`;
  CREATE TABLE IF NOT EXISTS `tb_report` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `gen_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP comment "for partition used",
    `time` datetime NOT NULL DEFAULT ‘1972-01-01 00:00:00‘ comment "for service used",
    `dir` tinyint(1) NOT NULL DEFAULT ‘0‘,
    `domain_id` int(10) not null default 0,
    `accept` int(10) unsigned NOT NULL DEFAULT ‘0‘ COMMENT ‘TOTAL = accept + reject‘,
    `reject` int(10) unsigned NOT NULL DEFAULT ‘0‘ ,
    PRIMARY KEY (id,gen_time),--partion column must in key
    INDEX (domain_id)
  ) ENGINE=innodb DEFAULT CHARSET=utf8
  PARTITION BY RANGE(TO_DAYS(gen_time))

  (
    PARTITION pbasic VALUES LESS THAN (0)
  );

1.2 定时创建新分区和删除过期分区

   delimiter $$

    DROP EVENT if exists `event_auto_partition`;$$
    CREATE EVENT `event_auto_partition` ON SCHEDULE EVERY 1 day STARTS ‘1972-01-01 00:00:00‘ ON COMPLETION PRESERVE DO
    begin
      call create_partition_per_day(DATE_ADD(now(), interval 0 month),‘tb_report‘);
      call create_partition_per_day(DATE_ADD(now(), interval 1 month),‘tb_report‘);

      call drop_partition_by_month(DATE_ADD(now(), interval -3 month),‘tb_report‘);
    end;

  $$

  ps:create_partition_per_day and drop_partition_by_month need your implementation。

1.3 对于分区表,MySQL不支持命令CHECK TABLE,OPTIMIZE TABLE,ANALYZE TABLE,或REPAIR TABLE

  那么当一个分区表经过多次改变或分区中删除了大量的行留下很多碎片时怎么解决呢?msyql 有个代替方案,ALTER TABLE ... OPTIMIZE PARTITION。
  ALTER TABLE t1 OPTIMIZE PARTITION p;
  在一个给定的分区表上使用“OPTIMIZE PARTITION”等同于在那个分区上运行CHECK PARTITION,ANALYZE PARTITION,和REPAIR PARTITION。

  这是个低效的做法,最好的做法是按照日期直接删除不再使用的partition。

时间: 2024-11-10 16:02:40

Mysql点滴的相关文章

mysql点滴_01查看错误码的方法

1 查看官方的帮助文档 当前最新版本的错误码见 http://dev.mysql.com/doc/refman/5.7/en/error-handling.html 2 在安装mysql的环境中调用mysql提供的perror命令

mysql点滴_02程序中执行sql语句报字符集问题解决

程序中执行  "SELECT t.EVENT_TYPE_ID FROM RATABLE_EVENT_TYPE t WHERE t.NAME='帐期末费用转移事件'"  报错 错误码:1267 不合法的混合字符集. 错误信息:mix of collations (gbk_bin,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '=' 解决办法:用binary()函数统一字符集 SELECT t.EVENT_TYPE_ID

mysql点滴_02程序中运行sql语句报字符集问题解决

程序中运行  "SELECT t.EVENT_TYPE_ID FROM RATABLE_EVENT_TYPE t WHERE t.NAME='帐期末费用转移事件'"  报错 错误码:1267 不合法的混合字符集. 错误信息:mix of collations (gbk_bin,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '=' 解决的方法:用binary()函数统一字符集 SELECT t.EVENT_TYPE_I

sql点滴42—mysql中的数据结构

MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分或者用零填补. 表列出了各种数值类型以及它们的允许范围和占用的内存空间. 类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0,65 535)

sql点滴42—mysql中的时间转换

UNIX时间戳转换为日期用函数: FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() Select UNIX_TIMESTAMP(’2006-11-04 12:23:00′); 例:mysql查询当天的记录数: $sql=”select * from message Where DATE_FORMAT(FROM_UNIXTIME(chattime),’%Y-%m-%d’) = DA

sql点滴37—mysql中的错误Data too long for column '' at row 1

原文:sql点滴37-mysql中的错误Data too long for column '' at row 1   1.MYSQL服务 我的电脑——(右键)管理——服务与应用程序——服务——MYSQL——开启(停止.重启动) 2.命令行方式 Windows 1.点击“开始”->“运行”(快捷键Win+R). 2.启动:输入 net stop mysql 3.停止:输入 net start mysql 提示* Redhat Linux 也支持service command,启动:# servic

sql点滴40—mysql乱码问题总结

原文:sql点滴40-mysql乱码问题总结 本文将为大家讲解如何处理Java连接过程中的MySQL中文乱码问题.一般MySQL中文乱码问题都是与字符集有关,这里作者的经历也大致差不多. MySQL默认编码是latin1 1. mysql> show variables like 'character%'; 2. +--------------------------+--------------------------+ 3. | Variable_name | Value | 4. +---

sql点滴41—mysql常见sql语法

原文:sql点滴41-mysql常见sql语法 ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:alter table 表名 add column 列名 varchar(30); 添加带注释的列:alter table directory add index_url varchar(256) default null comment '章节书目链接' after di

sql点滴43—mysql中的时间转换

局域网连接mysql报错: ERROR 1130: Host '192.168.0.220' is not allowed to connect to this MySQL server 解决方法: 可能是帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"