摘要:本文记录了在CentOS 6.3上,把MySQL从5.5.28升级到5.6.19的过程。

1. 概述

在我做的一个项目中,最近我对生产服务器上的一系列系统软件进行了升级,包括Git、Nginx、MySQL和PHP。这篇文章讲的是升级MySQL的过程,其他软件的升级,可见下面列出的文章。

在我加入这个项目之前,服务器上的MySQL已经安装设置好了,我只是正常使用而已。现在过去1年了,应该适当升级服务器上的软件了。升级这种事情是应当经常做的,倒不是为了追最新版本,而是当正式版本发放出来的时候,应该及时更新, 以便获得最新的更正、补丁,避免服务器上的漏洞,减少安全隐患。

升级是在今年6月11-12日进行的,到今天才有空做个记录,便于日后参考。

动手之前,查找了很多资料,因为MySQL要比之前升级的Git和Nginx要复杂多了。我在参考资料中列出了我所能找到作为依据的文档,可供参考。

2. 计划

我们使用的服务器是阿里云的,服务器的操作系统是CentOS 6.3。登录管理界面,发现共有两块物理硬盘,一块系统盘,一块数据盘,而我们只使用了系统盘,数据盘一直空着没用。所以,计划就变成:

  1. 加载数据硬盘
  2. 升级MySQL的同时,迁移MySQL数据到数据硬盘上。

3. 加载数据硬盘

下面的操作需要以超级管理员root的身份登录服务器进行操作。

3.1 查看硬盘

首先,查看硬盘使用情况:

# fdisk -l

Disk /dev/xvda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

    Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *           1        2550    20480000   83  Linux
/dev/xvda2            2550        2611      490496   82  Linux swap / Solaris

Disk /dev/xvdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda1             20G  9.4G   11G  48% /
tmpfs                 498M     0  498M   0% /dev/shm

可以看到,逻辑盘/dev/xvda1是位于根目录(/),/dev/xvda2是系统缓存(swap)。第二块物理硬盘/dev/xvdb的大小是21.5 GB,没有加载和使用,我们可以把它加载,并把MySQL的数据迁移到第二块物理硬盘上,把对系统盘和数据库的硬盘访问分流,希望这样一定程度上可以提高访问MySQL数据库的性能。

3.2 格式化数据硬盘

格式化第二块物理硬盘:

# mke2fs -j /dev/xvdb
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

格式化顺利完成。

3.3 加载数据硬盘

下面,加载第二块物理硬盘为/data目录:

# mount /dev/xvdb /data

这个命令没有反馈,当时我有点儿吃惊和失落。因为这许多命令我也都是第一次从网上查到,第一次使用,对于它们的输出和结果,都有一种第一次坐过山车般的期待、兴奋、好奇和不确定,每一次的输出对于我都是新的,你不知道翻过面前这个坡之后会出现什么!

再用下面的命令查看新的逻辑盘:

# df -kh
Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda1             20G  9.3G   11G  48% /
tmpfs                 498M     0  498M   0% /dev/shm
/dev/xvdb              20G  173M   19G   1% /data

可以看到/dev/xvdb是第二块物理硬盘!激动,成功了!

用下面的命令查看加载(mount)的类型:

# mount
/dev/xvda1 on / type xfs (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/xvdb on /data type ext3 (rw)

到这里,第二块物理硬盘加载成功,下面该yum出场了。

4. 升级MySQL的计划

不好意思,yum同学,编剧说你还要等下一幕。

升级MySQL时,又做了两个计划:

  • 当然,首先要备份所有的数据库数据
  • 计划A: 使用参考资料[6]的方法,添加安装库,用yum update升级
  • 计划B: 用yum卸载MySQL 5.5,再安装MySQL 5.6

5. 计划A: yum update

下面大部分命令都需要在超级管理员root的权限下运行。

5.1 备份所有的数据库

用mysqldump来备份所有的数据库数据:

# mysqldump -u <db管理员用户名> -p --all-databases > 2014-06-12_all-db.sql

会提示输入密码,然后2014-06-11_all-db.sql就是备份数据,如果不想放在当前目录下,可以在上面的命令行上指定路径。

当然,也建议你单独备份每个用户数据库:

# mysqldump -u <db管理员用户名> -p mydb > 2014-06-12_mydb.sql

妥善保存这些非常重要的数据库备份文件。

5.2 查看MySQL的版本

用下面的命令查看MySQL的版本:

# mysql --version
mysql  Version 14.14 Distrib 5.5.28, for Linux (x86_64) using reeadline 5.1

可见,当前的MySQL的版本是5.5.28。

5.3 添加MySQL的yum安装库

这是参照参考资料[7]来做的,后来发现[6]的方法更好:

# wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
# rpm -ivh mysql-community-release-el6-5.noarch.rpm
# yum list | grep mysql

这样很多更新的MySQL安装包就都有了。

如有必要,运行下面的命令确保yum安装库是最新的:

# yum update mysql-community-release

5.4 用yum查看MySQL安装相关信息

用下面的命令查看安装了什么:

# yum list installed | grep ^mysql
mysql-community-release.noarch

其中,^mysql是指以mysql开头的安装包。

用下面的命令查看安装了的和可用的安装包:

# yum info mysql-server
Installed Packages
Name        : MySQL-Server
Arch        : x86_64
Version     : 5.5.28
Release     : 1.linux2.6
Repo        : installed
Available Packages
Name        : mysql-server
Arch        : x86_64
Version     : 5.1.73
Release     : 3.el6_5
Repo        : updates

这里不知道为啥可用的安装包没有显示MySQL 5.6的。

检查可用的安装包:

# yum check-update mysql-server
Obsoleting Packages
mysql-community-client.x86_64      5.6.19-2.el6           mysql56-community
    MySQL-client.x86_64            5.5.28-1.linux2.6      installed
mysql-community-devel.x86_64       5.6.19-2.el6           mysql56-community
    MySQL-devel.x86_64             5.5.28-1.linux2.6      installed
mysql-community-server.x86_64      5.6.19-2.el6           mysql56-community
    MySQL-server.x86_64            5.5.28-1.linux2.6      installed

可见,MySQL 5.6的安装包都算community版本了。

5.5 升级MySQL及其组件

运行下面的命令:

# yum update mysql-server
Dependencies Resolved

================================================================================
 Package                   Arch      Version         Repository            Size
================================================================================
Installing:
 mysql-community-client    x86_64    5.6.19-2.el6    mysql56-community     18 M
     replacing  MySQL-client.x86_64 5.5.28-1.linux2.6
 mysql-community-server    x86_64    5.6.19-2.el6    mysql56-community     52 M
     replacing  MySQL-server.x86_64 5.5.28-1.linux2.6
Installing for dependencies:
 mysql-community-common    x86_64    5.6.19-2.el6    mysql56-community    298 k
 mysql-community-libs      x86_64    5.6.19-2.el6    mysql56-community    1.9 M

Transaction Summary
================================================================================
Install       4 Package(s)

后面的输出省略了。可见有4个安装包(共70多MB)要下载、安装。结果,下载用了80分钟。

但安装遇到问题了:

Running rpm_check_debug
Running Transaction Test


Transaction Check Error:
  file /usr/bin/mysql_config from install of mysql-community-client-5.6.19-2.el6
.x86_64 conflicts with file from package MySQL-devel-5.5.28-1.linux2.6.x86)64

Error Summary
-------------

可以看到出错了,搜索了一阵儿,也没搞明白。随即停止A计划(和成龙的电影没关系),改用B计划。

6. 计划B: 用yum卸载再安装

可以预料,这个计划要多折腾一些。仍然需要在超级管理员root的权限下运行下面的命令。

6.1 停止web服务器

这时为了避免用户访问网站时,看到数据库连接失败这样的错误信息。到这时我才想起这一点来,还是对用户关怀不够,应该在有可能宕掉网站的操作之前就做的。

因为使用的是Nginx,所以运行下面的命令:

# service nginx stop
Stopping nginx: [ OK ]

6.2 卸载MySQL 5.5.28

一共有3个包要卸载。

先卸载mysql-server包:

# yum remove mysql mysql-server
Dependencies Resolved

================================================================================
 Package            Arch         Version                  Repository       Size
================================================================================
Removing:
 MySQL-server       x86_64       5.5.28-1.linux2.6        installed       153 M

Transaction Summary
================================================================================
Remove        1 Package(s)

Installed size: 153 M
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
  Erasing    : MySQL-server-5.5.28-1.linux2.6.x86_64                        1/1
  Verifying  : MySQL-server-5.5.28-1.linux2.6.x86_64                        1/1

Removed:
  MySQL-server.x86_64 0:5.5.28-1.linux2.6

Complete!

再卸载mysql-client:

# yum remove mysql-client
Dependencies Resolved

================================================================================
 Package            Arch         Version                  Repository       Size
================================================================================
Removing:
 MySQL-client       x86_64       5.5.28-1.linux2.6        installed        57 M

Transaction Summary
================================================================================
Remove        1 Package(s)

Installed size: 57 M
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing    : MySQL-client-5.5.28-1.linux2.6.x86_64                        1/1
  Verifying  : MySQL-client-5.5.28-1.linux2.6.x86_64                        1/1

Removed:
  MySQL-client.x86_64 0:5.5.28-1.linux2.6

Complete!
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-25
  • 2021-07-19
  • 2021-10-20
  • 2022-12-23
  • 2021-11-08
猜你喜欢
  • 2021-10-06
  • 2022-12-23
  • 2022-12-23
  • 2021-09-09
  • 2022-12-23
  • 2022-01-17
  • 2021-06-02
相关资源
相似解决方案