首页 > 代码库 > 迁移 RDS for MySQL 数据到本地 MySQL

迁移 RDS for MySQL 数据到本地 MySQL

近期领导要求创建一个灰度环境,做一个预发布数据库的环境。

因为我公司用的数据库是线上阿里云RDS数据库,要把线上的数据弄到线下数据库中来,根据阿里云给出的文档进行操作,但是老是在最后一步的时候报错,老是弄不成功,所以才有了我这份文档的由来。


首先需要下载跟线上阿里云的数据库同样版本的数据库安装包或者说二进制编码包(已编译,可以直接使用)

链接如下:

http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz

解压缩:

root@ubuntu:/data#tar  -xzvf  mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz

root@ubuntu:/data# mv  mysql-5.6.36-linux-glibc2.5-x86_64  mysql

root@ubuntu:/data#cd  mysql

root@ubuntu:/data/mysql#

root@ubuntu:/data/mysql# ls  //解压缩出来的文件如下所示,不用源码编译安装,直接使用即可;

bin  COPYING  data  docs  include  lib  man  my.cnf  my-new.cnf  mysql-test  README  scripts  share  sql-bench  support-files

接下来就是解压缩线上数据库的备份文件:

root@ubuntu:/data/mysql#cd  ../

root@ubuntu:/data# tar -xzvf h7351_data_20170804032.tar.gz  -C /data/mariadb/

待得解压缩完成后,恢复数据文件:

首先需要安装innobackupex命令,所以要安装这个包文件:

root@ubuntu:/data#apt-get install percona-xtrabackup

root@ubuntu:/data#innobackupex --defaults-file=./backup-my.cnf --apply-log --ibbackup xtrabackup_56  ./      //必须要加上后面的--ibbackup  xtrabackup_56,我这里是56,因为我的数据库版本是5.6版本的;

最后系统显示 innobackupex: completed OK!,则数据恢复成功。

数据恢复成功之后,修改恢复数据mariadb目录下文件(包含mariadb目录)的属主和属组:

新建mysql用户:

root@ubuntu:/data#useradd  mysql

root@ubuntu:/data# chown -R mysql.mysql mariadb/   //修改解压缩后的数据文件的属主和属组,以级联的方式,把mariadb目录下的所有文件修改属主和属组为mysql

初始化之前需要修改配置文件;

root@ubuntu:~#cd /data/mariadb  //数据库的数据文件解压缩的目录

root@ubuntu:/data/mysql/scripts# cd /data/mariadb/

root@ubuntu:/data/mariadb# vi backup-my.cnf  //我的配置文件如下:

把将解压文件 backup-my.cnf 中的 innodb_fast_checksum、innodb_page_size、innodb_log_block_size 注释掉,并且添加 datadir=/data/mariadb


# This MySQL options file was generated by innobackupex.

# The MySQL server

[mysqld]

innodb_checksum_algorithm=innodb

#innodb_log_checksum_algorithm=innodb

innodb_data_file_path=ibdata1:200M:autoextend

innodb_log_files_in_group=2

innodb_log_file_size=1572864000

#innodb_fast_checksum=false

#innodb_page_size=16384

#innodb_log_block_size=512

innodb_undo_directory=.

innodb_undo_tablespaces=0

datadir=/data/mariadb

#rds_encrypt_data=http://www.mamicode.com/false

#innodb_encrypt_algorithm=aes_128_ecb

初始化操作:

进入刚解压的mysql安装的位置/data/mysql

root@ubuntu:~# cd /data/mysql/

root@ubuntu:/data/mysql# ls

bin  COPYING  data  docs  include  lib  man  my.cnf  my-new.cnf  mysql-test  README  scripts  share  sql-bench  support-files

root@ubuntu:/data/mysql# cd scripts/

root@ubuntu:/data/mysql/scripts#

root@ubuntu:/data/mysql/scripts# ./mysql_install_db --user=mysql --datadir=/data/mariadb --basedir=/data/mysql --defaults-file=/data/mariadb/backup-my.cnf   //这里需要指定配置文件,不然它会在初始化的时候去到/etc/目录下查找

出现OK即表示初始化成功;

接下来就是创建快捷方式啦:

root@ubuntu:/data/mariadb# cd /data/mysql/support-files/   //进入mysql安装位置的这个目录

root@ubuntu:/data/mysql/support-files# ls

binary-configure  magic  my-default.cnf  mysqld_multi.server  mysql-log-rotate  mysql.server

root@ubuntu:/data/mysql/support-files# cp mysql.server /etc/init.d/mysqld   //复制启动文件到/etc/init.d/目录下

root@ubuntu:/data/mysql/support-files#vi  /etc/init.d/mysqld  //做一下修改,具体修改的位置如下:

basedir=/data/mysql

datadir=/data/mariadb


修改完成后保存退出,还需要注意一个地方,就是配置文件,如果启动的时候不指定配置文件,那么它就会调用/etc/my.cnf文件,所以需要指定,有两种方法,一种是直接在/etc/init.d/mysqld中修改,如:

  #conf=/etc/my.cnf

  conf=/data/mariadb/backup-my.cnf


另一种方法就是:直接复制解压文件mariadb目录下的backup-my.cnf文件到/etc/my.cnf,如

root@ubuntu:/data/mariadb# cp backup-my.cnf /etc/my.cnf   //这样就可以不用修改/etc/init.d/mysqld文件中的conf

启动mysql:

root@ubuntu:/data/mariadb#/etc/init.d/mysqld start  //未报错,即表示是正常的

root@ubuntu:/data/mariadb#ps aux | grep mysql  //查看是否有mysql进程

root      5706  0.0  0.0   4464  1624 pts/0    S    09:53   0:00 /bin/sh /data/mysql/bin/mysqld_safe --datadir=/data/mariadb --pid-file=/data/mariadb/ubuntu.pid

mysql     5900  0.3  7.2 1572664 586972 pts/0  Sl   09:53   0:08 /data/mysql/bin/mysqld --basedir=/data/mysql --datadir=/data/mariadb --plugin-dir=/data/mysql/lib/plugin --user=mysql --log-error=/data/mariadb/ubuntu.err --pid-file=/data/mariadb/ubuntu.pid

root      6009  0.0  0.0  13464  2124 pts/1    S+   10:29   0:00 grep --color=auto mysql

root@ubuntu:/data/mariadb#




附上阿里云文档上的操作:

操作步骤

本例以本地服务器为 RHEL6/x64 系统,备份文件存储路径为 /home/mysql/ 为例。

  1. 下载云数据库 物理备份文件 并上传至目标服务器。备份文件获取方法请参见 下载备份数据。如果目标服务器可以访问源实例,您也可以使用 wegt "url" 下载备份文件。其中 url 为备份文件下载地址。

  2. 切换路径到备份文件所在路径。

  1. cd /home/mysql/

  1. 解压备份文件。

  1. tar vizxf filename.tar.gz

其中,filename.tar.gz 为备份文件名。

  1. 检查解压后文件包含的数据库是否正确。

  1. cd filename/

  2. ll

系统显示如下,其中 db0dz1rv11f44yg2mysql 和 test 为云数据库中存在的数据库。

  1. -rw-r--r-- 1 root root       269 Aug 19 18:15 backup-my.cnf

  2. drwxr-xr-x 2 root root      4096 Aug 21 10:31 db0dz1rv11f44yg2

  3. -rw-rw---- 1 root root 209715200 Aug  7 10:44 ibdata1

  4. drwxr-xr-x 2 root root      4096 Aug 21 10:31 mysql

  5. drwxr-xr-x 2 root root      4096 Aug 21 10:31 test

  6. -rw-r--r-- 1 root root        10 Aug 19 18:15 xtrabackup_binary

  7. -rw-r--r-- 1 root root        23 Aug 19 18:15 xtrabackup_binlog_info

  8. -rw-r--r-- 1 root root        77 Aug 19 18:15 xtrabackup_checkpoints

  9. -rw-r--r-- 1 root root      2560 Aug 19 18:15 xtrabackup_logfile

  10. -rw-r--r-- 1 root root        72 Aug 19 18:15 xtrabackup_slave_info

  1. 恢复数据文件。

  1. innobackupex --defaults-file=./backup-my.cnf --apply-log ./

系统显示 innobackupex: completed OK!,则数据恢复成功。

  1. 修改配置文件。将解压文件 backup-my.cnf 中的 innodb_fast_checksuminnodb_page_sizeinnodb_log_block_size 注释掉,并且添加 datadir=/home/mysql,如下所示。

  1. # This MySQL options file was generated by innobackupex-1.5.1.

  2. # The MySQL Server

  3. [mysqld]

  4. innodb_data_file_path=ibdata1:200M:autoextend

  5. innodb_log_files_in_group=2

  6. innodb_log_file_size=524288000

  7. #innodb_fast_checksum=0

  8. #innodb_page_size=16364

  9. #innodb_log_block_size=512

  10. datadir=/home/mysql/

  1. 重装 MySQL 系统库,取得数据库的 root 权限。

  1. rm -rf mysql

  2. mysql_install_db --user=mysql --datadir=/home/mysql/

系统显示如下,则 mysql 系统库重装成功。

  1. Installing MySQL system table...

  2. OK

  3. Filling help table...

  4. OK

  1. 修改文件属主。

  1. chown -R mysql:mysql /home/mysql/

  1. 启动 mysqld 进程。

  1. mysqld_safe --defaults-file=/home/mysql/backup-my.cnf &

  1. 使用客户端登录数据库。

  1. mysql u root p

  1. 验证数据库是否完整。

  1. show databases;

系统显示入选,则数据库恢复成功。

  1. +--------------------+

  2. | Database           |

  3. +--------------------+

  4. | information_schema |

  5. | db0dz1rv11f44yg2   |

  6. | mysql              |

  7. | performance_schema |

  8. | test               |

  9. +--------------------+

利用逻辑备份文件导出

本例以本地服务器为 RHEL6/x64 系统,备份文件存储路径为 /home/mysql/ 为例。

操作步骤

  1. 下载云数据库 逻辑备份文件 并上传至目标服务器。备份文件获取方法请参见 下载备份数据。如果目标服务器可以访问源实例,您也可以使用 wegt "url" 下载备份文件。其中 url 为备份文件下载地址。

  2. 切换路径到备份文件所在路径。

  1. cd /home/mysql/

  1. 解压备份文件。

  1. tar vizxf filename.tar.gz

其中,filename.tar.gz 为备份文件名。

  1. 解压 sql 压缩文件。

  1. gunzip filename.sql.gz

其中,filename.sql.gz 为 sql 压缩文件名。

  1. 执行逻辑导入操作,将数据导入目标数据库。

  1. mysql -u userName -p -h hostName -P port dbName < filename.sql

其中,filename.sql 为解压后的 sql 文件。


本文出自 “11842333” 博客,请务必保留此出处http://11852333.blog.51cto.com/11842333/1954191

迁移 RDS for MySQL 数据到本地 MySQL