Mysql5.1.50升级到5.1.63
从http://sebug.net查看到mysql的最新漏洞CVE-2012-2749,这个漏洞允许已验证用户通过错误计算和排序索引造成拒绝服务,mysqld崩溃。Mysql 5.1.63之前的5.1.x版本和5.5.24之前的5.5.x版本都存在这个漏洞。目前公司生产环境用的是5.1.50,刚好也存在此漏洞,因此需要对mysql进行升级来提高mysql服务器的安全。具体的漏洞见链接:http://sebug.net/vuldb/ssvid-60344
下面就是此次mysql升级的详细步骤,希望存在此漏洞的朋友能引起重视,早日将mysql升级到没有此漏洞的版本。
1. 确认Mysql的版本
有的朋友可能不知道自己的数据库用的什么版本,那么可以使用如下命令来查看:
SELECT VERSION();
SHOW VARIABLES LIKE 'version';
2. 备份数据库中的数据
使用mysqldump将数据库中的数据进行备份,因为我的只有innodb,因此采用如下备份命令:
mysqldump -uroot -p --single-transaction --events --triggers --routines --flush-logs --master-data=2 --all-databases > db.sql
3. 下载Mysql 5.1.63版本
wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz
4. 安装Mysql 5.1.63版本
安装的时候记得查看/usr/local/mysql/bin/mysqlbug文件中以前的编译参数(注意根据编译的目录不同更改对应的目录),使用如下命令:
cat /usr/local/mysql/bin/mysqlbug | grep configure
编译安装新版本的数据库的时候和以前使用的参数保持一致。
tar xzvf mysql-5.1.63.tar.gz
cd mysql-5.1.63
./configure '--prefix=/usr/local/mysql' '--localstatedir=/data/dbdata/' '--with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock' '--with-charset=utf8' '--with-extra-charsets=complex' '--with-pthread' '--enable-thread-safe-client' '--with-ssl' '--with-client-ldflags=-all-static' '--with-mysqld-ldflags=-all-static' '--with-plugins=partition,federated,innobase,csv,blackhole,myisam,innodb_plugin,heap,archive' '--enable-shared' '--enable-assembler'
make
make install
5. 重启mysql服务
因为是小版本升级,因此不需要升级权限表,直接重启mysql就可以了。
/etc/rc.d/init.d/mysqld restart
升级完成以后可以使用前面提到的查看版本的命令来查看mysql的版本,看看是否显示的是新版本,至此mysql小版本的升级就完成了,整个过程停机时间根据mysql重启的时间而定。
附上直接升级的脚本,如果要采用此脚本进行升级请确认你的编译参数是否和脚本中的一致(尤其是数据库的目录以及数据目录),执行完脚本以后重启你的mysql即可。脚本内容如下:
点击(此处)折叠或打开
- #!/bin/bash
- echo "-----------------------start install mysql----------------------"
- yum -y install gcc gcc-c++ ncurses ncurses-devel openssl openssl-devel libtool*
- mkdir -p /data/dbdata
- if [ `grep "mysql" /etc/passwd | wc -l` -eq 0 ];then
- echo "adding user mysql"
- /usr/sbin/groupadd mysql
- /usr/sbin/useradd -g mysql mysql
- else
- echo "mysql user is exist"
- fi
- wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz
- echo "tar xzvf mysql-5.1.63.tar.gz"
- tar xzvf mysql-5.1.63.tar.gz
- cd mysql-5.1.63
- echo "configuring mysql,please wait-----------------"
- ./configure '--prefix=/usr/local/mysql' '--localstatedir=/data/dbdata/' '--with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock' '--with-charset=utf8' '--with-extra-charsets=complex' '--with-pthread' '--enable-thread-safe-client' '--with-ssl' '--with-client-ldflags=-all-static' '--with-mysqld-ldflags=-all-static' '--with-plugins=partition,federated,innobase,csv,blackhole,myisam,innodb_plugin,heap,archive' '--enable-shared' '--enable-assembler'
- if [ $? -ne 0 ];then
- echo "configure filed ,please check it out!"
- exit 1
- fi
- echo "make mysql, please wait for 20 minutes"
- make
- if [ $? -ne 0 ];then
- echo "make filed ,please check it out!"
- exit 1
- fi
- make install
- chown -R mysql:mysql /usr/local/mysql
- chown -R mysql.mysql /data/dbdata/
- echo "mysql update successful,please restart your mysql"