默认的云服务器(比如青云服务器) 只有20G的存储空间,随着时间推移MYSQL数据库的空间不够用了(尤其是开启了bin-log日志功能后),这时候需要增加一个磁盘,建议采用Linux LVM硬盘管理及LVM扩容,扩容后将mysql数据文件迁移到新的逻辑卷中。
据说阿里云服务器扩容比较容易,直接申请将默认的20G空间扩容即可,估计是一开始初始化的20G空间也是采用类似于LVM技术管理的。
LVM技术主要是可以将多个物理磁盘挂载到同一个目录中使用,
关于LVM详细的技术介绍建议访问他人博客:
http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html
http://www.cnblogs.com/mchina/p/linux-centos-logical-volume-manager-lvm.html
如果你查看上面博客后,应该会很快掌握LVM命令的使用,我这边自己整理下我的操作过程。
1. 判断LVM依赖的rpm包是否已经安装
查看 lvm包是否安装,使用命令:rpm -qa lvm*
如果没有安装 yum install lvm* 进行安装,如果你是redhat 版本的linux 建议修改yum源指定到光盘中。
2. 增加一块物理磁盘,采用fdisk进行分区格式化
新增一块物理磁盘后,暂未分区。使用命令fdisk -l查看
从上图中可以看到 /dev/sdb 是新增的一块4G磁盘,暂未格式化
3. 格式化新增的磁盘,使用命令 fdisk /dev/sdb进行格式化,格式化成lvm需要的文件格式。
输入的命令参数 顺序是 n , p , t , 8e , w
对于命令参数“p”是将磁盘格式化为主分区, 每一块磁盘至少一个主分区,最多4个主分区,一般我们都全盘设置成一个主分区存储数据。
每个参数意思可以查看参数输出的说明。
再次 使用 fdisk -l 查看目前linux系统的分区情况
通过上图最后两行内容看出 新增的磁盘格式化成 lvm需要的文件格式。
4. 使用LVM技术进行系统扩容
关于LVM我这里贴出两张他人博客里示意图,增加理解,有助于记忆。
上图是LVM的结构示意图,具体的名词含义如下:
PV: 物理的磁盘分区
VG: LVM中的物理的磁盘分区,PV必须加入VG,可以将VG理解为一个仓库。
LV: 从VG中划分的逻辑分区
这个图对应的物理存储结构如下:
5. 使用命令 pvdisplay 显示目前是否创建了一下 pv(物理的磁盘分区)
使用命令 pvcreate 创建 pv
同理创建 vg, lv 具体查看下图:
上图中主要的命令如下:
pvcreate /dev/sdb1 创建pv
vgcreate VolGroup00 /dev/sdb1 如果已经存在VolGroup00,则会加入已经存在的vg中
lvcreate -L 3.5G -n lvData01 VolGroup00 创建lv
说明:lvcreate 时候,不要使用全部的空间,比如4G 只指定3.5或3.8G,否则会报错误,这个可能是lvm需要部分空间存储相关的配置信息。
6. 格式化 lv ,挂载逻辑分区
最后挂载新创建出的lv,/mysqlData 是新创建的目录。
mount dev/mapper/VolGroup00-lvData01 /mysqlData
7. 为了开机自动挂载,将挂载信息配置到 /etc/fstab 文件中。
* 注意:在云服务器中如果重启服务器后可能盘符会变化,这样导致开机硬盘检查异常开机不了!
很多云服务提供商官方文档建议使用 UUID方式开机自动加载硬盘。
(1) 采用 blkid /dev/mapper/VolGroup00-lvData01 命令得到磁盘的uuid,比如在命令行中得到如下信息:
/dev/mapper/VolGroup00-lvData01: UUID="185dc58b-3f12-4e90-952e-7acfa3e0b6fb" TYPE="ext4"
(2) 然后在 /etc/fstab 中删除原来使用直接指定 /dev/....的方式加载硬盘的一行内容代码,重新加入下面一行:
UUID=82603db7-1116-476e-984e-d98466c6de32 /boot ext4 defaults 1 2
*说明:fstab中最后5,6项数字的含义:
(第五项)是提供DUMP功能,在系统DUMP时是否需要BACKUP的标志位,其内定值是0。
(第六项)是设定此filesystem是否要在开机时做check的动作,除了root的filesystem其必要
的check为1之外,其它皆可视需要设定,内定值是0。
8. 使用 df -TH 查看分区情况
9. 迁移 MYSQL 数据库的相关数据文件
查看你的系统上mysql数据文件存放路径,比如:/var/lib/mysql/下, 要拷贝到/mysqlData下:
先关闭MYSQL数据库和相应的web应用,例如tomcate等程序。
cd /var/lib/
cp -a mysql /mysqlData
chown -Rmysql:mysql /mysqlData/
chmod 775/mysqlData/ # 这步根据自己的情况授权
chmod 775/mysqlData/mysql # 这步根据自己的情况授权
10. 找到my.cnf 的文件位置,一般在/etc/my.cnf,修改MYSQL的配置文件my.cnf中datadir 和socketdir 参数
需要注意的是,MYSQL加载my.cnf 是按照一定顺序的,使用mysql --help |grep my.cnf 查看顺序:
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
仔细查找这几个位置如果存在就一并修改吧
这里需要说明下 关于socket的路径问题,如果一开始没有修改路径之前,socket的文件单独存放在另外的目录里, 比如在: /var/run/mysqld/mysqld.sock,与数据文件存放的不是同一个目录,则my.cnf无需修改socket路径!
也不用像其他博客里说的要增加文件链接等。
11. 另外还需修改mysql的启动文件
我的启动文件存放在 /etc/init.d/mysql ,编辑改文件,主要将里面的数据文件存放目录修改下。
vi /etc/init.d/mysql 修改里面的 datadir 变量为目前的数据文件目录,
不同的mysql版本可能里面内容布局不一样,但修改的变量是一样。
12. 重新启动MYSQL数据库,查看数据库中数据是否正常。
有可能启动不了的情况发生,主要查看错误日志,看看是否系统目录MYSQL没有使用权限,
比如无法创建mysql.socket文件。数据文件目录归属用户和用户组是否是mysql
一般启动不了的情况大多数是系统权限问题,注意查看错误日志输出。
有一些MYSQL启动不了的情况可能需要在CentOS Linux下面永久关闭SELinux
(1) vi /etc/selinux/config
(2) #SELINUX=enforcing #注释掉
(3) #SELINUXTYPE=targeted #注释掉
(4) SELINUX=disabled #增加
(5) :wq #保存,关闭。
(6) shutdown -r now #重启系统