MySQL

mysqldump

  • 只导出数据库表结构
    mysqldump --opt -h 主机名或地址 -d 数据库名 -u root -p密码 > xxx.sql

  • 只导出数据
    mysqldump -t 数据库名 -uroot -p密码 > xxx.sql

  • 导出数据和表结构
    mysqldump 数据库名 -uroot -p密码 > xxx.sql

  • 导出指定表结构
    mysqldump -uroot -p密码 -B 数据库名 --table 表名 > xxx.sql

  • 导出单表数据
    mysqldump -h 主机地址 -u用户名 -p密码 数据库名 表名 > xxx.sql

  • 导入数据
    进入mysql
    use 数据库
    source xxx.sql

dev 上mysql 相关命令:
sudo service mysql start/stop/restart

mysql 5.6版本慢查询配置参数
slow_query_log = 1
slow_query_log_file = XXX
long_query_time = 1


MySQL 事件调度器

  • 介绍
    事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功能。事件调度器是定时触发执行的,在这个角度上也可以称作是”临时的触发器”。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的”事件调度器”。启用事件调度器后,拥有 SUPER 权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。通过设定全局变量event_scheduler 的值即可动态的控制事件调度器是否启用。

  • 开启事件调度器
    SELECT @@event_scheduler; # 查看事件调度器是否开启
    SET GLOBAL event_scheduler = ON; # 开启事件调度器,mysql重启后会失效

  • 修改配置文件,开启事件调度器
    在 my.cnf 的 [mysqld] 下添加:
    event_scheduler=ON

管理事件的相关命令

  • 查看所有事件
    show events

  • 查看事件创建信息
    show create event <event_name>

  • 查看事件详细信息
    SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = <event_name> AND EVENT_SCHEMA = <schema_name>

  • 关闭事件
    ALTER EVENT <event_name> DISABLE

  • 开启事件
    ALTER EVENT <event_name> ENABLE

  • 删除事件
    DROP EVENT IF EXISTS <event_name>

  • 创建事件
    CREATE EVENT [IF NOT EXISTS] <event_name>
    ON SCHEDULE <schedule>
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE]
    [COMMENT 'comment']
    DO <sql_statement>;

    <schedule>:
    AT TIMESTAMP [+ INTERVAL INTERVAL]
    | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]

    INTERVAL:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
    WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
    DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

ON SCHEDULE 计划任务,有两种设定计划任务的方式:

  1. AT 时间戳,用来完成单次的计划任务。
  2. EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务

在两种计划任务中,时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。
在重复的计划任务中,时间(单位)的数量可以是任意非空(Not Null)的整数式,时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。

提示:
其他的时间单位也是合法的如:QUARTER, WEEK,YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建议使用这些不标准的时间单位。

ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。

若干例子:

  • 每秒插入一条记录到数据表
    CREATE EVENT e_test_insert
    ON SCHEDULE EVERY 1 SECOND
    DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);

  • 5天后清空test表:
    CREATE EVENT e_test
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
    DO TRUNCATE TABLE test.aaa;

  • 2007年7月20日12点整清空test表:
    CREATE EVENT e_test
    ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
    DO TRUNCATE TABLE test.aaa;

  • 每天定时清空test表:
    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    DO TRUNCATE TABLE test.aaa;

  • 5天后开启每天定时清空test表:
    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
    DO TRUNCATE TABLE test.aaa;

  • 每天定时清空test表,5天后停止执行:
    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
    DO TRUNCATE TABLE test.aaa;

  • 5天后开启每天定时清空test表,一个月后停止执行:
    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
    ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
    DO TRUNCATE TABLE test.aaa;

  • 每天凌晨一点执行
    CREATE EVENT event_call_inproc
    ON SCHEDULE EVERY 1 DAY
    STARTS '2013-09-12 01:00:00'
    ON COMPLETION PRESERVE ENABLE
    DO call ty.inproc();

  • 每天凌晨三点执行
    create event event_call_defer
    on schedule every 1 day
    starts date_add(date(curdate() + 1),interval 3 hour)
    on completion preserve enable
    do call test.warn();

  • 每个月的一号凌晨1 点执行
    CREATE EVENT EVENT2
    ON SCHEDULE EVERY 1 MONTH
    STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),INTERVAL 1 MONTH),INTERVAL 1 HOUR)
    ON COMPLETION PRESERVE ENABLE
    DO CALL STAT();

  • 每个季度一号的凌晨2点执行
    CREATE EVENT TOTAL_SEASON_EVENT
    ON SCHEDULE EVERY 1 QUARTER
    STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'-',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR)
    ON COMPLETION PRESERVE ENABLE
    DO CALL SEASON_STAT();

  • 每年1月1号凌晨四点执行
    CREATE EVENT TOTAL_YEAR_EVENT
    ON SCHEDULE EVERY 1 YEAR
    STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 4 HOUR)
    ON COMPLETION PRESERVE ENABLE
    DO CALL YEAR_STAT();

[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。

  • 每天定时清空test表(只执行一次,任务完成后就终止该事件):
    CREATE EVENT e_test
    ON SCHEDULE EVERY 1 DAY
    ON COMPLETION NOT PRESERVE
    DO TRUNCATE TABLE test.aaa;

[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
[COMMENT 'comment']可以给该事件加上注释。

  • 修改事件
    ALTER EVENT event_name
    [ON SCHEDULE schedule]
    [RENAME TO new_event_name]
    [ON COMPLETION [NOT] PRESERVE]
    [COMMENT 'comment']
    [ENABLE | DISABLE]
    [DO sql_statement]

  • 将每天清空test表改为5天清空一次:
    ALTER EVENT e_test
    ON SCHEDULE EVERY 5 DAY;


MySQL 预定义语句

  • 介绍
    借助预定义语句可以实现动态SQL语句

  • 语法
    定义
    PREPARE
    <stmt_name>
    FROM
    <preparable_stmt>
    执行
    EXECUTE <stmt_name>

  • 注意
    1> 即使 preparable_stmt 语句中的 ? 所代表的是一个字符串,你也不需要将 ? 用引号包含起来
    2> 如果新的 PREPARE 语句使用了一个已存在的 stmt_name ,那么原有的将被立即释放!
    即使这个新的 PREPARE 语句因为错误而不能被正确执行
    3> PREPARE stmt_name 的作用域是当前客户端连接会话可见
    4> 要释放一个预定义语句的资源,可以使用 DEALLOCATE PREPARE 句法
    5> 执行语句中,如果 stmt_name 不存在,将会引发一个错误
    6> 如果在终止客户端连接会话时,没有显式地调用 DEALLOCATE PREPARE 句法释放资源,服务器端会自己动释放它
    7> PREPARE 语句不可以用于存储过程,自定义函数!但从 MySQL 5.0.13 开始,它可以被用于存储过程,仍不支持在函数中使用!

例子:

SET @skip=1; SET @numrows=5;
PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?, ?";
EXECUTE STMT USING @skip, @numrows;

# 根据当前日期创建表
set @tb_name = replace(current_date(), '-', '');
set @sqlcmd = concat("create table if not exists pay.", @tb_name, "(id int primary key);");
prepare stmt from @sqlcmd;
execute stmt;

MySQL 分表及分表查询

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,158评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,600评论 1 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,785评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,655评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,075评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,002评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,146评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,918评论 0 211
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,671评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,838评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,318评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,636评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,343评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,187评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,982评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,126评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,934评论 2 279

推荐阅读更多精彩内容