如何給mysql中date
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名申請、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、桐廬網(wǎng)站維護、網(wǎng)站推廣。
方法/步驟
1
select curDate(); #獲取當(dāng)前日期select curTime(); #獲取當(dāng)前時間select now(); #獲取當(dāng)前日期+時間
2
列舉1個天數(shù)加減的例子,其他的看英文意思就可以理解了
select date_add(now(), interval 1 day); #當(dāng)前日期天數(shù)+1
select date_add(now(), interval -1 day); #當(dāng)前日期天數(shù)-1
select date_add(now(), interval 1 hour);
select date_add(now(), interval 1 minute);
select date_add(now(), interval 1 second);
select date_add(now(), interval 1 microsecond);
select date_add(now(), interval 1 week);
select date_add(now(), interval 1 month);
select date_add(now(), interval 1 quarter);
select date_add(now(), interval 1 year);
3
date_sub與date_add功能整合相反
select
date_sub(now(), interval 1 day); #當(dāng)前日期天數(shù)-select date_sub(now(),
interval -1 day); #當(dāng)前日期天數(shù)+select date_sub(now(), interval 1
hour); select date_sub(now(), interval 1 minute)select date_sub(now(),
interval 1 second)select date_sub(now(), interval 1 microsecond)select
date_sub(now(), interval 1 week)select date_sub(now(), interval 1
month)select date_sub(now(), interval 1 quarter)select date_sub(now(),
interval 1 year);
是否啟用了日志
mysqlshow
variables
like
\'log_%\';
顯示當(dāng)前日志的詳細(xì)情況
mysql
show
master
status;
顯示日志文件名和文件大小
mysql
show
master
logs;
如果未啟用日志,一般可以從選項文件(即my.cnf
or
my.ini,取決于操作系統(tǒng))中進行配置,在[mysqld]后加上
log-error="路徑名"
log="路徑名"
等等,其中可選的有
錯誤日志:
-log-err
查詢?nèi)罩荆?/p>
-log
慢查詢?nèi)罩?
-log-slow-queries
更新日志:
-log-update(注釋:二進制日志已經(jīng)代替了老的更新日志,更新日志在MySQL
5.1中不再使用。)
二進制日志:
-log-bin
一般使用二進制日志較多,如:log-bin="/路徑/mysql-log-bin"
如果只加了以上的語句,那么將默認(rèn)為所有數(shù)據(jù)庫記錄日志,若要針對某些數(shù)據(jù)庫,則另起一行加上
binlog-do-db=db_name
在有了二進制日志之后可以通過mysqlbinlog工具得到日志文件,輸入命令
路徑/mysqlbinlog
--start-date="2011-12-21
14:30:00"
--stop-date="2011-12-21
14:30:00"/路徑/mysql-log-bin.[0-9]*
/路徑/test.log
把從start-date到stop-date的日志輸出到test.log中,還可以使用的常見選項有start-position,stop-positon,注意其值是日志中的“#
at”后跟的數(shù)字,得到的是指定位置之間的日志數(shù)據(jù)。
做數(shù)據(jù)庫的恢復(fù)時,是數(shù)據(jù)庫備份+日志來恢復(fù)數(shù)據(jù)。特別提示,mysql每次啟動都會重新生成一個后綴不同的日志文件,如果mysql每天都要重新啟動一次的話,注意不要選錯了日志文件。
把輸出的文件直接用執(zhí)行sql語句的方式執(zhí)行一遍即恢復(fù)了指定日志中的操作。
備份一個數(shù)據(jù)庫(或其中的某些表)
/路徑/mysqldump
-u
user
-p
-h
host
db
[--tables
table1
table2]
/路徑/
/file_$(date
-d
today
+%Y-%m-%d-%H-%M).sql
(文件名包含了當(dāng)前時間)
以每24小時作為一份時間(而非自然日),根據(jù)用戶的配置有兩種工作模式:帶狀模式中,用戶僅定義開始日期時,從開始日期(含)開始,每份時間1個分片地?zé)o限增加下去;環(huán)狀模式中,用戶定義了開始日期和結(jié)束日期時,以結(jié)束日期(含)和開始日期(含)之間的時間份數(shù)作為分片總數(shù)(分片數(shù)量固定),以類似取模的方式路由到這些分片里。
1. DBLE 啟動時,讀取用戶在 rule.xml 配置的 sBeginDate 來確定起始時間
2. 讀取用戶在 rule.xml 配置的 sPartionDay 來確定每個 MySQL 分片承載多少天內(nèi)的數(shù)據(jù)
3. 讀取用戶在 rule.xml 配置的 dateFormat 來確定分片索引的日期格式
4. 在 DBLE 的運行過程中,用戶訪問使用這個算法的表時,WHERE 子句中的分片索引值(字符串),會被提取出來嘗試轉(zhuǎn)換成 Java 內(nèi)部的時間類型
5. 然后求分片索引值與起始時間的差,除以 MySQL 分片承載的天數(shù),確定所屬分片
1. DBLE 啟動時,讀取用戶在 rule.xml 配置的起始時間 sBeginDate、終止時間 sEndDate 和每個 MySQL 分片承載多少天數(shù)據(jù) sPartionDay
2. 根據(jù)用戶設(shè)置,建立起以 sBeginDate 開始,每 sPartionDay 天一個分片,直到 sEndDate 為止的一個環(huán),把分片串聯(lián)串聯(lián)起來
3. 讀取用戶在 rule.xml 配置的 defaultNode
4. 在 DBLE 的運行過程中,用戶訪問使用這個算法的表時,WHERE 子句中的分片索引值(字符串),會被提取出來嘗試轉(zhuǎn)換成 Java 內(nèi)部的日期類型
5. 然后求分片索引值與起始日期的差:如果分片索引值不早于 sBeginDate(哪怕晚于 sEndDate),就以 MySQL 分片承載的天數(shù)為模數(shù),對分片索引值求模得到所屬分片;如果分片索引值早于 sBeginDate,就會被放到 defaultNode 分片上
與MyCat的類似分片算法對比
中間件
DBLE
MyCat
分片算法種類 date 分區(qū)算法 按日期(天)分片
兩種中間件的取模范圍分片算法使用上無差別
開發(fā)注意點
【分片索引】1. 必須是字符串,而且 java.text.SimpleDateFormat 能基于用戶指定的 dateFormat 來轉(zhuǎn)換成 java.util.Date
【分片索引】2. 提供帶狀模式和環(huán)狀模式兩種模式
【分片索引】3. 帶狀模式以 sBeginDate(含)起,以 86400000 毫秒(24 小時整)為一份,每 sPartionDay 份為一個分片,理論上分片數(shù)量可以無限增長,但是出現(xiàn) sBeginDate 之前的數(shù)據(jù)而且沒有設(shè)定 defaultNode 的話,會路由失?。ㄈ绻?defaultNode,則路由至 defaultNode)
【分片索引】4. 環(huán)狀模式以 86400000 毫秒(24 小時整)為一份,每 sPartionDay 份為一個分片,以 sBeginDate(含)到 sEndDate(含)的時間長度除以單個分片長度得到恒定的分片數(shù)量,但是出現(xiàn) sBeginDate 之前的數(shù)據(jù)而且沒有設(shè)定 defaultNode 的話,會路由失?。ㄈ绻?defaultNode,則路由至 defaultNode)
【分片索引】5. 無論哪種模式,分片索引字段的格式化字符串 dateFormat 由用戶指定
【分片索引】6. 無論哪種模式,劃分不是以日歷時間為準(zhǔn),無法對應(yīng)自然月和自然年,且會受閏秒問題影響
運維注意點
【擴容】1. 帶狀模式中,隨著 sBeginDate 之后的數(shù)據(jù)出現(xiàn),分片數(shù)量的增加無需再平衡
【擴容】2. 帶狀模式?jīng)]有自動增添分片的能力,需要運維手工提前增加分片;如果路由策略計算出的分片并不存在時,會導(dǎo)致失敗
【擴容】3. 環(huán)狀模式中,如果新舊 [sBeginDate,sEndDate] 之間有重疊,需要進行部分?jǐn)?shù)據(jù)遷移;如果新舊 [sBeginDate,sEndDate] 之間沒有重疊,需要數(shù)據(jù)再平衡
配置注意點
【配置項】1. 在 rule.xml 中,可配置項為 propertyname="sBeginDate" 、 propertyname="sPartionDay" 、 propertyname="dateFormat" 、 propertyname="sEndDate" 和 propertyname="defaultNode"
【配置項】2.在 rule.xml 中配置 propertyname="dateFormat",符合 java.text.SimpleDateFormat 規(guī)范的字符串,用于告知 DBLE 如何解析sBeginDate和sEndDate
【配置項】3.在 rule.xml 中配置 propertyname="sBeginDate",必須是符合 dateFormat 的日期字符串
【配置項】4.在 rule.xml 中配置 propertyname="sEndDate",必須是符合 dateFormat 的日期字符串;配置了該項使用的是環(huán)狀模式,若沒有配置該項則使用的是帶狀模式
【配置項】5.在 rule.xml 中配置 propertyname="sPartionDay",非負(fù)整數(shù),該分片策略以 86400000 毫秒(24 小時整)作為一份,而 sPartionDay 告訴 DBLE 把每多少份放在同一個分片
【配置項】6.在 rule.xml 中配置 propertyname="defaultNode" 標(biāo)簽,非必須配置項,不配置該項的話,用戶的分片索引值沒落在 mapFile 定義
不好意思,只能看到您發(fā)的圖,我只能粗略的模擬一下
思路: 使用 date_format() 函數(shù) (mysql自帶的函數(shù))
(1) 創(chuàng)建表
create table date_test(dateofmanufacture DATE);
(2) 插入
insert into date_test values(date_format("1983-11-23", "%y-%m-%d"));
(3) 查詢
select * from date_test;