远程连接MySQL数据库很慢的解决方法

这几天把网站的 WEB 跟 MySQL 分开成两台服务器了,可发现远程连接数据库的时候变得很慢,在 4 秒种以上,然而测试了本地的连接后又是正常的。
其实出现这种情况主要是因为在 MySQL 中加入了地址查询,会在连接建立的时候建行一次 DNS 的反查询,所以在这里会出现耗时久的情况。
所以在这里可以有两种解决方法:

第一种:在 MySQL 所在服务器的 hosts 上加入过程连入的服务器的IP <=> 域名的记录。

192.168.0.11   webserver

第二种:修改 MySQL 的配置,在 [mysqld] 段加入 skip-name-resolve

[mysqld]
...
skip-name-resolve

重启 MySQL 使之生效。

以上两种方法都可以解决变慢的问题,不过我建议还是用第一种方法。因为第二种方法的话就不能在 MySQL 的授权表中使用主机名了而只能用ip格式了。

Gnome 3.6 更换输入法为 fcitx

Archlinux 把 Gnome 更新到 3.6 了,在 Gnome 3.6 中 ibus 被作为依赖安装到了系统中。虽然集成性不错,但个人还是比较喜欢 fcitx 毕竟从接触 Linux 开始就一直使用  fcitx,所以把打算把输入法换成 fiitx 。结果发现在 Gnome 3.6 中换个输入法并没有那么容易。

最后看到在 fcitx 的 wiki 中有介绍:http://fcitx-im.org/index.php?title=Note_for_GNOME_Later_than_3.6

在 Archlinux 上我是这样做的:

  1. ~/.xprofile 中加入输入法配置:

    export XMODIFIERS="@im=fcitx"
    export GTK_IM_MODULE=fcitx
    export QT_IM_MODULE=fcitx
    
  2. 在 ArchLinux 上似乎并不能删除 ibus-daemon,因为它属于软件包 ibus。。。所以我们只要设置 fcitx 自启动就可以了。
    使用 gnome-session-properties 添加一个 fcitx 的启动程序。
  3. 最后禁用 gnome-settings-daemon 的键盘动作:

    $ gsettings set org.gnome.settings-daemon.plugins.keyboard active false 

ssh 单一用户登录限制

为了防止某一用户重复登陆,也为了防止滥用资源,我们可以用 PAM 来作限制以达到单点登陆的目的。

  1. 确保 /etc/pam.d/sshd 里添加了 “pam_limits.so”,一般情况下 Debian 系的发行版已经添加。
    session required pam_limits.so
  2. 在 “/etc/security/limits.conf” 里添加 “USERNAME – maxlogins 1″,意思是 UERNAME 这个用户的最大登录用户数为1,当然也可以用 * 来代表所有用户。
  3. 重启 ssh 服务 /etc/init.d/ssh restart,超过限制数的 SSH 登录就会提示 Too many logins for 'USERNAME'.

debian 下 crontab 的时区设置

debian 中设置的 crontab 不能按时执行,而是按了 UTC 时间来执行了这个脚本,而 VPS 中的 localtime 已经设置成了 PRC。运行了一下 tzselect 重新选取了时区,crontab 终于能按时执行了。。。

Google 了一圈,发现原来 debian 下面的 crontab 是不会根据 /etc/localtime 来的,而是要读取 /etc/timezone 中的时区设置。

tmux 的小定制

之前有接触 tmux,但一直没有深入学习,所以也对这个工具是云里雾里,前段时间也终于花了点时间看了这个工具,终于也可以用上了。。。

所谓 tmux, 是 BSD 实现的 screen 替代品,相对于 screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活、动态的进行各种布局和操作。除此之外,它还可以把不同用处的分屏和窗口布局用 session 进行分组。更棒的是 tmux 提供了丰富的配置项让我们来对它进行定制。还有它的 session 共享的功能,可以让两个人同时连到同个 server 的 tmux session,使两个人可以看到互相的操作。总之这又是一个神器。

配置参考了 这里

使用 logrotate 定期整理 Log 档案

有时候在跑一些 daemon 的时候,会遇到日志越来越大的情形。如何能做到像 apache 一样定期整理成像 xxx.1 xxx.2.gz 这样的文件呢?

这个时候就可以作到 logrotate 这个系统工作,它的配置文件在 /etc/logrotate.conf,设置方法也很简单 (参考自 Rotating Rails Log Files):

# Rotate Rails application logs
/path/to/your/current/log/*.log {
  daily
  missingok
  rotate 7
  compress
  delaycompress
  notifempty
  copytruncate
}

其中:

daily 表示每天整理,也可以改成 weekly 或 monthly
missingok 表示找不到 log 文件也无所谓
rotate 7 表示保留之前的 7 份文件
compress 表示压缩,默认用 gzip
delaycompress 表示延后到下一次 rotate 时压缩
notifempty 表示如果 log 是空的,就不 rotate
copytruncate 先复制 log 文件的内容后,再清空的作法,因為有些程序写在原来的 log 文件中,比如 rails。另一种方法是重新生成一个日志。

设置完成后,可以等到明天,或是运行 /usr/sbin/logrotate -f /etc/logrotate.conf 测试一下。

vsftpd 530 login incorrect

安装了vsftp,所有配置完成后用FTP登录,出现530 Login incorrect.错误,在网上找到错误的解决方法:
1、useradd -d /path -s /sbin/nologin username 填加用户的时候shell是/sbin/nologin
2、将上面的shell加入到/etc/shells中就可以了

安全删除 mysql-bin 二进制日志

今天网站突然连不上数据库,上了服务器后发现是 mysql 的二进制日志又把硬盘占满了。

像以前都是直接停 mysql 服务,然后删掉 mysql-bin 的日志。后来有同事说可以用 sql 命令来删除这些日志的。

1、显示日志文件:

mysql> show binary logs;

2、删除bin-log(删除mysql-bin.000020之前的所有二进制日志文件)。

mysql> purge binary logs to 'mysql-bin.000049';

用rsync+ssh进行备份

利用 rsync + ssh 可以很快速地对网站进行异地备份。步骤也很简单:

1、先用ssh-keygen生成一对keygen,可以免密码进行访问,可选。

2、确认本机与过程机都有安装 rsync,因为 ssh session 会自己执行 rsync –server 以便两端算签章。

3、使用如下命令进行备份

指令1 – 远端 备份回 本端:

rsync -avl --delete -e ssh server_hostname:/var/lib/mysql/ /backup/

指令2 – 本端 传送到 远端:

rsync -avl --delete -e ssh /var/lib/mysql server_hostname:/backup/

如果 ssh 端口非默认的 22,则可以

rsync -avl --delete -e 'ssh -o port=PROT' /var/lib/mysql server_hostname:/backup/

继续阅读用rsync+ssh进行备份