扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
如何给mysql中date
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名申请、雅安服务器托管、营销软件、网站建设、桐庐网站维护、网站推广。
方法/步骤
1
select curDate(); #获取当前日期select curTime(); #获取当前时间select now(); #获取当前日期+时间
2
列举1个天数加减的例子,其他的看英文意思就可以理解了
select date_add(now(), interval 1 day); #当前日期天数+1
select date_add(now(), interval -1 day); #当前日期天数-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); #当前日期天数-select date_sub(now(),
interval -1 day); #当前日期天数+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_%\';
显示当前日志的详细情况
mysql
show
master
status;
显示日志文件名和文件大小
mysql
show
master
logs;
如果未启用日志,一般可以从选项文件(即my.cnf
or
my.ini,取决于操作系统)中进行配置,在[mysqld]后加上
log-error="路径名"
log="路径名"
等等,其中可选的有
错误日志:
-log-err
查询日志:
-log
慢查询日志:
-log-slow-queries
更新日志:
-log-update(注释:二进制日志已经代替了老的更新日志,更新日志在MySQL
5.1中不再使用。)
二进制日志:
-log-bin
一般使用二进制日志较多,如:log-bin="/路径/mysql-log-bin"
如果只加了以上的语句,那么将默认为所有数据库记录日志,若要针对某些数据库,则另起一行加上
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”后跟的数字,得到的是指定位置之间的日志数据。
做数据库的恢复时,是数据库备份+日志来恢复数据。特别提示,mysql每次启动都会重新生成一个后缀不同的日志文件,如果mysql每天都要重新启动一次的话,注意不要选错了日志文件。
把输出的文件直接用执行sql语句的方式执行一遍即恢复了指定日志中的操作。
备份一个数据库(或其中的某些表)
/路径/mysqldump
-u
user
-p
-h
host
db
[--tables
table1
table2]
/路径/
/file_$(date
-d
today
+%Y-%m-%d-%H-%M).sql
(文件名包含了当前时间)
以每24小时作为一份时间(而非自然日),根据用户的配置有两种工作模式:带状模式中,用户仅定义开始日期时,从开始日期(含)开始,每份时间1个分片地无限增加下去;环状模式中,用户定义了开始日期和结束日期时,以结束日期(含)和开始日期(含)之间的时间份数作为分片总数(分片数量固定),以类似取模的方式路由到这些分片里。
1. DBLE 启动时,读取用户在 rule.xml 配置的 sBeginDate 来确定起始时间
2. 读取用户在 rule.xml 配置的 sPartionDay 来确定每个 MySQL 分片承载多少天内的数据
3. 读取用户在 rule.xml 配置的 dateFormat 来确定分片索引的日期格式
4. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值(字符串),会被提取出来尝试转换成 Java 内部的时间类型
5. 然后求分片索引值与起始时间的差,除以 MySQL 分片承载的天数,确定所属分片
1. DBLE 启动时,读取用户在 rule.xml 配置的起始时间 sBeginDate、终止时间 sEndDate 和每个 MySQL 分片承载多少天数据 sPartionDay
2. 根据用户设置,建立起以 sBeginDate 开始,每 sPartionDay 天一个分片,直到 sEndDate 为止的一个环,把分片串联串联起来
3. 读取用户在 rule.xml 配置的 defaultNode
4. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值(字符串),会被提取出来尝试转换成 Java 内部的日期类型
5. 然后求分片索引值与起始日期的差:如果分片索引值不早于 sBeginDate(哪怕晚于 sEndDate),就以 MySQL 分片承载的天数为模数,对分片索引值求模得到所属分片;如果分片索引值早于 sBeginDate,就会被放到 defaultNode 分片上
与MyCat的类似分片算法对比
中间件
DBLE
MyCat
分片算法种类 date 分区算法 按日期(天)分片
两种中间件的取模范围分片算法使用上无差别
开发注意点
【分片索引】1. 必须是字符串,而且 java.text.SimpleDateFormat 能基于用户指定的 dateFormat 来转换成 java.util.Date
【分片索引】2. 提供带状模式和环状模式两种模式
【分片索引】3. 带状模式以 sBeginDate(含)起,以 86400000 毫秒(24 小时整)为一份,每 sPartionDay 份为一个分片,理论上分片数量可以无限增长,但是出现 sBeginDate 之前的数据而且没有设定 defaultNode 的话,会路由失败(如果有 defaultNode,则路由至 defaultNode)
【分片索引】4. 环状模式以 86400000 毫秒(24 小时整)为一份,每 sPartionDay 份为一个分片,以 sBeginDate(含)到 sEndDate(含)的时间长度除以单个分片长度得到恒定的分片数量,但是出现 sBeginDate 之前的数据而且没有设定 defaultNode 的话,会路由失败(如果有 defaultNode,则路由至 defaultNode)
【分片索引】5. 无论哪种模式,分片索引字段的格式化字符串 dateFormat 由用户指定
【分片索引】6. 无论哪种模式,划分不是以日历时间为准,无法对应自然月和自然年,且会受闰秒问题影响
运维注意点
【扩容】1. 带状模式中,随着 sBeginDate 之后的数据出现,分片数量的增加无需再平衡
【扩容】2. 带状模式没有自动增添分片的能力,需要运维手工提前增加分片;如果路由策略计算出的分片并不存在时,会导致失败
【扩容】3. 环状模式中,如果新旧 [sBeginDate,sEndDate] 之间有重叠,需要进行部分数据迁移;如果新旧 [sBeginDate,sEndDate] 之间没有重叠,需要数据再平衡
配置注意点
【配置项】1. 在 rule.xml 中,可配置项为 propertyname="sBeginDate" 、 propertyname="sPartionDay" 、 propertyname="dateFormat" 、 propertyname="sEndDate" 和 propertyname="defaultNode"
【配置项】2.在 rule.xml 中配置 propertyname="dateFormat",符合 java.text.SimpleDateFormat 规范的字符串,用于告知 DBLE 如何解析sBeginDate和sEndDate
【配置项】3.在 rule.xml 中配置 propertyname="sBeginDate",必须是符合 dateFormat 的日期字符串
【配置项】4.在 rule.xml 中配置 propertyname="sEndDate",必须是符合 dateFormat 的日期字符串;配置了该项使用的是环状模式,若没有配置该项则使用的是带状模式
【配置项】5.在 rule.xml 中配置 propertyname="sPartionDay",非负整数,该分片策略以 86400000 毫秒(24 小时整)作为一份,而 sPartionDay 告诉 DBLE 把每多少份放在同一个分片
【配置项】6.在 rule.xml 中配置 propertyname="defaultNode" 标签,非必须配置项,不配置该项的话,用户的分片索引值没落在 mapFile 定义
不好意思,只能看到您发的图,我只能粗略的模拟一下
思路: 使用 date_format() 函数 (mysql自带的函数)
(1) 创建表
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;
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流