恢复云数据库MySQL的备份文件到自建数据库
注:已经在本地阿里云服务器部署
系统:使用的阿里云CentOS release 6.8 (Final)

注:先把默认的mysql清理
然后去官网下载
我使用的mysql版本如下:
mysql-community-server-5.6.40-2.el6.x86_64
centos6安装mysql的yum源
wget https://repo.mysql.com//mysql80-community-release-el6-1.noarch.rpm
然后rpm -ivh
注:这个yum源默认是安装mysql8.0的 一把是安装最新稳定版的 mysql
但是yum源里面 还一堆的其他版本••比如

如果需要centos7的 mysql的其他版本的 yum源 请直接去官网找到社区版•下面是地址:
https://dev.mysql.com/downloads/mysql/

安装恢复RDS的工具,说明一下 阿里云是使用xtrabackup全量备份的所以需要下载percona-xtrabackup
Y um install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum install percona-xtrabackup

下载RDS上的全量备份数据
wget -c 'http://rdsbak-hzi-v2.oss-cn-hangzhou-internal.aliyuncs.com/custins5649549/hins4451627_data_20180605231947.tar.gz?OSSAccessKeyId=LTAITfQ7krsrEwRn&Expires=1528360515&Signature=8FAk7VbnzmGdY7SdD4S2Uq70x3w%3D' -o mysql.test.tar.gz
注 -c是断开续传下载 -O是追加到一个tar文件里面••••这里是大写字母O

将下载的数据备份恢复到本地MySQL数据库中,具体操作步骤如下
执行如下命令,解压已下载的数据备份文件。
说明:本文以自定义路径/home/mysql/data为例,您可以根据实际情况将其替换成实际路径。
bash rds_backup_extract.sh -f mysql.test.tar.gz -C /home/mysql/data

参数说明:
 -f:指定要解压的备份集文件。
 -C:指定文件要解压到的目录。可选参数,若不指定就解压到当前目录。

执行如下命令,恢复解压好的备份文件

  1. innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
    注:这个backup-my.cnf文件是解压以后自带的•••需要注释掉几个 RDS参数•••因为阿里云二次开发过
    官方的mysql也没这些参数 要不然起不来

为避免版本问题,需修改backup-my.cnf参数,具体操作步骤如下。
i. 执行如下命令,以文本方式编辑backup-my.cnf文件。
vi /home/mysql/data/backup-my.cnf
ii. 执行如下命令,注释掉如下参数。

#innodb_fast_checksum

  1. #innodb_page_size
  2. #innodb_log_block_size

#rds_encrypt_data=false
#innodb_encrypt_algorithm=aes_128_ecb
#innodb_log_checksum_algorithm=innodb

我发现要注释这6个参数•••••••

附上整个配置
Cat backup-my.cnf
[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=524288000
#innodb_fast_checksum=false
#innodb_page_size=16384
#innodb_log_block_size=512
innodb_undo_directory=.
innodb_undo_tablespaces=0
#rds_encrypt_data=false
#innodb_encrypt_algorithm=aes_128_ecb

  1. 执行如下命令,修改文件属主,并确定文件所属为MySQL用户。
    chown -R mysql:mysql /home/mysql/data
  2. 执行如下命令,启动MySQL进程。
    mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data &
  3. 执行如下命令,登录MySQL数据库以验证进程启动成功。

我这边重启了2次••所有有 2个mysql-binlog日志,这是还没恢复RDS的增量日志•的截图

mysql -uroot
这个mysql登录是没有密码的•••直接可以进去

我这里测试 确实只有 默认的 root用户了•••

恢复完成后,表mysql.user中不包含在RDS实例中创建的用户,需要新建。在新建用户前,执行如下命令。
mysql> delete from mysql.db where user<> 'root' and char_length(user)>0;delete from mysql.tables_priv where user<> 'root' and char_length(user)>0;flush privileges;

注意这里需要不报错••有可能引号有问题 改改。阿里云说了 这一串是必须的•••

mysql> create database zabbix;
mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by '123456';
注:这样才能创建新用户 ••要不然会报错••••如果还报错•••会提示需要••mysql_upgrade恢复

退出mysql,直接执行下面命令就ok了•••
mysql_upgrade
就会ok

mysql> grant all privileges on . to 'root'@'%' identified by '123456';
mysql> flush privileges;

增量恢复步骤:
先下载和恢复全被••找到binlog所在实例编号•这个全备时间点以后的binlog相同的编号 全部要下载 我下面有 6个binlog日志都需要恢复•••••

确定需要开始增量应用 binlog 的位点
[root@paopao-php-dev data]# cat xtrabackup_binlog_info
mysql-bin.000197 93011 22c9970f-4782-11e8-afd1-702084fbc72e:1-22285363

mysql-bin.000197 是应用的起始 binlog 文件, 93011 是开始位点(start position)

1.从控制台下载相同 “备份所在实例编号” 的恢复所需 binlog 文件。在本例中,增量恢复涉及到
我这里涉及到6个还一个binlog是一样的

2.下载后使用 tar 命令解压
tar xvpf mysql-bin 这6个文件都要解压

3通过 mysqlbinlog 命令分析 mysql-bin.000202 文件内容,确定增量恢复到的时间点。

mysqlbinlog -v --base64-output=decode-rows mysql-bin.000202 > 202.log

vi 202.log

请用户自行根据情况确定要恢复到的时间

确定时间点后,进行增量恢复
mysqlbinlog mysql-bin.000688 mysql-bin.000689 --start-position=93011 --stop-datetime="16-05-16 18:05:03" | mysql -uroot -pyour_password -P3306 -hyour_host_ip

-p 参数和 your_password 间不要有空格, your_password 请自行替换为实际密码

-h 参数后请指定非 127.0.0.1 的主机 IP

mysqlbinlog 命令格式:

mysqlbinlog binlog_file1 binlog_file2 ... binlog_filen --start-position=xxxx --stop-datetime="YY-mm-dd hh:mm:ss" | mysql -uroot -pyour_password -Pmysql_port -hyour_host_ip

mysqlbinlog 其他可以使用的参数

--database db_name 指定仅增量恢复指定数据库 db_name 的数据

--start-position 指定开始恢复的 binlog 位点,该位点应存在于指定的第一个 binlog 文件。

--stop-position 指定恢复到的 binlog 位点,该位点应存在于指定的最后一个 binlog 文件。

--start-datetime 指定开始恢复的时间点(从第一个等于或大于该时间点的 binlog 事件开始)。

以本地时间时区为准,格式为 MySQL 可以接受的时间格式,比如"2016-05-16 08:01:05" 或 "16-05-16 08:01:05"。

--stop-datetime 指定停止恢复的时间点(在第一个等于或大于该时间点的 binlog 事件停止)。

以本地时间时区为准,格式为 MySQL 可以接受的时间格式,比如"2016-05-16 08:01:05" 或 "16-05-16 08:01:05"。

mysqlbinlog mysql-bin.000197 mysql-bin.000198 mysql-bin.000200 mysql-bin.0002000 mysql-bin.000201 mysql-bin.000202 --start-position=93011 --stop-datetime="2018-06-11 10:30:49" | mysql -uroot -p123456 -P3306 -h172.16.214.123
多个binlog日志老报错••ERROR 2006 (HY000) at line 59225: MySQL server has gone away

解决报错:
1.直接去mysql里面设置这个上传的参数 改成 500M•临时生效
mysql> set global max_allowed_packet=10241024500

2.持久生效需要在配置文件添加参数,但是需要重启mysql生效
max_allowed_packet = 500M

#我现在是一个一个的bilog上传 可能设置很大 可以一起上传 •我还没测试一起上传多个binlog日志