mysql 历史数据表迁移方案
当业务运行一段时间后,会出现有些表数据量很大,可能对系统性能产生不良的影响,常见的如订单表、登录log表等,这些数据很有时效性,比如我们一般很少去查上个月的订单,最多也就是报表统计会涉及到。
在我们的数据库中,用户登录表就是这种类型的表,一般而言,表中的数据是不可逆的,只有插入操作没有删除或者修改操作,表示在过去一段时间内完成的事实业务数据。比如登录表表示一段时间内用户的登录信息,登录一次游戏就会在数据库中记录一条数据。
1、对于备份这类表的策略是:
- 第一次备份全表的数据导入到备份表中,也就是全备。
- 以后每天只将增加的量自动迁移到备份表中,这里通过自增列的值相比较得到增量,如第一次全备导入备份表,这时自增列的最大值为max(idx),通过这个值到从库中查询,只要大于这个值的所有记录形成增量。
- 备份完成后,分批删除主库上的数据。
2、下面是具体操作步骤:
- 第一次全备和恢复
select * from table into outfile "/data/backup/xxxx.txt"; --导出备份数据
load data infile "/data/backup/ xxxx.txt " into table bak_table; --在另外服务器备份表中恢复
- 脚本程序实现:拉取线上服务器上的增量数据,然后导入本服务器,实现增量备份
1)需要在同一目录下建立三个sql脚本,如a.sql b.sql c.sql
a.sql: 拼接增量备份sql,形成备份语句
use report;
select concat('use report;select * from t_user_session where user_session_idx>',max(user_session_idx),' into outfile "/data/backup/incrementalbackup/t_user_session_ios1.txt";') from t_user_session;
b.sql:接受a.sql的输出
c.sql: 负责恢复数据
use report;
load data infile '/data/backup/incrementalbackup/t_user_session_ios1.txt' into table t_user_session_ios1;
2)loadlog1.sh:通过输入a.sql,生成备份语句到b.sql中。用于在线上服务器执行增量备份数据。
#!/bin/bash
/data/mysql/bin/mysql -h 127.0.0.1 -uroot -p'******' -N < /data/backup/scripts/a.sql > /data/backup/scripts/b.sql
3)loadlog2.sh:连接到线上服务器,删除以前备份文件,并通过b.sql进行数据导出,然后删除本地服务器上上次备份的文件。
#!/bin/bash ssh root@1.1.1.1 "/data/backup/scripts/del_bak_file.sh" /data/mysql/bin/mysql -uroot -p'*****' -h'1.1.1.1' < /data/backup/scripts/b.sql rm -f /data/backup/incrementalbackup/*.txt
4)loadlog3.sh:将备份服务器上导出的数据文件拷贝到本地服务器
#!/bin/bash
scp root@10.10.67.114:/data/backup /*.txt /data/backup/
5)loadlog4.sh:加载数据到本地服务器
#!/bin/bash /data/mysql/bin/mysql -h 127.0.0.1 -uroot -p'*******' < /data/backup/scripts/c.sql
6)loadlogall.sh:用于统一执行loadlog1-4,并输入日志。
#!/bin/bash
echo '------start-loadlog.sh-----'>> /data/backup/scripts/logs/loadlog.log
date "+%Y-%m-%d %H:%M:%S" >> /data/backup/scripts/logs/loadlog.log
/data/backup/scripts/loadlog.sh
echo '----end--loadlog.sh-----' >> /data/backup/scripts/logs/loadlog.log
/data/backup/scripts/loadlog2.sh
echo '----end---loadlog2.sh------' >> /data/backup/scripts/logs/loadlog.log
/data/backup/scripts/loadlog3.sh
echo '------end-loadlog3.sh------------' >> /data/backup/scripts/logs/loadlog.log
/data/backup/scripts/loadlog4.sh
echo '-----end-loadlog4.sh----------' >> /data/backup/scripts/logs/loadlog.log
7)将loadlogall.sh加入定时目录,每隔1个小时拉取一次。
crontab -e
--编辑文件 分 时 天 月 周 年 命令
到这里备份就完成了,然后可以清理部分的历史数据了,当然了,这里几个loadlog*.sh显得有些繁琐,这里为了一步一步看得更清楚些,完全可以把这些整合到一个shell脚本里。
未完待续。。。
mysql 历史数据表迁移方案的更多相关文章
- 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结
本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言 MySQL作为开源技术的代表作之一,是 ...
- MySQL 大表优化方案(长文)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- 详解MySQL大表优化方案( 转)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- MySQL 大表优化方案探讨
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- MySQL大表优化方案
转:https://segmentfault.com/a/1190000006158186?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sour ...
- MySQL 大表优化方案
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- MySQL大表优化方案 Mysql的row_format(fixed与dynamic)
转自:https://mp.weixin.qq.com/s/VY69wWlrVLjRtKU7ULrYGw 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除 ...
- 详解MySQL大表优化方案
单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的.而事实上很多时 ...
- Mysql ---Sqlserver数据迁移到Mysql(Mysql建表迁移数据)
1 试用了MysqlWorkBench的数据迁移功能 以为能实现:建立跟Sqlserver一样的表结构和视图的功能,sqlserver的数据迁移到mysql 实际上发现:即使勾选了表和视图,实际上却只 ...
随机推荐
- Memcache针对不同场景数据应用缓存策略
Memcache主要的作用是为减轻大访问量对数据库的冲击,所以一般的逻辑是首先从memcache中读取数据,如果没有就从数据库中读取数据写入到memcache中,等下一次读取的时候就可以从memcac ...
- ps选框工具全解
我们每次选择工具的时候,ps上面都会变成特定的选项,比如说下面这些: 比如说选区工具的话就分为新选区.添加选区.交叉选区之类的,这些都是需要在实战中练习的. 不单单是选区有这个工具,其他的也有这个功能 ...
- Mac下配置mnmp环境
虽然比较喜欢玩下新语言, 但是php还是常会用到的. lnmp很多人都听过, 但是不能用在Mac上面, 另外还有个mnpp但在osx 10.8.3下面跑不起来.所以自己手动一步步安装, 整理了方便安装 ...
- lua学习笔记(四)
表达式 算术操作符 +(加法) -(减法) *(乘法) /(除法) ^(指数) %(取模) -(负号) x%1的结果是x的小数部分,x-x%1是整数部分 关系操作符 ...
- MySQL_知识点
1.执行顺序 语句模板: (8)SELECT (9)DISTINCT (11)<Top Num> <select list> (1)FROM [left_table] (3)& ...
- 你不知道的Google Search
0.导读 这篇文章讲了这三个事儿: 如何訪问Google?----------什么?不是直接输入地址么? Google的地址是什么? ------ 你在逗我?难道不是www.google.com? G ...
- php7.0 出现 curl_setopt(): Disabling safe uploads is no longer supported in 报错!
项目换成php7.0,进行了测试,使用curl时,出现: curl_setopt(): Disabling safe uploads is no longer supported in xxx.定位到 ...
- PHP性能之语言性能优化:魔术方法好不好?
魔术方法是什么鬼? 魔术方法,也叫魔鬼函数.只要学过PHP的都知道什么是魔术方法,魔术方法就是在某些条件下自动执行的函数. PHP的魔术方法主要有下面几个,其他的参考PHP官方手册 __constru ...
- nginx 不能解析php怎么办
在服务器下源码安装了 mysql php nginx,结果nginx不支持php.解决方法,在nginx配置文件中添加: ocation ~ .*\.php?$ { fastcgi_pass 127 ...
- Linux与本地上传下载文件
当出于安全原因,客户的服务器不允许使用windows第三方插件连接的时候,本地windows跟远程的linux服务器进行文件的上下传受到了限制,此时可以在linux服务器上安装一个工具:lrzsz.安 ...