一次生产环境mysql迁移操作(一)数据归档
< 返回列表时间: 2020-01-30来源:OSCHINA
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>>
一次生产环境mysql迁移操作(一)数据归档
一次生产环境mysql迁移操作(二)mysql空间释放(碎片整理)
背景
在项目过程中我们经常要对数据库进行迁移、归档、拆分等等操作,现在描述下几种方案 mysqldump 该命令可以指定导出数据库,该命令可能用时很久 cp 直接拷贝mysql数据文件,这里会影响业务需要下线mysql 使用innobackupex 工具进行备份,这个不影响业务,速度稍快 先打lvm快照,然后从快照中备份数据,节省时间
我们有需要将物理盘上的mysql迁移到ssd上,先说一下生产环境一直有数据产生,且数据量达到500G。 方案一:使用mysqldump,不管是导入导出都太耗时,没有一天拿不下 方案二:直接物理磁盘上拷贝也是非常耗时,拷贝过程中需要停服务,这就导致停服务时间太长。 方案三:这个方案本来是很有优势的,但是实际情况导出导入也需要锁表或锁库,也是需要停服务,本来我们就不需要增量拷贝,innobackupex优势体现在增量拷贝。 方案四:拷贝速度快 综合停服务时间以及操作难易度,最终选择了方案四。 下面描述下操作步骤
环境准备
1、创建物理卷
执行命令 pvcreate /dev/vdb
2、创建卷组 vgcreate vgssd /dev/vdb
3、创建mysql数据分区 lvcreate --size280G -n mysql vgssd
4、移除mysql原有数据,并挂载 mv /var/lib/mysql /var/lib/mysql_bak mount /dev/vgssd/mysql /var/lib/mysql
5、 拷贝线上数据到本地 cp -af remotepath /var/lib/mysql chown mysql:mysql /var/lib/mysql
执行完上面步骤后,再开始进行归档操作
归档步骤
1、停止mysql以及其他服务 systemctl stop httpd systemctl stop supervisord systemctl stop mariadb umount /var/lib/mysql
执行umount时需要保证各终端退出该目录
2、查看磁盘情况

3、创建快照卷 lvcreate -s --size 180G -n mysql_backup /dev/vgssd/mysql
4、重新绑定mysql,重启服务 mount /dev/vgssd/mysql /var/lib/mysql systemctl start mariadb systemctl start httpd systemctl start supervisord
5、挂载快照卷 mkdir -p /mnt/mysql_temp mount -o ro,nouuid /dev/vgssd/mysql_backup /mnt/mysql_temp ls /mnt/mysql_temp
6、拷贝数据,将数据拷贝到本地 mkdir -p /mnt/backup/mysql cp -a /mnt/mysql_temp /mnt/backup/mysql
7、取消挂载,删除快照卷 umount /mnt/mysql_temp lvremove /dev/vgssd/mysql_backup
定时归档
暂定为30天,这样才能备份所有数据。 因为需要硬件准备,所以这里只能手动操作
恢复数据
如果磁盘数据丢失需要恢复数据,则执行下面操作 1、关停mysql服务 systemctl stop mariadb
2、修改/etc/my.conf datadir= /mnt/backup/mysql
3、重启服务 systemctl start mariadb
热门排行