迁移 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=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/ 为例。
-
下载云数据库 物理备份文件 并上传至目标服务器。备份文件获取方法请参见 下载备份数据。如果目标服务器可以访问源实例,您也可以使用 wegt "url" 下载备份文件。其中 url 为备份文件下载地址。
-
切换路径到备份文件所在路径。
-
cd /home/mysql/
-
解压备份文件。
-
tar vizxf filename.tar.gz
其中,filename.tar.gz 为备份文件名。
-
检查解压后文件包含的数据库是否正确。
-
cd filename/
-
ll
系统显示如下,其中 db0dz1rv11f44yg2、mysql 和 test 为云数据库中存在的数据库。
-
-rw-r--r-- 1 root root 269 Aug 19 18:15 backup-my.cnf
-
drwxr-xr-x 2 root root 4096 Aug 21 10:31 db0dz1rv11f44yg2
-
-rw-rw---- 1 root root 209715200 Aug 7 10:44 ibdata1
-
drwxr-xr-x 2 root root 4096 Aug 21 10:31 mysql
-
drwxr-xr-x 2 root root 4096 Aug 21 10:31 test
-
-rw-r--r-- 1 root root 10 Aug 19 18:15 xtrabackup_binary
-
-rw-r--r-- 1 root root 23 Aug 19 18:15 xtrabackup_binlog_info
-
-rw-r--r-- 1 root root 77 Aug 19 18:15 xtrabackup_checkpoints
-
-rw-r--r-- 1 root root 2560 Aug 19 18:15 xtrabackup_logfile
-
-rw-r--r-- 1 root root 72 Aug 19 18:15 xtrabackup_slave_info
-
恢复数据文件。
-
innobackupex --defaults-file=./backup-my.cnf --apply-log ./
系统显示 innobackupex: completed OK!,则数据恢复成功。
-
修改配置文件。将解压文件 backup-my.cnf 中的 innodb_fast_checksum、innodb_page_size、innodb_log_block_size 注释掉,并且添加 datadir=/home/mysql,如下所示。
-
# This MySQL options file was generated by innobackupex-1.5.1.
-
# The MySQL Server
-
[mysqld]
-
innodb_data_file_path=ibdata1:200M:autoextend
-
innodb_log_files_in_group=2
-
innodb_log_file_size=524288000
-
#innodb_fast_checksum=0
-
#innodb_page_size=16364
-
#innodb_log_block_size=512
-
datadir=/home/mysql/
-
重装 MySQL 系统库,取得数据库的 root 权限。
-
rm -rf mysql
-
mysql_install_db --user=mysql --datadir=/home/mysql/
系统显示如下,则 mysql 系统库重装成功。
-
Installing MySQL system table...
-
OK
-
Filling help table...
-
OK
-
修改文件属主。
-
chown -R mysql:mysql /home/mysql/
-
启动 mysqld 进程。
-
mysqld_safe --defaults-file=/home/mysql/backup-my.cnf &
-
使用客户端登录数据库。
-
mysql –u root –p
-
验证数据库是否完整。
-
show databases;
系统显示入选,则数据库恢复成功。
-
+--------------------+
-
| Database |
-
+--------------------+
-
| information_schema |
-
| db0dz1rv11f44yg2 |
-
| mysql |
-
| performance_schema |
-
| test |
-
+--------------------+
利用逻辑备份文件导出
本例以本地服务器为 RHEL6/x64 系统,备份文件存储路径为 /home/mysql/ 为例。
操作步骤
-
下载云数据库 逻辑备份文件 并上传至目标服务器。备份文件获取方法请参见 下载备份数据。如果目标服务器可以访问源实例,您也可以使用 wegt "url" 下载备份文件。其中 url 为备份文件下载地址。
-
切换路径到备份文件所在路径。
-
cd /home/mysql/
-
解压备份文件。
-
tar vizxf filename.tar.gz
其中,filename.tar.gz 为备份文件名。
-
解压 sql 压缩文件。
-
gunzip filename.sql.gz
其中,filename.sql.gz 为 sql 压缩文件名。
-
执行逻辑导入操作,将数据导入目标数据库。
-
mysql -u userName -p -h hostName -P port dbName < filename.sql
其中,filename.sql 为解压后的 sql 文件。