您的位置:首页 > 数据库 > MySQL

将MYSQL数据文件拷贝到使用LVM扩容的磁盘中

2015-12-30 18:10 766 查看
默认的云服务器(比如青云服务器) 只有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”是将磁盘格式化为主分区, 当然你可以使用扩展分区,我这边暂使用主分区,主分区最多3个。

每个参数意思可以查看参数输出的说明。



再次 使用 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 #重启系统
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: