#须要本地安装的软件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这一系列配置