阿里云RDS MySql还原到本地Linux/Centos

本文使用的是:MySql5.7;centos 7.x;Percona xtrabackup 2.4
具体可以参考:阿里云RDS还原官方文档
因centos7.x 默认自带MariaDB,所以得先卸载掉MariaDB,不卸载后续会出现mysql起不来的问题。
centos7.x 卸载MariaDB命令:首先查看MariaDB版本名称:

rpm -qa | grep mariadb

卸载MariaDB命令

rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

(mariadb-libs-5.5.56-2.el7.x86_64是查询到的版本名称)
至此卸载MariaDB完成。

为了方便mysql采用yum安装方式:
MySql5.7下载地址:

wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

下载完成后执行

rpm -ivh mysql57-community-release-el7-9.noarch.rpm

执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件
mysql-community.repo mysql-community-source.repo
注意: 必须进入到 /etc/yum.repos.d/目录后再执行以下脚本

yum install mysql-server

后续一直y即可

安装这一步时候会很慢,可以同时多开窗口同时下载RDS文件备份(磁盘空间原因本文下载在/usr/local/src/)同时下载Percona xtrabackup2.4(5.7使用2.4版本)
rds下载命令:

wget -c '阿里云rds备份还原,外网地址' -O 数据备份文件名(可以自由取名).tar.gz

Percona xtrabackup工具:

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.8/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm

MySql安装完不要启动mysql服务
yum安装是my.cnf 默认在/etc下面
执行:

Vim /etc/my.cnf

添加如下配置:

innodb_checksum_algorithm=crc32
innodb_data_file_path=ibdata1:200M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=524288000
innodb_undo_directory=/var/lib/mysql/
basedir=/usr
innodb_undo_tablespaces=0
server_id=999098802
sql_mode=''
kip-grant-tables

安装percona-release;percona-xtrabackup
先安装percona-release :

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

再次执行:

yum update percona-release

在percona-xtrabackup文件目录下执行:

yum install percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm

安装完成可以在任何目录下执行:inno 后加table健 如出现innobackupex innochecksum则安装成功
注:如果出现安装冲突
Transaction check error: file /etc/my.cnf from install of Percona-Server-shared-56-5.6.37-rel82.2.el7.x86_64 conflicts with file from package mysql-community-server-5.7.19-1.el7.x86_64
解决办法:
1查看是否存在:

rpm -qa|grep -i mysql
mysql-community-common-5.7.28-1.el7.x86_64
mysql57-community-release-el7-9.noarch
mysql-community-client-5.7.28-1.el7.x86_64
mysql-community-server-5.7.28-1.el7.x86_64
perl-DBD-MySQL-4.023-6.el7.x86_64
mysql-community-libs-5.7.28-1.el7.x86_64
mysql-community-libs-compat-5.7.28-1.el7.x86_64(此时这个是不存在的)

2执行:

yum list |grep -i mysql|grep libs-compat

出现如下
mysql-community-libs-compat.i686 5.7.23-1.el7 mysql57-community
mysql-community-libs-compat.x86_64 5.7.23-1.el7 mysql57-community
3执行安装

yum install mysql-community-libs-compat -y
yum install percona-toolkit -y

都执行完,在重新执行

yum install percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm

解压rds下载的文件
yum安装 mysql 数据文件夹默认在 /var/lib/mysql。
进入下载的rds备份文件夹(本文的地址在/usr/local/src/)
解压指令:tar -izxvf 数据备份文件名(可以自由取名).tar.gz -C /var/lib/mysql

根据备份文件大小,解压时间不一

解压完成进入

cd /var/lib/mysql

执行附加命令:

innobackupex --defaults-file=backup-my.cnf --apply-log /var/lib/mysql

注:会出现innodb_log_file_size大小不一致错误

dbi:mysql:;mysql_read_default_group=xtrabackup;host=10.192.200.107;port=3307;mysql_socket=/tmp/mysql.sock' as 'root' (using password: YES). 160419 09:40:49 version_check Connected to MySQL server 160419 09:40:49 version_check Executing a version check against the server... 160419 09:40:53 version_check Done. 160419 09:40:53 Connecting to MySQL server host: 10.192.200.107, user: root, password: set, port: 3307, socket: /tmp/mysql.sock Using server version 5.5.29-log innobackupex version 2.3.2 based on MySQL server 5.6.24 Linux (x86_64) (revision id: 306a2e0) xtrabackup: uses posix_fadvise(). xtrabackup: cd to /data/server/mysql_3307/data xtrabackup: open files limit requested 0, set to 1024 xtrabackup: using the following InnoDB configuration: xtrabackup: innodb_data_home_dir = ./ xtrabackup: innodb_data_file_path = ibdata1:10M:autoextend xtrabackup: innodb_log_group_home_dir = ./ xtrabackup: innodb_log_files_in_group = 2 xtrabackup: innodb_log_file_size = 5242880 InnoDB: Error: log file ./ib_logfile0 is of different size 50331648 bytes InnoDB: than specified in the .cnf file 5242880 bytes!

解决方法:
1进入/var/lib/mysql 查看是否有ib_logfile文件,不要直接删除 最好备份

mv ib_logfile ib_logfile_bak

2修改mysql配置文件my.cnf中innodb_log_file_size 值大小为50331648 (根据上面报错的信息修改)
操作完再次执行:

innobackupex --defaults-file=backup-my.cnf --apply-log /var/lib/mysql

完成后出现completed OK!表示成功
成功后执行:

chown -R mysql:mysql /var/lib/mysql

后续:
此时登录mysql.因为设置了 skip-grant-tables,所以无须密码。
查询:

select user,host from mysql.user;

出现有aliyun_root@127.0.0.1账号或者线上数据库账号也在,说明rds的账号已经还原进来了。
此时账号只能在本机访问:修改访问权限

update mysql.user set host='%' where user='aliyun_root';

修改密码:

update mysql.user set authentication_string=password('新密码') where user='aliyun_root';

注:出现Unknown system variable 'maintain_user_list错误;表示有触发器
解决办法:
mysql中执行:

select trigger_schema,trigger_name from information_schema.triggers;

发现有两个sys库下的触发器
±---------------±---------------------------+
| trigger_schema | trigger_name |
±---------------±---------------------------+
| sys | sys_config_insert_set_user |
| sys | sys_config_update_set_user |
±---------------±---------------------------+
删除这两个触发器:

drop trigger sys.sys_config_insert_set_user;drop trigger sys.sys_config_update_set_user;

再次修改进行修改后如果还是报错;
进入cd /var/lib/mysql/后在执行:

cd ./mysql

执行

find -iname *.trg

会发现:user.TRG;proxies_priv.TRG这两个文件
保险起见把他们拷贝到跟目录下:

mv *.TRG ~

执行完成再次执行修改访问权限,修改密码。
后续就是开放防火墙端口。
至此全部完成。

posted @ 2019-12-31 10:55  supernebula  阅读(406)  评论(0编辑  收藏  举报