MySQL数据迁移实战

一、背景:

公司因为机器资源紧张,需要给测试部分腾出几台机器做测试用,需要把现有机器上的应用全部迁移到别的机器上。

经过讨论,采用Xtrabackup工具对对InnoDB做数据备份。

二、准备工作

1、安装Xtrabackup工具

1)安装依赖包

yum install libaio libaio-devel perl-Time-HiRes curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel perl-ExtUtils-MakeMaker perl-DBD-MySQL.*

安装 perl-DBD-MySQL 时遇到了安装错误的提示:

#rpm -ivh perl-DBD-mysql-4.006-1.el5.rf.i386.rpm

warning: perl-DBD-mysql-4.006-1.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6

error: Failed dependencies:

libmysqlclient.so.16 is needed by perl-DBD-mysql-4.006-1.el5.rf.i386

libmysqlclient.so.16(libmysqlclient_15) is needed by perl-DBD-mysql-4.006-1.el5.rf.i386

原因分析:因为没有安装 MySQL-shared ,mysql没有lib库,导致找不到libmysqlclient.so.16

解决办法:下载安装 MySQL-shared-compat-5.5.43-1.el7.x86_64.rpm 注意MySQL-shared 的版本不能太过,5.6以上就是libmysqlclient.so.18

2)下载安装Xtrabackup

可以下载rpm包也可以下载源码包,如果没有特殊要求建议rpm包安装

下面介绍源码包安装方法:

1)解压

cd /usr/local

tar zxvf percona-xtrabackup-2.1.5-680-Linux-x86_64.tar.gz

2)拷贝innobackupex、xtrabackup、xtrabackup_51 工具到/usr/bin

cp /usr/local/percona-xtrabackup-2.1.5-680-Linux-x86_64/bin/innobackupex /usr/bin/innobackupex

cp /usr/local/percona-xtrabackup-2.1.5-680-Linux-x86_64/bin/xtrabackup  /usr/bin/xtrabackup

cp /usr/local/percona-xtrabackup-2.1.5-680-Linux-x86_64/bin/xtrabackup_55  /usr/bin/xtrabackup_55

如果不拷贝到/usr/bin 目录下可以做个软连接。当在命令行能够tab出innobackupex 命令就表示安装成功

三、数据迁移

1、备份数据库,因为数据库比较大,可以先对数据库做备份然后再做其他操作

usr/bin/innobackupex  --user=user --password=pass --defaults-file=/etc/my.cnf --socket=/app/mydata/mysql.sock  --stream=tar /app/bak/ 2>/app/bak/mydata.log | gzip 1>/app/bak/mydata.tar.gz

备份压缩数据

因为怕在两台机器见传输出现网络问题所以,没有选择压缩传输到远程服务器,如果网络稳定或者磁盘空间不够可以选择压缩传输到远程服务器操作

/usr/bin/innobackupex --user=root --password=pass --defaults-file=/etc/my.cnf --no-timestamp --stream=tar /data/mysql_backup | gzip | ssh [email protected]" cat - > /data/mysql_backup.tgz"

2、实现数据单机多实例:

因为要迁移到的主机上已经有一个mysql数据库在跑了,所以要在这台主机上实现单机多实例。

(单机多实例的操作可以看我的另一篇微博:http://yylinux.blog.51cto.com/8831641/1677678)

1)创建一个新的目录存放数据

#mkdir /app/mydata3308

2)配置my.cnf文件,配置两个my.cnf 不同的mysql实例指向不同的my.cnf

#cp -p /etc/my.cnf /etc/my3308.cnf

#vim /etc/my3308.cnf

将port 修改为3308 和 相关path修改为对应的/app/mydata3308 的 path

3、将压缩的文件远程拷贝到目标主机

#scp [email protected]:/app/bak/mydata.tar.gz /apiapp/

4、数据恢复

1) 先停止数据库:mysqladmin -uroot -p -S /app/mydata/mysql.sock shotdown

2) 解压 tar -izxvf mydata.tar.gz -C /apiapp/db/   (没有db ,需要mkdir /data/back_data/db/,注意解压时一定要加上参数-i,不然没法解压)

3) 恢复 /usr/bin/innobackupex  --defaults-file=/apiapp/db/backup-my.cnf --apply-log /apiapp/db/  (注意要指出backup-my.cnf的位置,这一步是把已经解压的数据库备份文件,和备份过程产生的redo做一下整合,保持数据的一致性,如果不做这一步数据库启动不起来)

/usr/bin/innobackupex  --defaults-file=/etc/my3308.cnf --copy-back /apiapp/db/  (--copy-back 选项的命令从备份目录拷贝数据,索引,日志到my.cnf文   件里规定的初始位置。注意my.cnf文件中的basedir一定是空文件夹。如果不是空文件夹,执行不了)

4) 赋权 chown -R mysql:mysql /app/mydata3308

5) 重启数据库 /usr/bin/mysqld_safe --defaults-file=/etc/my3308.cnf

进入数据库查看,一切OK~

时间: 2024-08-28 18:11:00

MySQL数据迁移实战的相关文章

mysql数据迁移

一. 数据迁移简介所谓的数据迁移,就是指将原有的数据库系统迁移到另外一个业务系统上数据迁移的原因是多种多样的,有可能是业务变更.硬件升级.平台切换或升级mysql数据库 迁移的注意事项:(1).相同版本可以迁移(2).注意版本可以使用的引擎(3).低版本可以向高版本进行数据迁移,高版本一般兼容低版本的特性(4).高版本的数据不能向低版本进行数据迁移,会出现数据不兼容的情况(5).迁移是请注意导出数据和备份数据,出现迁移失败时,立即启动备份方案,保证公司业务的正常运行(6).在数据迁移时,要选择用

MySQL数据迁移到MSSQL-以小米数据库为例-测试828W最快可达到2分11秒

这里采用.NET Framework 4.0以上版本中新出现的 ConcurrentQueue<T> 类 MSDN是这样描述的: ConcurrentQueue<T> 类是一个线程安全的先进先出 (FIFO) 集合. ConcurrentQueue<T> 的所有公共且受保护的成员都是线程安全的,可从多个线程同时使用. 共采用两个线程,一个读一个写. ConcurrentQueue<T>的实现方法: (FIFO) 集合: ConcurrentQueue<

阿里云 CentOS下面 Mysql 数据迁移

本次Mysql数据迁移, 只是从阿里云的CentOS系统盘中,把mysql的data数据, 迁移到非系统盘中. 起因: 由于购买阿里云时候,  默认的系统盘只有20G.  后又购买了100G磁盘空间, 这时, 需要把原mysql数据, 迁移到新的磁盘分区中. 所有的操作步骤记录如下: 1. 新挂载磁盘分区: mount, 并设置为重启后自动加载. 2. 暂时关闭nginx服务器. 再关闭mysql服务器. 3. 修改/etc/my.cnf配置文件, 将里面的路径, 修改为新磁盘中的, 需要保存m

数据迁移实战:基于Kettle的Mysql到DB2的数据迁移

From:https://my.oschina.net/simpleton/blog/525675 一.什么是ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.ETL一词较常用在数据仓库,但其对象并不限于数据仓库. 二.Kettle简单说明 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定

MySQL数据迁移问题

最近尝试了一下小型数据迁移.本地迁移,windows平台,修改配置文件中的data_dir项,然后将旧的data文件下的数据文件全部拷贝过去. 之后登陆数据库,竟然1145错误.可以看到数据库的结构,各个表的名称,但是想深入表看其中数据却看不了. 不知道为什么,搜了一下,有人说拷贝的时候原SQL服务没有停下,有的说InnoDB引擎创建的表不支持这种直接拷贝,而MyISAM则可以. 没办法,只能采取笨办法咯~先在原来数据库上进行备份,然后再导入. mysqldump -u root -p data

mysql数据迁移到sql server(微软的迁移工具)

系统环境:win7 64位旗舰版 Mysql数据库:5.5版本  64位 Sql Server 2008: 64位 Odbc驱动程序版本:5.1 64位 迁移数据库:aimsv22 迁移工具: SSMA 2008 forMySQL 数据迁移时必须下载好对应的odbc驱动程序 (此处为odbc for mysql). 在微软官方网站下载SSMA 2008 forMySQL mysql数据库   sql server数据库

centos下mysql数据迁移方法

第一种: 原始数据库不需要重新安装: 默认mysql会安装在/var/lib/mysql这里,若将数据迁移到/data/mysql目录下,步骤如下: 1.停止mysql服务 2.#cp /var/lib/mysql/* /data/mysql/ #chown -R mysql.mysql /data/mysql 3.修改my.cnf文件 basedir = /usr datadir = /data/mysql socket = /data/mysql/mysql.sock pid-file =

Mysql 数据迁移后 启动出错

今天上班后不知道为什么,mysql一直无法启动,折腾了半天于是决定重装 我本地的服务器用的是wamp , 重装的时候, 要进行数据备份 , 我使用的最简单粗暴的备份方式, 就是直接进入到mysql的安装目录下, 把data拷贝一份就可以了. 然后卸载wamp后重装,数据迁移就是把data贴到相同位置替换下就ok了 但是今天迁移完后,mysql怎么也启动不了,查看log,显示各种错误 2014-11-13 13:40:29 5196 [Note] Plugin 'FEDERATED' is dis

MySQL 数据迁移脚本

用python写了个数据迁移脚本,主要是利用从库将大的静态表导出表空间,载导入到目标实例中. #!/usr/bin/env python3 #-*- coding:utf8 -*- #author:zhanbin.liu #!!!!!DB必须同版本 #python3环境 pip3 install pymysql paramiko import os #from pathlib import Path import sys import pymysql import paramiko #每次只能迁