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 中新增的另一個特色功能桑寨,可以作為定時任務調度器,取代部分原先只能用操作系統(tǒng)任務調度器才能完成的定時功能泄朴。事件調度器是定時觸發(fā)執(zhí)行的狰挡,在這個角度上也可以稱作是”臨時的觸發(fā)器”纤垂。觸發(fā)器只是針對某個表產生的事件執(zhí)行一些語句弄跌,而事件調度器則是在某一個(間隔)時間執(zhí)行一些語句。事件是由一個特定的線程來管理的唱星,也就是所謂的”事件調度器”。啟用事件調度器后跟磨,擁有 SUPER 權限的賬戶執(zhí)行 SHOW PROCESSLIST 就可以看到這個線程了间聊。通過設定全局變量event_scheduler 的值即可動態(tài)的控制事件調度器是否啟用。開啟事件調度器
SELECT @@event_scheduler; # 查看事件調度器是否開啟
SET GLOBAL event_scheduler = ON; # 開啟事件調度器抵拘,mysql重啟后會失效修改配置文件哎榴,開啟事件調度器
在 my.cnf 的 [mysqld] 下添加:
event_scheduler=ON
管理事件的相關命令
查看所有事件
show events查看事件創(chuàng)建信息
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>-
創(chuàng)建事件
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 計劃任務,有兩種設定計劃任務的方式:
- AT 時間戳僵蛛,用來完成單次的計劃任務尚蝌。
- 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參數表示"當這個事件不會再發(fā)生的時候"突诬,即當單次計劃任務執(zhí)行完畢后或當重復性的計劃任務執(zhí)行到了ENDS階段苫拍。而PRESERVE的作用是使事件在執(zhí)行完畢后不會被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天后停止執(zhí)行:
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;5天后開啟每天定時清空test表蔬捷,一個月后停止執(zhí)行:
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;每天凌晨一點執(zhí)行
CREATE EVENTevent_call_inproc
ON SCHEDULE EVERY 1 DAY
STARTS '2013-09-12 01:00:00'
ON COMPLETION PRESERVE ENABLE
DO call ty.inproc();每天凌晨三點執(zhí)行
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 點執(zhí)行
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點執(zhí)行
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號凌晨四點執(zhí)行
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]可以設置這個事件是執(zhí)行一次還是持久執(zhí)行垄提,默認為NOT PRESERVE。
- 每天定時清空test表(只執(zhí)行一次周拐,任務完成后就終止該事件):
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ON COMPLETION NOT PRESERVE
DO TRUNCATE TABLE test.aaa;
[ENABLE | DISABLE]可是設置該事件創(chuàng)建后狀態(tài)是否開啟或關閉铡俐,默認為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 預定義語句
介紹
借助預定義語句可以實現動態(tài)SQL語句語法
定義
PREPARE
<stmt_name>
FROM
<preparable_stmt>
執(zhí)行
EXECUTE <stmt_name>注意
1> 即使 preparable_stmt 語句中的 ? 所代表的是一個字符串审丘,你也不需要將 ? 用引號包含起來
2> 如果新的 PREPARE 語句使用了一個已存在的 stmt_name ,那么原有的將被立即釋放勾给!
即使這個新的 PREPARE 語句因為錯誤而不能被正確執(zhí)行
3> PREPARE stmt_name 的作用域是當前客戶端連接會話可見
4> 要釋放一個預定義語句的資源滩报,可以使用 DEALLOCATE PREPARE 句法
5> 執(zhí)行語句中,如果 stmt_name 不存在播急,將會引發(fā)一個錯誤
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;
# 根據當前日期創(chuàng)建表
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;