只修改SSH端口是冇用的

经常在网上看到说修改SSH端口可以提高服务器的安全,事实证明这个是不对的。

话说在一个夜深人静的夜晚,某blogger发现其blog竟然down掉了,在CP上重启后发现VPS是起来了,可mysql连接不上,这不要人命吗?哥的VPS是改了SSH端口的,而且更不幸的是,几经辗转,该VPS修改过的端口已经被遗忘了。。。
OK,OK,只能是求助谷哥了。搜索所得,端口扫描(论坛的人是很神奇的,有人给出的答案是用 netstat -lpnut,这个命令是得到本机开放的端口,我都登录不进去我运行什么命令啊我。)。好吧一条命令就搞定:

nmap -p 0-65535 你的IP

在Linode上数秒后就能找到丢失的端口,那些可怜的数刀一个的VPS就比较惨,等待啊等待。

如果你想我这么“大头虾”,你会用到这条命令,在此之前你可能要安装一下nmap:

yum install nmap #centos用这个
apt-get install nmap #ubuntu,debian用这个

是了,mysql还没有起来呢,

/etc/init.d/mysql start

靠,起不来。网上的人说可能是硬盘满了

df -H

20G的硬盘塞得满满的。用du看看是哪里塞满了,最后找到了

du -h -–max-depth=1 /usr/local/mysql/var

不看不知道,一看吓一跳,里面充满了一堆叫mysql.bin.00000X的东西,原来是temp文件,哥只放了小站,用不上这个,删!启动mysql,ok了!

其实吧,我就是上来冒个泡的 😆

快速添加多个MySQL用户及数据库

快速添加多个MySQL用户及数据库

如果大家像我一样爱“搬家”的话,就会明白添加多个MySQL用户和数据库的痛苦。以前用虚拟主机,在cpanel上添加,虽然说是有界面,操作过程比较简捷明了,但添加多个用户及数据库时,还是费时费力;以后有了SSH,可以直接敲命令,登录Mysql,添加数据库,给它添加对应的用户并给予权限,一条一条命令地敲,还是不够省力。

昨天晚上搜索mysqladmin时,无意中翻到MySQL文档4.5.1.4. Executing SQL Statements from a Text File,原来mysql还可以直接从文档中读取并执行命令(失败,这个不是什么新玩意,之前都已经记录过这个命令——MySQL大数据库的导出和导入 😳 )。
Read More »

MySQL大数据库的导出和导入

phpmyadmin是一件很方便的在线管理MySQL数据库的工具,但对于较大的数据库的导出和导入却显得力不从心。特别是导入工作,通常2M已经是它的极限了。

这时用MySQL的原生工具就能很好地解决这些问题了。

假设我们要对一个名为blog的数据库进行导出和导入的操作

导出

mysqldump -u数据库用户名 -p密码 blog > 路径/导出名.sql

具体的操作是这样的,打开命令提示符(这里都以Windows系统为例),进入mysql安装所在目录中的bin文件夹(因为我的mysql没有安装为本地服务,所以要进行这一步),最后输入运行上面的那条命令即可。

导入

mysql -u数据库用户名 -p密码 blog < 路径/数据库名.sql

操作如上,用命令提示符进入bin文件夹后,输入运行该命令即可。

不是什么新奇的技术,只是做个记录,利于日后的参考。 :mrgreen:

二零零八总结与二零零九展望

二零零九年已经来到,又是时候对过去的一年做一个总结了。
当然,自然少不了对二零零九年来个展望啦。(希望自己能做到吧 😕 )

二零零八年发布文章数:107

数量比上一年有了明显的提高,但自己感觉还是少了点,所以希望接下来的二零零九年能发布更多的文章。

#对应的得到2008年发布文章数的SQL语句
SELECT COUNT( * )
FROM `wp_posts`
WHERE post_date >= '2008-01-01'
AND post_date < '2009-01-01'
AND post_type = 'post'
AND post_status = 'publish'

收到的留言(包括trackback与pingback):940

得益于国人在WordPress留言系统上的改进与提高,留言数有了很大的提高。(当然冰古自己的留言都占了一大部分 :mrgreen:
二零零九年的希望当然是越多越好啦 🙂 (这个任务希望大家帮帮忙)

#对应的得到2008年收到留言总数的SQL语句
SELECT COUNT( * )
FROM `wp_comments`
WHERE comment_date >= '2008-01-01'
AND comment_date < '2009-01-01'
AND comment_approved =1

二零零八年发表并收到留言数量前十的文章:

  1. godaddy域名超级优惠码 → 留言数:38
  2. WordPress中用Ctrl+Enter提交留言 → 留言数:37
  3. 《命令与征服:红色警戒3》电驴下载 → 留言数:29
  4. 《归来!悟空和他的朋友们》QQ中转站下载 → 留言数:26
  5. 博客接龙大赛:Wordpress十八摸 → 留言数:25
  6. 长见识啊 → 留言数:25
  7. Gmail邮件小表情 → 留言数:25
  8. 常驻我电脑的国产软件 → 留言数:24
  9. WordPress主题:Simple.1 → 留言数:19
  10. 使用Netbeans开发WordPress → 留言数:19
#对应的收到留言最多的文章的SQL语句
#wordpress 2.7适用,其他版本未测试
#如不能使用,可以参考:http://bingu.net/425/some-sql-for-2006-blog-stats/
SELECT `ID`, `post_date`, `post_title`, `comment_count`, `post_name`
FROM `wp_posts`
WHERE post_date >= '2008-01-01'
AND post_date < '2009-01-01'
AND post_type = 'post'
AND post_status = 'publish'
ORDER BY `wp_posts`.`comment_count` DESC

附上使用GaMerZ WP-PostViews插件的查看数最多统计SQL语句:

SELECT DISTINCT meta_value, ID, post_title, post_name, post_date, comment_count
FROM `wp_posts` , `wp_postmeta`
WHERE post_id = ID
AND post_date >= '2008-01-01'
AND post_date < '2009-01-01'
AND post_type = 'post'
AND post_status = 'publish'
AND meta_key = 'views'
ORDER BY cast( `meta_value` AS DECIMAL ) DESC

最后,感谢各位的留言支持:
最勇猛的五位兄弟(姐妹?)是

  1. wayne → 留言数:25
  2. Donald → 留言数:24
  3. Yacca → 留言数:19
  4. iColor → 留言数:18
  5. JoBru → 留言数:18
#对应留言最多的SQL语句
SELECT DISTINCT concat( '<a href="', comment_author_url, '">', comment_author, '</a>' ) , count( comment_author ) AS num_author
FROM `wp_comments`
WHERE comment_date >= '2008-01-01'
AND comment_date < '2009-01-01'
AND comment_author != '冰古'#去掉自己吧
AND comment_type != 'trackback'
AND comment_type != 'pingback'
AND comment_approved =1
GROUP BY comment_author, comment_author_email
ORDER BY num_author DESC

用YUM升级CentOS系统中PHP和MySQL

用上umVPS后,很多时候在虚拟主机不用自己动手的事情都要自己搞定了,例如:PHP和MySQL的升级。因为不用自己动手,也动不了,所以冰古不太清楚虚拟主机的PHP和MySQL是不是会及时地更新。但用VPS,可以动手玩一下也保证安全,冰古是很乐意进行更新的。以下就是用YUM升级CentOS系统中PHP和MySQL的过程:

yum是CentOS系统自带的用于方便地添加/删除/更新RPM包的工具,它能自动解决包的倚赖性问题。
用yum更新PHP,只需用一条命令就可以搞定:

#yum update php

但问题来了,使用此命令后,系统告诉我,没有发现可更新的包。而当前的PHP版本只是5.2.1,PHP官方已经更新到5.2.6了。
经过一番询问,才知道原来CentOS系统的源里PHP仍旧是5.2.1,需要额外的源才能升级PHP。
根据外国网友的介绍,冰古添加了额外的源
登录SSH后依次运行下列命令:

#rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

#vi /etc/yum.repos.d/utterramblings.repo #文中这里是使用nano,但VPS不能启动nano,用vi代替也是可以的

在打开的文档中加入下面内容:

[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

保存。
再次运行下面的命令就可以完成php的升级了

#yum update php

同理,运行下面命令,升级mysql

#yum update mysql

latin1_swedish_ci to utf8_general_ci

从旧主机搬到新主机最烦人的就是乱码问题。这也是个由来已久的问题了。
wordpress 2.2开始,wordpress提供DB_CHARSET和DB_COLLATE这两个参数以便我们更好地解决这个问题。但似乎这些并不够,仍旧会产生这样那样的问题,如Warning: Invalid argument supplied for foreach() in D:\xampp\htdocs\wordpress\wp-includes\classes.php on line 88。最根本的解决应该还是把数据库里的数据由latin1_swedish_ci格式转换成utf8_general_ci格式。
wordpress官方的论坛就像wordpress那样,很有人气。你遇到的问题,很可能里面已经有人讨论过并已经解决了。乱码问题这个很热门的问题,当然也是完美地解决了地。
以下方法涉及数据库修改,请在备份数据库后操作!
解决的方法是这样的:
1. 下载g30rg3_x提供的这个plugin;
2. 确保你的wordpress是2.2.x或2.1.x,因为这个plugin只支持这两个系列的版本;
3. 上传到plugins文件夹并激活;
4. 到’UTF-8 Database Converter’菜单中按照提示进行剩余操作即可。

上面的办法多了不少的限制,如wordpress的版本需是2.2.x或2.1.x,并能保证你的wordpress还能登录!(是的,很可能你的wordpress这时已经不能登录了。)
这时我们可以借用一下g30rg3_x提供的UTF8_DB_Converter_DoIt()函数:

<?php
define('DB_NAME', 'putyourdbnamehere');    // 数据库名
define('DB_USER', 'usernamehere');     // MySQL用户名
define('DB_PASSWORD', 'yourpasswordhere'); // 密码
define('DB_HOST', 'localhost');    // 很大可能你无需修改此项

function UTF8_DB_Converter_DoIt() {
	$tables = array();
	$tables_with_fields = array();

	// Since we cannot use the WordPress Database Abstraction Class (wp-db.php),
	// we have to make an a stand-alone/direct connection to the database.
	$link_id = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die('Error establishing a database connection');
	mysql_select_db(DB_NAME, $link_id);

	// Gathering information about tables and all the text/string fields that can be affected
	// during the conversion to UTF-8.
	$resource = mysql_query("SHOW TABLES", $link_id);
	while ( $result = mysql_fetch_row($resource) )
		$tables[] = $result[0];

	if ( !empty($tables) ) {
		foreach ( (array) $tables as $table ) {
			$resource = mysql_query("EXPLAIN $table", $link_id);
			while ( $result = mysql_fetch_assoc($resource) ) {
				if ( preg_match('/(char)|(text)|(enum)|(set)/', $result['Type']) )
					$tables_with_fields[$table][$result['Field']] = $result['Type'] . " " . ( "YES" == $result['Null'] ? "" : "NOT " ) . "NULL " .  ( !is_null($result['Default']) ? "DEFAULT '". $result['Default'] ."'" : "" );
			}
		}

		// Change all text/string fields of the tables to their corresponding binary text/string representations.
		foreach ( (array) $tables as $table )
			mysql_query("ALTER TABLE $table CONVERT TO CHARACTER SET binary", $link_id);

		// Change database and tables to UTF-8 Character set.
		mysql_query("ALTER DATABASE " . DB_NAME . " CHARACTER SET utf8", $link_id);
		foreach ( (array) $tables as $table )
			mysql_query("ALTER TABLE $table CONVERT TO CHARACTER SET utf8", $link_id);

		// Return all binary text/string fields previously changed to their original representations.
		foreach ( (array) $tables_with_fields as $table => $fields ) {
			foreach ( (array) $fields as $field_type => $field_options ) {
				mysql_query("ALTER TABLE $table MODIFY $field_type $field_options", $link_id);
			}
		}

		// Optimize tables and finally close the mysql link.
		foreach ( (array) $tables as $table )
			mysql_query("OPTIMIZE TABLE $table", $link_id);
		mysql_close($link_id);
	} else {
		die('<strong>There are no tables?</strong>');
	}

	return true;
}
UTF8_DB_Converter_DoIt();
?>

现在你把上面代码保存到一个php文件中,上传至空间并运行,如无意外你的数据已经完成了latin1_swedish_ci到utf8_general_ci转换。

Dreamhost自动备份mysql

在查找“用SSH备份mysql”时,发现的——“Dreamhost下每天自动备份mysql数据库,并发送到指定邮箱”。
觉得比wordpress的一些备份plugin好,决定启用。

1、用putty登录你的dreamhost;
2、运行

cd ~
mkdir backups
mkdir backups/archives

3、新建一个名为“mysql.sh”的文件,并输入下列代码:

#!/bin/bash
cd /home/username/backups/ #username改为你登录ssh时用的用户名
mkdir mysql 
suffix=$(date +%y%m%d)
mysqldump --opt -uUser -pPass -h mysqlA.domain.com db_nameA > mysql/db_nameA.$suffix.sql #User为数据库用户名,pass为数据库用户密码,mysqlA.domain.com为数据库地址,db_nameA为数据库名,请根据你的情况修改。
tar zcf archives/mysql_backup.$suffix.tar.gz mysql/*
rm -r mysql/
mutt you@domain.com -a /home/username/backups/archives/mysql_backup.$suffix.tar -s "MySQL Backup" #you@domain.com修改为你准备用于收取备份压缩包的邮箱。

保存后,上传到backups文件夹中。
4、在putty中运行

dos2unix ~/backups/mysql.sh
chmod 755 ~/backups/mysql.sh

5、在Dreamhost的panel,Goodies->Cron Jobs中新建Cron任务,选项设置为
Command to run: /home/User/backups/mysql.sh
#User改为你登录SSH时用的用户名。
时间照下图设置,将在北京时间每天的24:10左右运行备份MySQL程序,并发送备份压缩包到你指定的邮箱。
cron time setting
6、完成!

参考文献:wiki.dreamhost.com
Green Web Hosting! This site hosted by DreamHost.

wordpress导入后出现乱码之解决

昨天下了wamp5,准备再好好学学PHP和玩一下wordpress。
没想到一来就弄个麻烦的~从空间上备份的数据,导入到本地数据库后,竟然是一堆乱码(形如:????),自己是搞鼓了一整天(试了几乎所以相关的utf8编码都是不行)也是没搞定。
自己搞不定就找人问吧。来到海豚在google论坛上建的论坛上发言,下午海豚告诉我在苛世录上可找到解决办法,跟去→桑林志Windix’s Weblog阿修的部落格
原因是:

从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过我在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。我读了一下新的MySQL在线手册中第十章”Character Set Support“后终于找到了解决方法并测试通过。

MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:

SET NAMES 'utf8';

解决办法是:
一、导入数据时,新建的数据库collation (校勘/整理)项选择为utf8_general_ci;
二、修改wp-includes/wp-db.php为

$this->dbh = @mysql_connect($dbhost,$dbuser,$dbpassword);
//加上下面這行
$this->query("SET NAMES 'utf8' ");

至此,问题解决。