恢復雲數據庫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
爲避免版本問題,需修改backup-my.cnf參數,具體操做步驟以下。
i. 執行以下命令,以文本方式編輯backup-my.cnf文件。
vi /home/mysql/data/backup-my.cnf
ii. 執行以下命令,註釋掉以下參數。ide
#innodb_fast_checksum工具
#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
我這邊重啓了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
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
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日誌