#須要本地安裝的軟件mysql
- mysql 5.7.24 版本 這個mysql也是使用docker鏡像來操做 daocloud.io/mysql:5.7
- Percona Xtrabackup 2.4.12 這裏我是使用docker鏡像來操做 docker pull ipunktbs/xtrabackup
恢復的詳細步驟以下: 一、登錄到RDS 控制檯, 找到對應地域,在實例管理中,選擇備份恢復,數據備份,點"下載".如圖:sql
二、在彈出的窗口中,選擇複製外網地址,如圖: docker
三、在本地服務器使用bash命令,裏面包括下載備份文件、解壓文件、使用Xtrabackup將數據備份恢復 四、調用以下bash命令,以傳參數得形式,sh aa.sh "url" 文件路徑shell
一、這一句是將rds上面得備份文件下載下來 wget -O /data/docker/mg-plus/$2.tar "$1" 二、進入到下載對應得目錄 cd /data/docker/mg-plus/ 三、建立傳入參數得文件夾 mkdir $2 四、解壓tar文件到對應得目錄 tar vxf $2.tar -C /data/docker/mg-plus/$2 五、 innobackex 恢復解壓後的數據.命令以下: docker run --rm -it -v /data/docker/mg-plus/$2:/data --name xtrabackup ipunktbs/xtrabackup run innobackupex --defaults-file=/data/backup-my.cnf --apply-log /databash
五、建立一個my.cnf文件,拷貝修改backup-my.cnf ,具體操做步驟以下: [mysqld] innodb_checksum_algorithm=crc32 #innodb_log_checksum_algorithm=strict_crc32 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 server_id=2056 #redo_log_version=1 #server_uuid=b333cbc0-883c-11ea-ba74-98039b07432c #master_key_id=0 #innodb_encrypt_algorithm=AES_256_CBC #skip-grant-tables (這句話目的是由於你在rds上面備份下來,沒有super權限,加這個參數越過權限,而後進行改root密碼)服務器
##docker-compose.yml文件 mysqlslave: image: daocloud.io/mysql:5.7 expose: - "3306" environment: - MYSQL_DATABASE=**** - MYSQL_USER=***** - MYSQL_PASSWORD=******* - MYSQL_ROOT_PASSWORD=123456 - TZ=Asia/Shanghai restart: always volumes: - ./slave:/var/lib/mysqlapp
- ./my.cnf:/etc/mysql/my.cnf
command: mysqld --lower_case_table_names=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --max-connections=2000 --default-authentication-plugin=mysql_native_password --default-time-zone=+08:00 --server-id=2056 --gtid-mode=ON --innodb_checksum_algorithm=crc32 --innodb_data_file_path=ibdata1:200M:autoextend --innodb_log_files_in_group=2 --innodb_log_file_size=1572864000 --innodb_undo_directory=./ --innodb_undo_tablespaces=0 --log_error=/var/log/mysql/error.log --enforce_gtid_consistency=1
這裏因爲掛載my.cnf文件沒有生效,直接使用command命令了ui
docker-compose up -d mysqlslave 啓動成功後,進入容器 mysql 服務 docker exec -it 容器名稱 mysql url
查看並修改超級帳號 aliyun_root 的密碼. 命令爲: select host,user from mysql.user; update mysql.user set authentication_string=password('新密碼') where user='aliyun_root';spa
這時會報錯,Unknown system variable 'maintain_user_list',如圖: 表示有觸發器. 注意: 在mysql5.7 中, aliyun_root 纔是真正超級權限帳號.
查看並刪除觸發器.命令以下: select trigger_schema,trigger_name from information_schema.triggers; drop trigger sys.sys_config_insert_set_user; drop trigger sys.sys_config_update_set_user;
再次修改密碼,仍然報錯.錯誤和14步驟中一致.這時咱們還要刪除觸發器文件.先退出mysql,在 shell 下查找(也就是你使用Xtrabackup恢復數據那個目錄).TRG 結尾的文件,命令以下: 直接cd 到那個Xtrabackup恢復數據那個目錄) find -iname *.trg
將其兩個文件刪除 mv user.TRG mv es_priv.TRG 再次登陸並修改 aliyun_root 的密碼.命令同上,下圖表示修改爲功. 退出容器 修改 my.cnf, 註釋 skip-grant-tables, 保存, 並再次啓動mysql. 此次登陸須要密碼驗證,登陸命令爲: mysql -ualiyun_root -p -h127.0.0.1
查看主從複製狀態: show slave status\G Slave_SQL_Running:no Slave_IO_Running:no 證實還沒開啓主從複製功能 change master to master_host=".mysql.rds.aliyuncs.com",master_user="",master_port=3306,master_password="****",master_auto_position=0,master_log_file="mysql-bin.006846",master_log_pos=90480655; (最後這個兩個值得填寫,是在主庫rds上執行show master status;獲取到這兩個值) 設置gtid得值,發現報錯 SET GLOBAL gtid_purged='3c853c27-83af-11e8-964e-7cd30aeb153e:1-3691591462,97c5834f-83af-11e8-8c80-7cd30aeb120c:1-1118656660'; 這個時候須要reset master ,以後在執行上面那條命令行 而後start slave; show slave status\G 若是是出現時Slave_IO_Running:no,另一個yes,證實時報錯了 解決辦法:可能時同步位置出問題,這個時候跳過一下錯誤就行了 stop slave; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; start slave;
若是未能解決,那麼stop slave以後從新reset slave;在走設置 slave 配置,chang master to這一系列配置