Mysql升级到5.1后库升级失败的问题

一台 mysql 5.0 服务器,升级到 5.1 后,发现原来有个 database 名字变成了 #mysql50#t-2008-zbb ,刚开始没在意想直接 RENAME DATABASE ,结果这个语法由于过渡危险已经取消了,改用ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME,结果执行错误:

mysql> ALTER DATABASE `#mysql50#db_name` UPGRADE DATA DIRECTORY NAME;
ERROR 1450 (HY000): Changing schema from '#mysql50#db_name' to 'db_name' is not allowed.

原来这里面还有个 BUG ,刚刚修正过来,发行版中肯定还没有呢。幸好,从中得到了提示,因为 View 的存在导致库无法升级的,删掉所有视图后 UPGRADE 成功:

mysql> ALTER DATABASE `#mysql50#db_name` UPGRADE DATA DIRECTORY NAME;
Query OK, 0 rows affected (0.08 sec)

这台服务器还作了双向同步,我还得手工重置同步状态,又是麻烦一连串儿的事情,幸亏这次操作的是测试服务器,下次升级正式服务器之前,记得先把所有 View 删掉,升级完成后再重新创建。

另外 RENAME DATABASE 实在是危险,我执行过程中出错终止了,结果一部分表在新库里、一部分表在旧库中,不小心把未转完的目标库删掉了(不然后面的正常 ALTER DATABASE 无法继续),结果就丢失了这些表的数据。

Linux下使用华为h3c Aolynk WuB320G无线网卡

我搜到的国内唯一的两篇参考文章(之所以说是唯一,是因为内容基本一致,大概是同一个人写的):

不过这位老大写得比较模糊,具体操作的时候还是费了不少周折。加上本本上的迅驰无线捣乱,由于本本比较老了,自带无线网卡是Intel PRO/Wireless 2100,只支持802.11b,好像还不支持WPA(WPA是2004年提出的,比本本的岁数小),所以在它身上也浪费了不少时间。

华为3com的Aolynk WUB320g usb无线网卡芯片组应该是Ralink(它的台湾分站)的RT73,虽然Ubuntu Gutsy自带了驱动,并且识别出了网卡,但注意,这个自带的驱动不好用,或者说没法用,仍然需要自己到http://rt2x00.serialmonkey.com/下载开源的驱动,编译使用。(编译前后,用iwpriv wlan0看列出的可用参数就知道这两个驱动的区别了)

编译需要内核相应的头文件,比如linux-headers-2.6.22-14-generic,解压后按照README文件的内容:

$ tar xzf rt73-cvs-daily.tar.gz
$ cd rt73-cvs-YYYYMMDDHH/Moduls
$ make
$ make install

就算编译安装完成了,手工挂载:modprobe rt73 ifname=wlan0,在/etc/modules中添加一句rt73,每次启动就能够自动挂载了。还可以在/etc/modprobe.d/blacklist中增加一句:blacklist rt73usb,禁用系统自带的驱动。

如果要和采用WPA-PSK认证方式的AP连接,还要修改一下/etc/network/interfaces文件,比如:

auto wlan0
iface wlan0 inet static
    address 192.168.0.13
    netmask 255.255.255.0
    gateway 192.168.0.1

    pre-up ifconfig wlan0 up
    pre-up ifconfig wlan0 down
    pre-up ifconfig wlan0 up
    pre-up iwconfig wlan0 essid "my_essid"
    pre-up iwconfig wlan0 mode Managed
    pre-up iwpriv wlan0 set AuthMode=WPAPSK
    pre-up iwpriv wlan0 set EncrypType=TKIP
    pre-up iwpriv wlan0 set WPAPSK="my_wpa_passphrase"
    pre-up ifconfig wlan0 up

这个设置是从WifiDocs/Driver/RalinkRT73抓过来的,大体意思知道,但为什么写成这个格式不是非常明白,不过这样的确就可以使用了 :-)。

配置无线连接还可以使用其它工具,比如wifi-radar,或者专门为Ralink开源驱动设计的RutilT也不错。

试着用两块Wub320g配置Ad-Hoc对等网,但失败了,配置如下(两端的配置是一样的):

auto wlan0
iface wlan0 inet static
    address 192.168.0.13
    netmask 255.255.255.0
    gateway 192.168.0.1

    pre-up ifconfig wlan0 up
    pre-up ifconfig wlan0 down
    pre-up ifconfig wlan0 up
    pre-up iwconfig wlan0 mode Ad-Hoc
    pre-up iwconfig wlan0 channel 2
    pre-up iwconfig wlan0 essid "fwolf_home"
    pre-up iwconfig wlan0 key 1234567890
    #pre-up iwpriv wlan0 set NetworkType=Adhoc
    #pre-up iwpriv wlan0 set AuthMode=OPEN
    #pre-up iwpriv wlan0 set EncrypType=NONE
    #pre-up iwpriv wlan0 set SSID="fwolf_home"
    # Break 802.11i's 11m/s limit
    #pre-up iwpriv wlan0 set AdhocOfdm=1
    pre-up ifconfig wlan0 up

注释中是另外一种方式,两种方式下网卡都能够连通,从iwconfig或者其它工具中都能看到已连接的状态,ifconfig也能看到发送和接收的流量,但两块网卡之间就是ping不通(属于同一网段)。把两端的机器都重启,偶尔能从还连接着局域网的机器上ping通另外一台只连接了无线网的机器,而反过来ping不通,提示:

Destination Host Unreachable

有时候还会提示:

ping: sendmsg: No buffer space available

对等网计划只好暂时搁浅,先找个AP用着。

最后总结,在为linux操作系统选购硬件时,一定要先上网看看相应的功能好不好配置,优先选择应用比较广泛、驱动比较开放、配置容易的产品。

参考

Update @ 2008-07-17

升级到Ubuntu 8.04 hardy之后,无线网卡又不干活了,虽然有人说hardy的默认驱动工作得很好,但在我这里不行,能识别出来,但up的时候出现错误:

SIOCIFFLAGS: invalid argument

查了一下确认是驱动有问题(与2.6.24内核),不过早有好心人提供了补丁,所以,只需按照如下步骤,就能让无线网卡复活了:

安装相应的内核header包:

sudo aptitude install linux-headers-`uname -r`

这里下载最新的rt73驱动,解压,编译,安装。如果编译时出现模块文件太大的提示:

!!! WARNING: Module file much too big (>1MB)
!!! Check your kernel settings or use 'strip'

可以strip一下再安装:

sudo strip -S rt73.ko
sudo make install

这样处理过的rt73.ko之后250k左右。

现在就可以卸载旧模块了,当然还要把他们都放到禁用模块列表(/etc/modprobe.d/blacklist)中,然后加载新的模块:

sudo ifconfig wlan0 down
sudo modprobe -r rt73usb
sudo modprobe -r rt2570
sudo modprobe -r rt2500usb
sudo modprobe -r rt2x00lib
sudo modprobe rt73

然后就。。。可以用啦:

ifconfig -a
sudo ifconfig wlan0 up

wpa认证还是使用上面原先介绍的方法即可。

另外,我弄完之后,没有wlan0,却有wlan2,也能正常工作,怎么把网卡的名字改过来捏?参考这里,编辑文件/etc/udev/rules.d/70-persistent-net.rules

# USB device 0x1472:0x0009 (rt73usb)
#SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:0f:e2:39:b6:f2", ATTRS{type}=="1", NAME="wlan0"

# USB device 0x1472:0x0009 (rt73usb)
#SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:0f:e2:39:c0:ff", ATTRS{type}=="1", NAME="wlan1"

# USB device 0x1472:0x0009 (rt73usb)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0f:e2:39:b6:f9", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"

看见没,所有用过的网卡这里都记着呢,把原来没有用了的wlan0, wlan1都注释掉,最后一句改为wlan0,下次再重新插无线网卡的时候,就会被认为是wlan0了。

参考