【本文仅仅记录升级过程,不讨论两个版本的优劣,而且本网目前的数据库相对简单,没有存储过程什么的,所以不能保证同样方法试用于所有情况,总之升级有风险,操作需谨慎!】
因为Ubuntu的apt库里MySQL最新版本依然是5.1,所以升级MySQL5.5 只有自行下载,并且由于两个版本间改动较大,所以务必先阅读官网的升级事项 upgrading from from MySQL 5.1 to 5.5 ,确保自己的数据库以及配置适用新版。
本文参考了一篇英文指南 A step by step guide to upgrading to MySQL 5.5 但是做了一些顺序和内容上的调整,特别是官网和这篇英文指南都是在升级前mysqldump来备份文件,升级后再将sql导入的方式,但是这个过程可能非常耗时(本网的数据库可能需要花费十几个小时才能完成重新导入),我直接在原数据库文件目录上升级,基本是眨眼的功夫,当然要再次强调,这个未必适用于所有人。
具体步骤如下:
1.停止现版本MySQL,并备份
mkdir mysql_5.1_backup
cd mysql_5.1_backup
sudo /etc/init.d/mysql stop
接下来所有备份操作都在mysql_5.1_backup 执行
1.1 用mysqldump 备份数据库,可以将mysql内建数据库和产品数据库分开备份
mysqldump -u user_name -p –databases mysql > mysql_db.sql
mysqldump -u user_name -p –databases db_name > db_name.sql
1.2 备份MySQL 数据目录,更多备份,更多安全
sudo cp -R /var/lib/mysql/ mysql-5.1-data
1.3 备份MySQL 配置文件
sudo cp -r /etc/mysql mysql_5.1_conf
2安装异步io库
sudo apt-get install libaio-dev
3. 从官网上下载最新的MySQL,(我们用的是64位,截至5.5.16,注意要下载 .tar.gz那个版本, tar版本很坑爹,解压后都是rpm文件)
wget -c “http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.16-linux2.6-x86_64.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/” -O mysql-5.5.16-linux2.6-x86_64.tar.gz
4. 将下载文件拷贝到/usr/local/并解压,建立软链接(方便以后下载新版本后切换)
sudo cp mysql-5.5.16-linux2.6-x86_64.tar.gz /usr/local
sudo tar xzvf mysql-5.5.16-linux2.6-x86_64.tar.gz
sudo ln -s mysql-5.5.16-linux2.6-x86_64 mysql
5. 干掉旧版本的MySQL
sudo apt-get remove mysql-server
sudo apt-get autoremove
sudo apt-get remove mysql-client
sudo apt-get autoremove
6. 编辑环境文件/etc/environment,使之内容如下:
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/mysql/bin”
7. 保证MySQL的socket 文件所在目录存在并可读写
sudo mkdir /var/run/mysqld/ (如果已经存在就忽略错误)
sudo chown -R mysql:mysql /var/run/mysqld/
8. 拷贝新的配置文件
cd /usr/local/mysql/support-files/
sudo cp my-large.cnf /etc/mysql/my.cnf
9. 编辑配置文件/etc/mysql/my.cnf,添加如下内容
[mysqld]
user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr/local/mysql
datadir = /var/lib/mysql #这里和英文指南不同,指向原MySQL数据库文件目录
tmpdir = /tmp
log_error = /var/log/mysql/error.log
注意,要确保[client]和[mysqld]下socket和port字段内容一致
10. 拷贝MySQL启动文件
cd /usr/local/mysql/support-files/
sudo cp mysql.server /etc/init.d/mysql
sudo chmod +x /etc/init.d/mysql
sudo update-rc.d mysql defaults
11. 干掉旧版MySQL 余虐 (和英文版教程不同,因为保留了原配置文件目录和原数据库文件目录)
sudo rm -R /usr/lib/mysql
12. 跳过grants table 运行MySQL
sudo su #切换到root,否则下面的命令中无法使用mysql帐号
/usr/local/mysql/bin/mysqld –skip-grant-tables –user=mysql
13. 开一个新的终端
sudo /usr/local/mysql/bin/mysql_upgrade
如果所有的log都ok,那就基本Ok了
14. 终止之前的mysql进程,ctrl-c停不下来的话,就直接kill 进程号
15. 正常启动MySQL
sudo /etc/init.d/mysql start