mysql迁移2.docx
《mysql迁移2.docx》由会员分享,可在线阅读,更多相关《mysql迁移2.docx(14页珍藏版)》请在冰豆网上搜索。
mysql迁移2
MySQL数据库迁移详细步骤
2015-01-0200:
40:
04
标签:
mysql 数据库迁移
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。
否则将追究法律责任。
==========================================================================================
一、背景简介
==========================================================================================
1、问题描述
由于机房搬迁,需要对后台DB服务器进行迁移,同时为了保证在数据迁移过程中,对线上业务不造成影响,并能够做到秒级切换。
如果我们采用普通的逻辑备份,比如:
mysqldump,会存在锁表的情况,显然不可取。
因此我们采取基于物理备份的方案,备份工具选型为:
xtrabackup。
2、系统环境
IP地址
系统版本
MySQL版本
角色
172.17.138.239
SUSELinuxEnterpriseServer10(x86_64)
5.0.26
旧环境(临时主)
10.217.121.196
CentOS6.3(x86_64)
5.0.27
新环境(主)
10.217.121.216
CentOS6.3(x86_64)
5.0.27
新环境(从)
(1)、由于当前的mysql版本太旧,故备份工具推荐选择xtrabackup-2.0.8的版本;
(2)、由于当前的系统环境太旧,官方提供的xtrabackup二进制版本无法运行,故需进行源码编译。
3、编译要求
(1)、需要安装cmake依赖库;
(2)、需要下载一份mysql-5.1.59的源码包,放在percona-xtrabackup-2.0.8目录下;
(3)、libtool的版本不能高于2.4。
==========================================================================================
二、xtrabackup编译安装
==========================================================================================
1、编译安装cmake
http:
//wwwNaNake.org/files/v2.8/cmake-2.8.10.tar.gz
#tar-xvzfcmake-2.8.10.tar.gz
#cdcmake-2.8.10
#./bootstrap--prefix=/usr/local
#gmake--jobs=`grepprocessor/proc/cpuinfo|wc-l`
#gmakeinstall
2、编译安装xtrabackup
#tarxvzfpercona-xtrabackup-2.0.8.tar.gz
#cdpercona-xtrabackup-2.0.8
## 将mysql-5.1.59源码包下载到percona-xtrabackup-2.0.8目录下,无需解压
#./utils/build.sh innodb50
注意:
以上标注部分,需要与当前的MySQL主版本对应上,如果有不明白的,可以参考以下信息。
#catBUILD.txt
#vim./utils/build.sh
#cpinnobackupex/usr/local/bin/
#cdsrc
#cpxbstreamxtrabackup_51/usr/local/bin/
#cd/usr/local/bin/
#ln-sinnobackupexinnobackupex-1.5.1
#ln-sxtrabackup_51xtrabackup
==========================================================================================
三、DB数据备份
==========================================================================================
1、一些常用用法
## 如果在从端运行的话
innobackupex--user=root--defaults-file=/etc/f --slave-info --no-timestamp/data/mysql_backup
## 如果在主端运行的话
innobackupex--user=root--defaults-file=/etc/f--no-timestamp/data/mysql_backup
## 如果在主端运行并压缩传输到远程服务器的话
innobackupex--user=root--defaults-file=/etc/f--no-timestamp--stream=tar/data/mysql_backup| gzip|sshroot@10.133.33.85"cat->/data/mysql_backup.tgz"
注意:
我们本次的备份,直接在主DB(172.17.138.239)上进行,因为xtrabackup不会锁表,对业务不造成影响,也会为后续的主从关系建立带来便利。
2、备份步骤
由于本地服务器的磁盘空间所剩不多,所以本次备份采用压缩传输到远程服务器的方式。
但为了更好地描述在本次备份中遇到的问题,我们先采用本地模式。
#innobackupex--user=root--defaults-file=/etc/f--no-timestamp/data/mysql_backup
注意:
如上报错信息,主要是因为“/etc/f”配置文件里没有指定basedir、datadir参数设置,导致xtrabackup找不到。
#psaux|grepmysql[d]
注意:
根据以上信息,我们需要将以下参数添加到配置文件中(/etc/f):
basedir=/usr/local/services/mysql-5.0.26
datadir=/usr/local/services/mysql-5.0.26/var
#innobackupex--user=root--defaults-file=/etc/f--no-timestamp/data/mysql_backup
注意:
出现这种错误信息,是因为备份目录“/data/mysql_backup”已经存在,主要是由前一次操作引起的。
因为xtrabackup要求备份目录事先不能存在,需要在执行时才会自动创建。
如果我们将数据备份到本地的话(前提是服务器磁盘空间足够多),执行以下命令即可:
#rm-rf/data/mysql_backup
#innobackupex--user=root--defaults-file=/etc/f--no-timestamp/data/mysql_backup
在恢复的时候,将本地的备份数据rsync同步到远程服务器,然后采用xtrabackup进行恢复即可。
但考虑到本地磁盘空间不足,故本次数据迁移,我们采用压缩传输到远程服务器的备份方式(此种方法比较慢^_^),执行以下命令即可:
innobackupex--user=root--defaults-file=/etc/f--no-timestamp--stream=tar/data/mysql_backup|gzip|sshroot@10.217.121.196"cat->/data/mysql_backup.tgz"
## 本地服务器上的备份信息输出
## 远程服务器上的文件信息
注意:
以上数据备份时间可能会比较长,推荐放在深夜进行,第二天来恢复 ^_^
==========================================================================================
四、DB数据恢复
==========================================================================================
1、安装mysql-5.0.27环境
#/usr/sbin/groupaddmysql
#/usr/sbin/useraddmysql-gmysql-s/sbin/nologin
#mkdir-p/data/dbdata/{data,binlog,relaylog,otherlog}/var/run/mysql
#chown-Rmysql:
mysql/data/dbdata/var/run/mysql
#cd/usr/local/src
#tarxvzfmysql-5.0.27.tar.gz
#cdmysql-5.0.27
#./configure--prefix=/usr/local/mysql\
--datadir=/data/dbdata/data\
--enable-thread-safe-client\
--enable-assembler\
--enable-local-infile\
--with-charset=utf8\
--with-collation=utf8_general_ci\
--with-extra-charsets=all\
--with-unix-socket-path=/var/run/mysql/mysql.sock\
--without-debug\
--with-embedded-server\
--with-big-tables
#make--jobs=`grepprocessor/proc/cpuinfo|wc-l`
#makeinstall
#cp./support-files/mysql.server/etc/init.d/mysqld
#chmod+x/etc/init.d/mysqld
#chkconfig--addmysqld
#chkconfigmysqldon
#cd/usr/local
#mvmysqlmysql-5.0.27
#ln-smysql-5.0.27mysql
#chmod+w/usr/local/mysql
#chown-Rmysql:
mysql/usr/local/mysql/
#vim/etc/ld.so.conf
/usr/local/mysql/lib/mysql
#/sbin/ldconfig
#cd/etc
#rm-ff&&ln-smy_ff
#vimf
……
innodb_data_file_path=ibdata1:
1024M:
autoextend
innodb_log_file_size=512M
innodb_log_files_in_group=3
……
注意:
以上我们故意在开始部署MySQL环境时,将表空间文件分配的少一些,这样可以让MySQL启动的快一些,同时也为接下来的恢复操作以作区别。
也需要注意一下以下附件中的参数“bind-address”、“server-id”。
#cd/usr/local/mysql
#./bin/mysql_install_db--datadir=/data/dbdata/data--user=mysql
#servicemysqldstart
2、编译安装xtrabackup
在此省略,可以参考之前的步骤,或者直接将之前编译后的二进制文件拷贝过来即可。
3、DB数据恢复
#mkdir-p/data/mysql_backup
#tar-ixvzf /data/mysql_backup.tgz-C/data/mysql_backup
注意:
在做tar解压操作时,一定要加上“-i”参数。
#servicemysqldstop
#cd/data/dbdata
#mvdatadata.old&&mkdirdata
#rm-rfbinlog/*
#cd/etc
#rmf&&ln-smy_ff
……
innodb_data_file_path=ibdata1:
2000M;ibdata2:
2000M;ibdata3:
2000M;ibdata4:
2000M;ibdata5:
2000M;ibdata6:
2000M;ibdata7:
2000M;ibdata8:
2000M;ibdata9:
2000M;ibdata10:
2000M;ibdata11:
2000M;ibdata12:
2000M;ibdata13:
2000M;ibdata14:
2000M;ibdata15:
2000M;ibdata16:
2000M;ibdata17:
2000M;ibdata18:
2000M;ibdata19:
2000M;ibdata20:
2000M;ibdata21:
2000M;ibdata22:
2000M;ibdata23:
2000M;ibdata24:
2000M;ibdata25:
2000M;ibdata26:
2000M;ibdata27:
2000M;ibdata28:
2000M;ibdata29:
2000M;ibdata30:
2000M;ibdata31:
2000M;ibdata32:
2000M;ibdata33:
2000M;ibdata34:
2000M;ibdata35:
2000M;ibdata36:
2000M;ibdata37:
2000M;ibdata38:
2000M;ibdata39:
2000M;ibdata40:
2000M;ibdata41:
2000M;ibdata42:
2000M;ibdata43:
2000M;ibdata44:
2000M;ibdata45:
2000M;ibdata46:
2000M;ibdata47:
2000M;ibdata48:
2000M;ibdata49:
2000M;ibdata50:
2000M;ibdata51:
2000M;ibdata52:
2000M;ibdata53:
2000M;ibdata54:
2000M;ibdata55:
2000M;ibdata56:
2000M;ibdata57:
2000M;ibdata58:
2000M;ibdata59:
2000M;ibdata60:
2000M;ibdata61:
2000M;ibdata62:
2000M;ibdata63:
2000M;ibdata64:
2000M;ibdata65:
2000M;ibdata66:
2000M;ibdata67:
2000M;ibdata68:
2000M;ibdata69:
2000M;ibdata70:
2000M;ibdata71:
2000M;ibdata72:
2000M;ibdata73:
2000M;ibdata74:
2000M;ibdata75:
2000M;ibdata76:
2000M;ibdata77:
2000M;ibdata78:
2000M;ibdata79:
2000M;ibdata80:
2000M;ibdata81:
2000M;ibdata82:
2000M;ibdata83:
2000M;ibdata84:
2000M;ibdata85:
2000M;ibdata86:
2000M;ibdata87:
2000M;ibdata88:
2000M;ibdata89:
2000M;ibdata90:
2000M;ibdata91:
2000M;ibdata92:
2000M;ibdata93:
2000M;ibdata94:
2000M;ibdata95:
2000M;ibdata96:
2000M;ibdata97:
2000M;ibdata98:
2000M;ibdata99:
2000M;ibdata100:
2000M;ibdata101:
2000M;ibdata102:
2000M;ibdata103:
2000M;ibdata104:
2000M;ibdata105:
2000M;ibdata106:
2000M;ibdata107:
2000M;ibdata108:
2000M;ibdata109:
2000M;ibdata110:
2000M;ibdata111:
2000M;ibdata112:
2000M;ibdata113:
2000M;ibdata114:
2000M;ibdata115:
2000M;ibdata116:
2000M;ibdata117:
2000M;ibdata118:
2000M;ibdata119:
2000M;ibdata120:
2000M;ibdata121:
2000M:
autoextend
innodb_log_file_size=256M
innodb_log_files_in_group=2
……
注意:
以上参数要和旧环境对应,否则无法启动,如果参数“innodb_log_files_in_group”在旧环境没有设置,此处可以忽略不设置,默认值为2。
也需要注意一下以下附件中的参数“bind-address”、“server-id”。
#innobackupex--apply-log/data/mysql_backup
#innobackupex--copy-back/data/mysql_backup
# cp-a/usr/local/src/mysql-5.0.27/sql/share/*/data/dbdata/data/mysql/
注意:
以上步骤必须进行,否则会报错,导致启动失败。
#chown-Rmysql:
mysql/data/dbdata/data
#servicemysqldstart
## 至于另一台服务器(10.217.121.216)的DB数据恢复,可以将“10.217.121.196”上的解压数据同步过来,然后按照同样的方式进行恢复即可
#rsync-arvPz-e"ssh-lroot-p36000"/data/mysql_backup/10.217.121.216:
/data/mysql_backup/
4、主从关系建立
(1)、DB账号恢复
将“172.17.138.239”的“mysql”数据库导出,然后导入到“10.217.121.196”
将“172.17.138.239”的从DB的“mysql”数据库导出,然后导入到“10.217.121.216”
(2)、“10.217.121.196”与“10.217.121.216”主从关系建立
在“10.217.121.196”上的操作:
#mysql-uroot-e"grantreplicationslaveon*.*to'repl'@'10.217.121.216'identifiedby'repl123456';"
#mysql-uroot-e"flushprivileges;"
#mysql-uroot-e"showmasterstatus\G"
在“10.217.121.216”上的操作:
#mysql-uroot-e"changemastertomaster_host='10.217.121.196',master_user='repl',master_password='repl123456',master_log_file='XXX',master_log_pos=XXX;"
#mysql-uroot-e"startslave;"
#mysql-uroot-e"showslavestatus\G"
注意:
以上标注部分,需要根据实际情况填写即可。
(3)、“172.17.138.239”与“10.217.121.196”主从关系建立
在“172.17.138.239”上的操作:
#mysql-uroot-e"grantreplicationslaveon*.*to'repl'@'10.217.121.196'identifiedby'repl123456';"
#mysql-uroot-e"flushprivileges;"
#mysql-uroot-e"showmasterstatus\G"
在“10.217.121.196”上的操作:
#cat/data/mysql_backup/xtrabackup_binlog_info
#mysql-uroot-e"changemastertomaster_host='172.17.138.239',master_user='repl',master_password='repl123456',master_log_file='TaeSupport.001635',master_log_pos=436953160;"
#mysql-uroot-e"startslave;"
#mysql-uroot-e"showslavestatus\G"
最终的主从关系如下:
172.17.138.239 → 10.217.121.196 → 10.217.121.216
Mater MasterSlave Slave
注意:
以上3台DB的配置文件“/etc/f”中的“server-id”参数,必须保持不相同,否则你懂得 ^_^
业务侧切换时,只需指向新的