解决Error(1133): Can’t find any matching row in the user table

刚刚尝试使用同步文件法把整个mysql的数据文件传送到另外一台服务器做双机备份。

转移完成后通过命令行形式用root账户连接上mysql查看了一下,所有数据完好,用户数据也转移过来了。

但是当我把网站数据也导入该服务器之后,所有需要访问mysql数据库的网站全部出现了无法连接的错误,症状就如同密码错误一样。

使用phpmyadmin进入mysql查看,在权限页面也可以正常看到所有的mysql账户,在mysql.user表中所有的数据也很正常。

然后我尝试了一下修改导入的账户的密码,使用了

[cce_mysql]SET PASSWORD FOR ‘username’@'localhost' = PASSWORD( '****' )[/cce_mysql]

的方法,收到了以下错误提示

[ccei]Error (1133): Can’t find any matching row in the user table[/ccei]

经过在网上各种查询之后,找到的最简单的办法就是在mysql命令行中执行[ccei_mysql]FLUSH PRIVILEGES;[/ccei_mysql]这一语句即可。

发生这一错误的原因是在变更了mysql.user表之后,没有使用FLUSH PRIVILEGES命令来更新权限表(grant tables)

2012.05.24
标签:
Category:数自计
15,710 views
No Comments

ssh端口更改后rsync的用法

rsync有两种常用的认证方式,一种为rsync-daemon方式,另外一种则是ssh。

在一些场合,使用rsync-daemon方式会比较缺乏灵活性,ssh方式则成为首选。但是今天实际操作的时候发现当远端服务器的ssh默认端口被修改后,rsync时找不到一个合适的方法来输入对方ssh服务端口号。

在查看官方文档后,找到一种方法,即使用-e参数。

-e参数的作用是可以使用户自由选择欲使用的shell程序来连接远端服务器,当然也可以设置成使用默认的ssh来连接,但是这样我们就可以加入ssh的参数了。

具体语句写法如下:

[cce_bash]rsync -e 'ssh -p 1234' username@hostname:SourceFile DestFile[/cce_bash]

其他参数完全按照rsync的规定格式加入即可。

上面语句中比较新鲜的地方就是使用了单引号,目的是为了使引号内的参数为引号内的命令所用。没有引号的话系统就会识别-p是给rsync的一个参数了。我的描述可能比较烂,详情可以参考rsync官方描述:

Command-line arguments are permitted in COMMAND provided that COMMAND is presented to rsync as a single argument.  You must use spaces (not tabs or other whitespace) to separate the command and args from each other, and you can use single- and/or double-quotes to preserve spaces in  an  argument (but not backslashes).  Note that doubling a single-quote inside a single-quoted string gives you a single-quote; likewise for double-quotes (though you need to pay attention to which quotes your shell is parsing and which quotes rsync is parsing).

2012.05.24
标签:
Category:数自计
8,818 views
3 Comments

使linux命令行中的ls输出带颜色

在~/.profile中加入以下一行

[cce_bash]export LS_OPTIONS='--color=auto'[/cce_bash]

有了颜色看得更清楚~

2012.05.22
标签:
Category:数自计
162 views
No Comments

使用ssh-keygen实现ssh无密码登陆

ssh是用来远程登陆linux系统的默认工具,使用方便,安全性强。

但当用户需要同时管理很多台机器,或者需要多次重复登陆某台机器的时候,每次输入密码(尤其是强密码)就成为了很蛋疼的一个操作。

ssh为用户提供了一种方便且安全的解决方案,即通过密钥来进行认证客户机,使得客户机在把自己的公钥添加到服务器端的受信任列表后,可以无密码登陆该远程机器。

该工具即为ssh-keygen

ssh-keygen有N多可以附加的参数,其中最常用为-t,用来设置生成密钥所使用的算法类型(rsa/dsa),可通过以下命令实现:

[cce_bash]
ssh-keygen -t rsa
ssh-keygen -t dsa
[/cce_bash]

如果没有附加-t参数,则默认为使用rsa加密。

执行ssh-keygen命令会出现如下提示:

[cce_bash]
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
[/cce_bash]

其中第二行是让你输入保存的路径,一般为默认即可。第三、四行,则是让你输入你的密钥的passphrase,即为密码一样的东西,目的是为了对密钥对的私钥进行加密,可以降低私钥被盗用的风险。

以默认生成路径为例,你可以在~/.ssh/目录下看到id_rsa和id_rsa.pub两个文件,其中id_rsa为私钥,id_rsa.pub为公钥。为了实现无密码登陆的目的,我们还需要将id_rsa.pub的内容添加到服务器端的/root/.ssh/authorized_keys文件中,方法就不做赘述了。

[update]: authorized_keys的属性需要设置为600,否则会有问题。

在操作完成后尝试进行ssh连接,会发现如果在之前生成密钥对的时候设置了passphrase,这时会要求我们输入密码短语。为了实现免密码登陆,还需要进行两步操作:

[cce_bash]
eval `ssh-agent`
ssh-add
[/cce_bash]

然后按要求输入passphrase即可。

下面部分参考自http://www.newsmth.net/pc/pccon.php?id=1363&nid=130053

passphrase是用来对密钥对的私钥进行加密的,不会在网络上传播。

缺点:最后两步必需每次登录都执行。因为3设置环境变量,不同的登录是不同的。但对于shell,可以放在.bash_profile中执行,对于cron脚本,也可以在脚本中设置执行;4更是致命的,因为它是交互的,无法自定执行。

解决:只好设置passphrase为空,这样最后两步也就省掉了。

附:

ssh-agent 程序如同一个看门人,它根据需要安全地提供对安全密钥的访问。ssh-agent 启动后,它就会在后台运行,并且可以由 ssh 和 scp 程序等其他 OpenSSH 应用程序所使用。这就使得 ssh 程序可以请求一个已经解密了的密钥,而不是在每次需要时向您询问私钥的安全口令。

2012.05.22
标签:
Category:数自计
1,630 views
1 Comment

在有ipv6接入环境下优先使用ipv4

BuyVM家的vps都自带ipv6网络,虽说是与时俱进,但也出现了一些诡异的问题。比如说在debian下使用apt-get来进行安装、更新等操作时,系统会自动选择使用ipv6解析security.debian.org以及ftp.debian.org两个地址,但似乎解析出来的又有问题(或者是啥别的原因具体我也不懂),于是系统就傻等到连接超时才会去使用ipv4进行连接,大好时光都浪费在了等待上。

满世界google了一番之后找到了一个解决办法:

在/etc/gai.conf文件中加入如下这一行:

[cce_bash]precedence ::ffff:0:0/96 100[/cce_bash]

保存退出似乎就是可以了。

2012.05.20
标签:
Category:数自计
1,393 views
No Comments