恢復雲數據庫MySQL的備份文件到自建數據庫

恢復雲數據庫MySQL的備份文件到自建數據庫
注:已經在本地阿里雲服務器部署
系統:使用的阿里雲CentOS release 6.8 (Final)php

注:先把默認的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源裏面 還一堆的其餘版本••好比mysql

若是須要centos7的 mysql的其餘版本的 yum源 請直接去官網找到社區版•下面是地址:
https://dev.mysql.com/downloads/mysql/sql

安裝恢復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文件裏面••••這裏是大寫字母Ocentos

將下載的數據備份恢復到本地MySQL數據庫中,具體操做步驟以下
執行以下命令,解壓已下載的數據備份文件。
說明:本文以自定義路徑/home/mysql/data爲例,您能夠根據實際狀況將其替換成實際路徑。
bash rds_backup_extract.sh -f mysql.test.tar.gz -C /home/mysql/databash

參數說明:
 -f:指定要解壓的備份集文件。
 -C:指定文件要解壓到的目錄。可選參數,若不指定就解壓到當前目錄。服務器

執行以下命令,恢復解壓好的備份文件app

  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. 執行以下命令,註釋掉以下參數。ide

#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日誌

相關文章
相關標籤/搜索