一个经得起时间考验的人
mysql
Mysql:Can’t open file: ‘tabelname_sids.ibd’ (errno: 1)
三 11th
在使用ADManager Plus的过程中发现启动Mysql数据库时出现如下错误:
D:\AdventNet\ADManager Plus\bin\mysql\bin\mysqld-nt:
Can’t open file: ‘tabelname_sids.ibd’ (errno: 1)
而在使用mysqldump备份整个数据库adsm时则提示Can’t open file: ‘tabelname_sids.ibd’ 无法锁定数据表tabelname。
在Mysql的官方论坛还找到一个相关的帖子:Can’t open file ****.ibd (errno: 1)。不过在Mysql的错误日志“计算机名.err”中的提示更详细(英文原文被我不小心删掉了,解释一下大概的意思):
在删除Mysql数据库中的表时发生错误引起表的结构定义文件 .frm 未删除,找到对应的 tablename.frm 删掉就OK了。
小知识
MYSQL使用.frm文件恢复数据表(Innodb和Myisam)结构. 英文原文(Recovering CREATE TABLE statement from .frm file),
frm、MYI、MYD分别对应MyISAM表的表结构\索引\数据文件
开源数据库MySQL源代码及安装程序镜像站点
四 9th
为了下载Mysql 4.0.26的源代码,但是却找到了一系列的镜像站点,所以顺便整理一下。
这些镜像从Google搜索得到,如果以下站点失效,你可以尝试在Google中输入如下内容进行查找:
inurl:"mysql" /Downloads/
intitle:"index" of "mysql/"
收集开源数据库MySQL源代码及安装程序镜像站点,镜像内容包括了MySQL从3.23到6.0的所有版本及各种系统平台下的安装程序和源代码文件。
http://download.softagency.net/MySQL/Downloads/
这个站点的下载速度最快,好像是位于日本的一个镜像
以下两个站点的速度比较慢,但是都有相应的匿名FTP与之对应
http://ftp.plusline.de/mysql/Downloads/
对应的匿名FTP: ftp://ftp.plusline.de/
http://mirrors.sunsite.dk/mysql/Downloads/
对应的匿名FTP: ftp:://mirrors.sunsite.dk/
再来两个Mysql镜像站点
http://mysql.mirrors.cybercity.dk/Downloads/
http://mysql.oss.eznetsols.org/Downloads/
MySQL居然被SUN花10亿美元收购了!
一 17th
当初Oracle收购了存储引擎InnoDB和Berkeley DB时,还以为MySQL最终会被Oracle收购呢!Oracle收购公司是出了名的疯狂的。现在好了被Sun收购了,凭Sun在开源事业上做的贡献应该会把MySQL打理得更好的。
现在也就不愁有一天见不到开源的MySQL了。
不过Oracle也没有闲着呢,居然以85亿美元收购了BEA Systems,比之前的67亿美元高出一大截。
1030-Got error 28 from table handler-解决方案
十 31st
访问Discuz论坛中的部分会员的个人空间时出现如下错误:
Error: Got error 28 from table handler
Errno: 1030
论坛的其它页面访问正常,所有可以知道Mysql运行正常,
直接在PHPmyadmin中运行出错的SQL语句,也得到
1030-Got error 28 from table handler
的错误信息。
查看服务器的详细信息后,发现/tmp目录空间为0.
清理/tmp目录的临时文件,再次访问出错的页面,一切正常。
原来是个人空间运行的SQL语句比较复杂使用到了临时表,而/tmp目录已经没有空间提供生成临时表。
所以出现1030的错误。
[Discuz插件]数据库增量备份 测试版
六 10th
安装教程:
需要更新数据表,对应的SQL语句如下:
insert into utf8_settings values(‘LastIncrementalBackup’,now());
ALTER TABLE utf8_posts
ADD COLUMN lastmodifytime timestamp(14) not null DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
UPDATE utf8_posts SET lastmodifytime=now();
ALTER TABLE utf8_threads
ADD COLUMN lastmodifytime timestamp(14) not null DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
UPDATE utf8_threads SET lastmodifytime=now();
用压缩文件中的Admin目录中的两个文件代换原来的文件.
两个文件对修改的地方都加了注释.
Discuz5.5提供的备份方式是对指定的数据表进行完全备份。从而造成了生成的备份文件体积过大。备份文件时给服务器造成了很大的,数据还原时间变长。等等。
但是在实际中,备份的数据相对系统进行的上一次备份有很多内容是没有进行更改的,因此我们可以通过一次完全备份+增量备份来解决Discuz5.5默认的备份方式造成的麻烦。
二、技术思路
1.如何记录表中记录最后的修改时间
Mysql是不支持增量备份的,因此在备份数据时我们只能备份整个数据库或者整张表成sql文件,也就是说它备份时的最小单元只能是表。
增量备份首先需要解决的问题是如何标识某条记录的最后的修改时间(在增量备份中,只需要备份从上一次备份的时间点后进行了修改的记录)。幸运的是Mysql提供了一个特殊的数据类型:TIMESTAMP
A timestamp. The range is ’1970-01-01 00:00:00′ to partway through the year 2037.
A TIMESTAMP column is useful for recording the date and time of an INSERT or UPDATE operation. By default, the first TIMESTAMP column in a table is automatically set to the date and time of the most recent operation if you do not assign it a value yourself. You can also set any TIMESTAMP column to the current date and time by assigning it a NULL value.
A TIMESTAMP value is returned as a string in the format ‘YYYY-MM-DD HH:MM:SS’ with a display width fixed at 19 characters. To obtain the value as a number, you should add +0 to the timestamp column.
Note: The TIMESTAMP format that was used prior to MySQL 4.1 is not supported in MySQL 5.0; see MySQL 3.23, 4.0, 4.1 Reference Manual for information regarding the old format.
TIMESTAMP列忠实在记录了“Insert”和“Update”操作进行的时间。因此我们可以通过在需要进行增量备份的表中加入类型为TIMESTAMP的列 lastmodifytime 即可以记录下此记录最后的修改时间了。进行增量备份时只需要把上一次的备份时间和此列进行比较,值大的即是已经修改过的记录。
2. Discuz需要解决的特殊问题
首先:定义需要增量备份的数据表(对于经常修改的数据表,增量备份的意义不大,从性能考虑还不如每次都完全备份)。
其次:去掉无用的功能,如果需要完美地增量备份,个人认为以下功能需要删除:
记录附件的下载次数的功能。
记录主题被查看(回复的数次保留起来比较好)次数的功能。
附件:incrementalbackup_1.0.zip(16801 Byte)
data too long for column xxx解决方案
一 20th
昨天下午因为项目需要,使用了MySQL 5.0。
老实说对MySQL 4.0以上的版本字符编码我一直是怀有顾虑的,一般情况下尽量只用4.0版。
结果昨天下午Insert数据时遇到奇怪的报错:"data too long for column ’title’ …",我甚至还检查了我设置的varchar长度,最后终于通过Google发现了原因,可恶的编码。因为4.1以上版本的MySQL默认编码字符集是latin1,我的 JSP页面是GBK,提交的数据也是GBK,JDBC连接也是用的GBK,因此我把数据库相应字段的字符集重新整理为gbk,搞定。