#需要本地安装的软件
mysql 5.7.24 版本 这个mysql也是使用docker镜像来操作 daocloud.io/mysql:5.7
Percona Xtrabackup 2.4.12 这里我是使用docker镜像来操作 docker pull ipunktbs/xtrabackup
恢复的详细步骤如下: 1、登陆到RDS 控制台, 找到对应地域,在实例管理中,选择备份恢复,数据备份,点"下载".如图:
2、在弹出的窗口中,选择复制外网地址,如图:
3、在本地服务器使用bash命令,里面包括下载备份文件、解压文件、使用Xtrabackup将数据备份恢复 4、调用如下bash命令,以传参数得形式,sh aa.sh "url" 文件路径
1、这一句是将rds上面得备份文件下载下来 wget -O /data/docker/mg-plus/$2.tar "$1" 2、进入到下载对应得目录 cd /data/docker/mg-plus/ 3、创建传入参数得文件夹 mkdir $2 4、解压tar文件到对应得目录 tar vxf $2.tar -C /data/docker/mg-plus/$2 5、 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 /data
5、创建一个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/mysql
- ./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命令了
docker-compose up -d mysqlslave 启动成功后,进入容器 mysql 服务 docker exec -it 容器名称 mysql
查看并修改超级账号 aliyun_root 的密码. 命令为: select host,user from mysql.user; update mysql.user set authentication_string=password('新密码') where user='aliyun_root';
这时会报错,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这一系列配置