于洋博客 互联网点滴记忆

9Jan/120

PHP Shell脚本获取所有WordPress Themes

Filed under: Linux, PHP No Comments
23Nov/110

重置忘记的MYSQL密码

[root@jk ~]# service mysqld stop
Stopping MySQL: [ OK ]
[root@jk ~]# mysqld_safe --skip-grant-tables --skip-networking &
[1] 24688
[root@jk ~]# Starting mysqld daemon with databases from /var/lib/mysql

[root@jk ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.0.91-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set password=password('******') where user='root';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 3 Changed: 0 Warnings: 0

mysql> quit
Bye
[root@jk ~]# service mysqld restart
STOPPING server from pid file /var/run/mysqld/mysqld.pid
111123 22:38:01 mysqld ended

Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]
[root@jk ~]#

Filed under: Mysql No Comments
23Nov/110

死于Order By Rand()

我的某个项目里有需求从N个项目里随机抽取M个,这里我用到了Order By Rand()。
开始运作的挺好,工作表的记录数在几千左右,响应时间都马马虎虎过得去。
后来我们添加了一个功能,建了一个新表,这个表的记录会持续增加。累积了一段时间灾难爆发了,应用连接不上数据库,用mysql console,show processlist看到这种查询竟然要几秒钟。Order By Rand()用在大量记录的表上真是个灾难,而且会越来越慢。

网上搜索了一下方法,在min(id) max(id)之间生成一个随机数,然后选择大于等于这个id的M个记录即可。
SELECT * FROM `centences` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `centences`)-(SELECT MIN(id) FROM `centences`))+(SELECT MIN(id) FROM `centences`)) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id LIMIT 1;

经过修改,问题解决。不过这个解决方案有个缺陷,假设不是LIMIT 1,会有几率导致结果比预想的少一点,这种时候就需要靠程序判断去弥补了。

另外一个问题,就是取到的是连续的记录,这个不满足我们的应用。这里依然采用循环M次的方法,每次取1。虽然执行的语句多了,但是总体执行时间还是比Order By Rand要节省很多。

Filed under: Lamp, Mysql No Comments
25Oct/110

将LAMPP中的BIN目录加入PATH

临时设置:
export PATH=$PATH:/opt/lampp/bin/

永久设置:
1.打开/root/.bash_profile
2.输入
PATH=$PATH:/opt/lampp/bin
export PATH
3.保存、退出
:wq

Filed under: Lamp, Linux No Comments
25Oct/110

开机自动运行LAMPP

為了让LAMPP在每次开机时自动执行,可以将启动的 scripts 加入你的 /etc/rc.d/rc.local 中:

1.编辑rc.local文件
# vi /etc/rc.d/rc.local

2.加入启动的 scripts
/opt/lampp/lampp start

3.保存并退出vi
:wq

Filed under: Lamp, Linux No Comments
25Oct/110

海外电子商务技术潜规则

如果你做海外电商,有几个事要铭记于心。
1、服务器要买在国外,再慢不能慢客户。
2、基于第一点,你自己访问自己的网站会很慢。

待续。。。

Filed under: Uncategorized No Comments
22Oct/113

Godaddy DNS Manager: Not hosted here

昨天发现一个域名无法解析,错误提示字面的意思是,这个Name Server不在Godaddy。于是发邮件给客服寻求帮助,得到客服的方案是先切换到Parked模式,然后过几分钟就好,网上按错误提示搜索与客服的方案一样,但是经过实验,对我此次遇到的问题无效。

下午接上SKYPE打电话给客服,接电话的兄弟不知道是不是就是回邮件的家伙,指导我又按照默认的方法实验了一次,直到我提出抗议,我说我已经做过Serveral Times,结果都是恢复到错误状态,无效。

最终客服说他会发Ticket给其他部门协助,72小时内解决。

PS:
发现自己越来越无视自己的口语语法错误后,反而比以前句句纠结沟通效果要好:)

Filed under: Uncategorized 3 Comments
8Sep/111

ssh_exchange_identification: Connection closed by remote host

重启SSH Server (OpenSSH)即可解决,但是你都登不上去,怎么重启呢。

如果你装了CPANEL,可以登录进WHM重启。

如果你的主板支持Remote Console Redirect,可以直接连进去重启。

最后一个办法,要求机房重新启动服务器。

这个问题没有什么特别的根源,就是SSH SERVER本身运行过久不稳定了。

Filed under: Linux 1 Comment
7Sep/110

服务器Non Payment费

3月份在MidPhase月付租了两个服务器跑XRUMER,后来决定不用,就放在那里等他自己Terminate。前两天有需求要再租用一台,结果去的时候,人家要求结清之前的Non Payment费用。仔细看了TOS,还真的有这一说,如果不用的话要提前7天告知。

以后用这种周期性付钱的东西还是要注意点结算时间,免得再次造成困扰。

Filed under: Uncategorized No Comments
2Sep/110

Magento无法更新索引故障

更新索引报错:There was a problem with reindexing process.
后台开启LOG,重现故障。
检查var/log/exception.log
发现如下错误:
2011-09-02T01:34:53+00:00 DEBUG (7): Exception message: SQLSTATE[HY000]: General error: 1005 Can't create table 'goodsite_default.catalog_category_flat_store_11' (errno: 150)
Trace: #0 /home/goodsite/public_html/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /home/goodsite/public_html/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array)
#2 /home/goodsite/public_html/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('CREATE TABLE `c...', Array)
#3 /home/goodsite/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('CREATE TABLE `c...', Array)
#4 /home/goodsite/public_html/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Category/Flat.php(523): Varien_Db_Adapter_Pdo_Mysql->query('CREATE TABLE `c...')
#5 /home/goodsite/public_html/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Category/Flat.php(430): Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat->_createTable('11')
#6 /home/goodsite/public_html/app/code/core/Mage/Catalog/Model/Category/Indexer/Flat.php(237): Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat->rebuild()
#7 /home/goodsite/public_html/app/code/core/Mage/Index/Model/Process.php(139): Mage_Catalog_Model_Category_Indexer_Flat->reindexAll()
#8 /home/goodsite/public_html/app/code/core/Mage/Index/Model/Process.php(167): Mage_Index_Model_Process->reindexAll()
#9 /home/goodsite/public_html/app/code/core/Mage/Index/controllers/Adminhtml/ProcessController.php(124): Mage_Index_Model_Process->reindexEverything()
#10 /home/goodsite/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Index_Adminhtml_ProcessController->reindexProcessAction()
#11 /home/goodsite/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('reindexProcess')
#12 /home/goodsite/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(177): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#13 /home/goodsite/public_html/app/code/core/Mage/Core/Model/App.php(304): Mage_Core_Controller_Varien_Front->dispatch()
#14 /home/goodsite/public_html/app/Mage.php(596): Mage_Core_Model_App->run(Array)
#15 /home/goodsite/public_html/index.php(390): Mage::run('', 'store')
#16 {main}

检查/home/goodsite/public_html/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Category/Flat.php文件第 523 行附近
$_tableSql .= "PRIMARY KEY (`entity_id`),
KEY `IDX_STORE` (`store_id`),
KEY `IDX_PATH` (`path`),
KEY `IDX_LEVEL` (`level`),
CONSTRAINT `FK_CATEGORY_FLAT_CATEGORY_ID_STORE_{$store}` FOREIGN KEY (`entity_id`)
REFERENCES `{$this->getTable('catalog/category')}` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_CATEGORY_FLAT_STORE_ID_STORE_{$store}` FOREIGN KEY (`store_id`)
REFERENCES `{$this->getTable('core/store')}` (`store_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8";
$this->_getWriteAdapter()->query($_tableSql);

删除掉ENGINE=InnoDB,改用MyISAM表,成功。
至于为什么用InnoDB不行,我也不知道,这个案例里已存在的所有的表都是MyISAM的。可能在一开始就是个错误,而至少现在一切工作正常了。

Filed under: Magento No Comments