使用GTID,将阿里云RDS数据库,同步到本地MySQL
目标:
将阿里云RDS数据库,同步到本地MySQL。实现RDS为Master,本地MySQL为Slave
核心技术:
GTID复制。
核心步骤:
下载线上物理文件,部署到本地,设置主从关系,启动,纠错。
- 将阿里云RDS物理备份文件到本地MySQL Data文件夹
- 设置本地为Slave。My.cnf
- 设置Change Master;start slave;
- 处理1236错误,纠偏:同步数据、跳过事务。
参考文件:
- 本地安装MySQL:https://www.cnblogs.com/nickchou/p/12093763.html
- 物理备份恢复至本地:https://help.aliyun.com/document_detail/41817.htm?spm=a2c4g.11186623.2.6.71624d4e3sGtj1
- 安装XtraBackup 8.0:https://www.percona.com/doc/percona-xtrabackup/8.0/installation.html?spm=a2c4g.11186623.2.14.49d12df0gWtYFW
- 修改MySQL的Root密码:https://dev.mysql.com/doc/refman/8.0/en/resetting-permissions.html?spm=a2c4g.11186623.2.27.49d12df0bqzE43
- 配置GTID,绑定主从:https://dudashuang.com/rds-sync-to-local/
- 绑定主从:https://my.oschina.net/azaz/blog/3119700
- 处理1236:https://blog.51cto.com/hnr520/1883282
- 跳过事务:https://note.t4x.org/database/mysql-gtid-purged/
本地MySQL安装配置
一、安装配置:
1.删除mariadb
- # 检查mariadb
- rpm -qa | grep mariadb
- # 删除mariadb
- yum -y remove mariadb*
2.删除Mysql
- # 检查mysql
- rpm -qa | grep mysql
- # 删除mysql
- yum -y remove mysql*
- rm -rf /etc/my.cnf
- rm -rf /var/lib/mysql
3. 安装MySQL
- # 配置安装源
- sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
- # 安装MySQL
- sudo yum --enablerepo=mysql80-community install mysql-community-server
4. 操作MySQL服务
- systemctl start mysqld
- systemctl status mysqld
- systemctl stop mysqld
- systemctl restart mysqld
- # 查看端口运行情况
- netstat -nlpt
二、查看并修改密码
mysql安装后会生成一个默认密码,此密码登录后要修改密码,不能用于其他操作
- cat /var/log/mysqld.log
登录root账号修改初始密码,复制上面的密码登录
- mysql -u root -p
修改密码,注意密码要稍微复杂点(大小写+符号+数字)
- mysql> ALTER USER USER() IDENTIFIED BY 'Xinmima@2020';
- mysql> update mysql.user set host='%' where user='root';
- mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
- mysql> FLUSH PRIVILEGES;
可能会用到新建账号、赋权命令:
- create user 'test'@'%' identified by 'Xinmima@2020';
- grant all privileges on testdb.* to 'test'@'%';
- # grant select on testdb.* to 'test'@'%';
- # grant insert,delete,update on testdb.* to 'test'@'%';
- flush privileges;
- # 查看权限
- show grants for 'test'@'%';
- # 删除权限
- revoke update on testdb.* from 'test'@'%';
阿里RDS数据库-还原到本地MySQL
三、下载RDS备份
下载物理备份,步骤如下:
- 登录RDS管理控制台。
- 在左侧单击实例列表,然后在上方选择实例所在地域。
- 找到目标实例,单击实例ID。
- 在左侧导航栏中单击备份恢复。
- 选择数据备份标签页。
- 选择查询的时间范围。
- 在数据备份列表中,找到要下载的数据备份,并单击其右侧的下载。
下载时要注意,链接里用来验证的参数太多,需要把文件名指定出来,否则下载会出错。下载命令:
wget -c 'http://.../hinsxxxx_data_20201123215531_xb.qp?...' -O hins_20201123215531_xb. qp
四、解压缩包
RDS-MySQL目前物理备份集文件有几种格式:
- tar 压缩包 (.tar.gz 后缀)
- xbstream 压缩包 (.xb.gz 后缀)
- xbstream 文件包(_qp.xb 后缀)
- xbstream qpress压缩包(_xb.qp后缀)
根据不同的MySQL版本,需要用到的数据恢复工具也不一样:
- MySQL 5.6及之前的版本需要安装 Percona XtraBackup 2.3
- MySQL 5.7版本需要安装 Percona XtraBackup 2.4
- MySQL 8.0版本需要安装 Percona XtraBackup 8.0
我的是MySQL8.0.18,备份文件的格式是_xb.qp。其余版本,参考链接里找对应方法。
1.安装qpress
wget
"http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/183466/cn_zh/1608011575185/qpress-11-linux-x64.tar"tar
xvf qpress-
11-linux-x64.tar
- chmod 775
qpress
cp
qpress /usr/bin
2. 安装XtraBackup:
Installing Percona XtraBackup from Percona yum repository
If Percona XtraBackup is intented to be used in combination with the upstream MySQL Server, you only need to enable the tools repository: percona-release
|
3. 解压数据备份:
qpress -do hins_20201123215531_xb.qp | xbstream -x -v -C /home/mysql/data
若解压成功:
ls -l /home/mysql/data
4*. 恢复解压好的备份文件,记得配归属
- ## MySQL 8.0
xtrabackup -
-prepare-
-target-dir=/home/mysql/
dataxtrabackup -
-datadir=/var/lib/mysql -
-copy-back-
-target-dir=/home/mysql/
data
# 我继续做了一步:哈哈哈哈,我决定保留这份小青涩
# cp -rf /home/mysql/data/* /var/lib/mysql/
耐心等待,若系统返回如下类似结果,则说明备份文件已成功恢复到自建数据库。
若系统返回如下报错,可以用rm -rf /var/lib/mysql
命令清空文件夹内文件,然后用chown -R mysql:mysql /var/lib/mysql
修改归属。
5*. 需修改backup-my.cnf参数
# vi /home/mysql/data/backup-my.cnf
# 修改MySQL配置文件: Vim /etc/my.cnf
添加如下参数:
lower_case_table_names=1
注释掉如下自建数据库不支持的参数:
#innodb_log_checksum_algorithm
#innodb_fast_checksum
#innodb_log_block_size
#innodb_doublewrite_file
#innodb_encrypt_algorithm
#rds_encrypt_data
#redo_log_version
#master_key_id
#server_uuid
6. 启动MySQL,修改用户密码:
# mysqld --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data &
# 通过上面我自己的配置,直接启是可以成功的。但是还是保留一下,以后好查
systemctl start mysqld
执行如下命令,登录MySQL数据库以验证进程启动成功。
mysql -u<源RDS实例账号> -p<对应密码>
使用show databases;查看数据库,确认是否恢复成功
建议您参考官方文档重置root账户的密码。
User表里面有一个aliyun_root,那就是root账户,update、identified、grant、flush参见上文。
配GTID同步
1. 配/etc/my.cnf
我的my.cnf文件内容
datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socklog-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.piddefault_authentication_plugin = 'mysql_native_password'lower_case_table_names = 1#GTID:gtid_mode=onenforce_gtid_consistency=onserver_id=87binlog_format=rowlog-slave-updates=1
2. 设置GDIT,绑定主从
reset slave;
# 若备份文件中包含了 RDS 的主从复制关系,需要把这些主从复制关系清理掉
use mysql;
truncate table slave_relay_log_info;
truncate table mysql.slave_master_info;
truncate table mysql.slave_worker_info;
reset master;
change master to master_host = 'rdsExampleUrl.mysql.rds.aliyuncs.com', master_port = 3306, master_user = 'username', master_password='password', master_auto_position = 1;
# 启动
start slave;
# 查看状态
show slave status\G;
处理1236报错
报错:
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'
从库报错:主库清理(purge)掉了从库还没有接受的事物。(https://dudashuang.com/rds-sync-to-local/)
解决:
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> reset slave;
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement
mysql> quit
/etc/init.d/mysqld stop
mysql> reset slave;
mysql> reset master;
# 下文加粗部分到“/var/lib/mysql/xtrabackup_info”文件里找
mysql> set @@global.gtid_purged='78488ade-0dfc-11e7-ad71-00163e00dadd:1-18125360,b2723b81-468b-11e7-8636-00163e1ab1b4:1-3,78488ade-0dfc-11e7-ad71-00163e00dadd:1-18367652,b2723b81-468b-11e7-8636-00131ab1b4:1-4';
Query OK, 0 rows affected (0.00 sec)
找这里:
binlog_pos = filename 'mysql-bin.000206', position 195, GTID of the last change '02XXXXX-636a-11ea-ad5c-98039XXXXX:1-261417,030d8530-636a-11ea-aa21-ecXXXXXa7c34:1-1418028,83d2116b-d431-11ea-99c6-1c349XXXXXc:1-1411391,fb421df5-e902-11ea-81f2-b9XXXXX a0:1-512624'
再start slave就成功了。如图:
最后,我不放心,又把数据从RDS得到到本地MySQL一次。
上述所有操作,始终没在RDS-MySQL里做操作,阿里已经把GTID打开了,直接配就行。
若想确认RDS是否打开GTID,可以在RDS-MySQL里执行:
show global variables like '%gtid%';
上文在/etc/my.cnf里设置从库server_id的时候,也要注意应和RDS的server_id不同。
RDS的Server_id查看方法,在RDS-MySQL里执行:
# show variables like '%server_id%';
后续
目前已经稳定运行7天
后续深入学习上述不放心的地方,以及:Master实例失效以后,如何查找两库数据上的差异、如何补救差异、如何切换Slave为Master对外提供服务(包括如何通知配置中心)。
程序端平时应只在Slave上执行读操作,如果MySQL Master失效相应地也需要:如何判定Master失效,如何拿到新Master。需落实:三次写入失效(还得注意幂等)+配置中心。
使用GTID,将阿里云RDS数据库,同步到本地MySQL相关推荐
- 问题:阿里云RDS数据库Binlog日志一直增大,撑爆磁盘
问题:阿里云RDS数据库Binlog日志一直增大,撑爆磁盘 最后结果,是因为MySQL语句问题,没有where的条件下,导致更新操作 没有开启安全模式,需要开启sql更改安全模式,禁止没有where的 ...
- java rds 数据库_JDBC(java数据库连接)和阿里云RDS数据库
这两天挖洞的时候,拿到了一个配置生产环境的源码,看一下就能看出来是配置 首先给大家看下源码: 因为我暂时还没有学过java,所以刚看到这个,就没有这个概念,只以为是配置个 首先我们来了解下JDBC:J ...
- 【数据库取证篇】阿里云RDS数据库简介
[数据库取证篇]阿里云RDS数据库简介 初识RDS基本信息,知其然,再知其所以然-[suy] 文章目录 [数据库取证篇]阿里云RDS数据库简介 (一)云数据库RDS简介 1.各版本功能 (二)RD ...
- SpringBoot 中连接阿里云rds数据库
今天首次碰到在SpringBoot中使用阿里云rds数据库,搜索一了一番资料,最后成功实现.然后在这里做下自我总结.(个人用到是SSH方式进行连接) 1.在pom文件中添加jar包依赖 <dep ...
- python连接阿里云数据库_记一次python备份阿里云RDS数据库
阿里云是目前国内公有云排名靠前的一家企业,安全性较高,但在保证安全的前提下也存在着业务上云后如何进行备份,下面的实例是一个现实的项目案例,主要是数据库上云后如何将数据备份到本地存储设备中,下面是以py ...
- 云产品学习之路(阿里云01)阿里云rds数据库导出
参考文档:阿里云rds数据库导出到windows本地数据库中 1.进入阿里云rds控制台,选择实例列表进入rds实例 2.进入备份恢复,选择全量备份下载
- 阿里云RDS数据库如何远程访问
阿里云RDS数据库如何远程访问 1.找到对应的数据库实例, 点击管理,进入管理页面 点击数据安全性 选择添加白名单 将本地IP地址加进去,如果不知道可百度"IP". 3.添加安全组 ...
- 使用sqlyog连接阿里云rds数据库
使用sqlyog连接阿里云rds数据库 查看rds云数据库的外网地址 查看本机ip地址 配置白名单 填写上本机的ip然后点击确认 设置数据库的账号和密码 建议设置成普通账号 普通账号记得配置权限 使用 ...
- 阿里云RDS数据库外网连接和内网连接有什么不同?
内网就是云上环境访问 速度快 没有费用 公网就是可以飞云上环境访问 速度不一定 有费用 通过外网和内网均可访问阿里云 RDS 数据库.使用外网时,阿里云 RDS 数据库的连接带宽会受到限制.建议还是通 ...
最新文章
- 【电子基础】模拟电路问答
- 和6岁孩子的函数式编程对话
- 任务 进程 线程区别
- [旧博客]Python 第一次
- vue表单的基本使用
- Web框架——Flask系列之宏、继承、包含(十八)
- 香草 jboss 工具_使用Tensorflow创建香草神经网络
- 互联网日报 | 1月27日 星期三 | 支付宝集五福活动2月1日开启;华为否认“出售手机业务”传闻;中国联通自有手机品牌发布...
- EF(EntityFramework) 的 CodeFirst 使用指南二(基本使用)
- 【Active Learning - 09】主动学习策略研究及其在图像分类中的应用:研究背景与研究意义
- 不同网段实现全网互通
- 视频字幕 硬字幕 软字幕 外挂字幕 简介
- 公众号openid能做用户识别_做公众号能不能转载别人文章?我的建议是...
- 蜂云软件开发微信crm系统的功能点
- TBS1072B数字示波器波形截图流程
- 使用pydicom读取dicom文件,并对文件做一些简单操作
- 宽带计费认证系统的PPPoE认证技术
- 去除Opera与迅雷的关联
- 阿里Java面试必问:java多线程实例
- WPF 仿安卓手势解锁 图案解锁
热门文章
- QGraphicsView创建悬浮按钮
- git 切换仓库地址
- 福建省获得央行颁发的非金融机构支付业务许可牌照的公司(至2012-08-01)
- google maps api
- 计算机游戏攻略 185,少儿编程游戏CodeMonkey通关攻略:第180-185关
- Ios精品源码,tableview下载视频直播源播放器图片位置3D立体旋转相册屏风动画
- MAC苹果电脑关闭系统完整性保护SIP
- 【Spark】基于Spark的大型电商网站交互式行为分析系统项目实战
- BPMN 2.0 快速使用文档
- 基于51单片机的汇编程序:六位8段数码管(共阴极)动态显示“123456”