0%

如果要实现你某列的默认值为当前更新日期与时间的功能,
你可以使用TIMESTAMP列类型

下面就详细说明TIMESTAMP列类型

TIMESTAMP列类型
TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。
TIMESTAMP值显示尺寸的格式如下表所示:

列类型 显示格式
TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY
Read more »

按理说 -F”[]”,[]表示匹配括号中的任何一个字符,[]中间的字符应该是和顺序无关的,可是我实验的结果却不一样,这是为什么呢?

1
echo "1[2]3[4]" | awk -F"[\\\\[\\\\]]" '{print $1,$2,$3,$4}'

有时候用6个^做分隔符的时候,就需要采用awk -F"[\\\\^\\\\^\\\\^\\\\^\\\\^\\\\^]" '{print $1}'

1
2
3
select email into outfile "test.txt" from email;

select substring(boss,0,2),addr from guest;
1
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE "/opt/abc.txt" INTO TABLE table_name FIELDS TERMINATED BY ',' (column1, column2,colum3);
1
2
3
mysql> SELECT * FROM table1 INTO OUTFILE 'data.txt'
FIELDS TERMINATED BY ','
FROM …
Read more »

MySQL 5.1开始,binlog支持row-based的格式,默认情况下只能看到一些经过base-64编码的信息,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DELIMITER /*!*/;
# at 7493962
#090827 5:25:03 server id 1 end_log_pos 0 Start: binlog v 4, server v 5.1.26-rc-community-log created 090827 5:25:03
BINLOG '
L6iVSg8BAAAAZgAAAAAAAAAAAAQANS4xLjI2LXJjLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
# at 7493962
# at 7494009
#090827 13:20:40 server id 1 end_log_pos 7494009 Table_map: `test`.`test1` mapped to number 96991
#090827 13:20:40 server id 1 end_log_pos 7494045 Write_rows: table id 96991 flags: STMT_END_F

BINLOG '
qBeWShMBAAAALwAAAHlZcgAAAN96AQAAAAAABHRlc3QABXRlc3QxAAIDDwI8AAM=
qBeWShcBAAAAJAAAAJ1ZcgAQAN96AQAAAAEAAv/8AwAAAAEz
'/*!*/;
# at 7494045
#090827 13:20:40 server id 1 end_log_pos 7494072 Xid = 2525562
COMMIT/*!*/;
DELIMITER ;
# End of log file

这里只能看到test.test1表做了改动,但具体改了什么,就不知道了,那么怎样才能看到到底改了什么呢?从MySQL 5.1.28开始,mysqlbinlog多了个参数–verbose(或-v),将改动生成带注释的语句,如果使用两次这个参数(如-v -v),会生成字段的类型、长度、是否为null等属性信息。如下:

Read more »

先看一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
. /root/.bash_profile

cat /home/yejr/alldb|while read LINE
do
#取得IP和组号
IP=`echo $LINE | awk '{print $1}'`
NU=`echo $LINE | awk '{print $2}' | awk -F '-' '{print $1}'`

cnt=`ssh root@$IP "mysql -e 'select count(*) from yejr.tbl1'|tail -n 1"`

echo "$IP $NU $cnt"
done

看起来没有问题吧,实际上,执行的时候只循环了一次,就退出while循环了,为什么呢?

Read more »

MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型 | 字节 | 最小值 | 最大值
—|—
| | (带符号的/无符号的) | (带符号的/无符号的)
TINYINT | 1 | -128 | 127
| | 0 | 255
SMALLINT | 2 | -32768 | 32767
| |0 | 65535
MEDIUMINT | 3 | -8388608 | 8388607
| |0 | 16777215
INT | 4 | -2147483648 | 2147483647
| | 0 | 4294967295
BIGINT | 8 | -9223372036854775808 | 9223372036854775807
| | 0 | 18446744073709551615

MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。

Read more »

chrome_sync_internals

Chrome的同步功能可能是最让大家兴奋的功能,依托于Google强大的云端技术支持,你可以在各个电脑安装的Chrome浏览器之间同步网页应用、扩展、主题、自动填充、设置、密码、书签等等数据。但有时候你可能发现同步很慢,或是出错,此时你可以在地址栏输入 chrome://sync-internals/ 来查看同步细节(如上图)。

如果Summary是READY,就是同步正常。如果是OFFLINE_UNUSABLE你就得找找问题了,可能是没登录,也可能是网络出了问题。话说每次Chrome自动升级之后,都要重新登录帐号来进行同步这一点太不方便了,有时候同步不成功就是因为Chrome自己默默又升级了,你需要重新登录帐号。

Master上执行

1
mysql> load data INFILE '/tmp/del_proid.txt' INTO table del_proid;

在Binlog中记录的SQL是这样的

1
load data LOCAL INFILE '/tmp/SQL_LOAD_MB-1-0' INTO table del_proid

并且在/tmp目录中也确实出现了这个文件,内容和del_proid.txt一模一样。

同步时,Master的Binlog Dump进程会读取SQL_LOAD_MB-1-0文件的数据传,送给Slave的IO进程写入Relaylog,当Slave同步到该语句时,SQL进 程从Relaylog中解出数据,仍以文件名SQL_LOAD_MB-1-0写入slave-load-tmpdir参数打定的目录下,然后执行 load data LOCAL INFILE '/tmp/SQL_LOAD_MB-1-0' INTO table del_proid , 完成后,删除该文件。

Read more »

按固定格式批量修改文件名,如:

XXX-001.txt
XXX-002.txt
XXX-003.txt

首先进入文件目录,然后利用语句;如果不是在文件目录下,就得改下命令,在mv时,新旧文件都能有对应的绝对路径。

1
for $file (`ls x*`){chomp $file;$new=sprintf "XXX-%03d.txt",++$i;system "mv","$file","$new"}

MySQL导出的SQL语句在导入时有可能会非常非常慢,在处理百万级数据的时候,可能导入要花几小时。在导出时合理使用几个参数,可以大大加快导 入的速度。

-e 使用包括几个VALUES列表的多行INSERT语法;
–max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小;
–net_buffer_length=XXX TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行。

注意:max_allowed_packet 和 net_buffer_length 不能比目标数据库的设定数值 大,否则可能出错。

首先确定目标数据库的参数值

1
2
mysql> show variables like 'max_allowed_packet';
mysql> show variables like 'net_buffer_length';

根据参数值书写 mysqldump 命令,如:

1
# mysqldump -uroot -p123 21andy -e –max_allowed_packet=16777216 –net_buffer_length=16384 > 21andy.sql

OK,现在速度就很快了,主要注意的是导入和导出端的 max_allowed_packet 和 net_buffer_length 这2个参数值设定,弄大点就OK了

其实,最快的方法,是直接COPY数据库目录,不过记得先停止 MySQL 服务。