[bigdata-069]mysql数据迁移从自建导入到rds+代码过滤增量导入 centos6.8+pymsql+mysqldump+source

1. 将数据从mysql_s逐张表迁移到rds上
rds机的用户信息
内网rds的地址 xxx-db.mysql.rds.aliyuncs.com
用户名 user_t 密码: passwordisok!!!


2. 检查mysql_s和rds的细节
2.1 统计各库的信息
[root@TT-SH-SER-02 ~]# mysqlshow --count -u root -p 
Enter password: 
+--------------------+--------+--------------+
|     Databases      | Tables |  Total Rows  |
+--------------------+--------+--------------+
| information_schema |     28 |         3221 |
| mysql              |     23 |         2022 |
| test               |      0 |            0 |
| ttss_trust         |     49 |      2951457 |
+--------------------+--------+--------------+
4 rows in set.


2.2 统计一个库的信息
mysqlshow --count ttss_trust -u root -p


[root@TT-SH-SER-02 ~]# mysqlshow --count ttss_trust -u root -p
Enter password: 
Database: ttss_trust
+----------------------------+----------+------------+
|           Tables           | Columns  | Total Rows |
+----------------------------+----------+------------+
| tss_ar         |        4 |          0 |
| tss_re        |       10 |          0 |
| tss_ma           |       13 |         23 |
| tss_maa      |       10 |         89 |


2. 备份方式,以tss_api_manage为例
    2.1 源数据库是mysql_s,目标数据库是xxx-db.mysql.rds.aliyuncs.com
    2.2 在mysql_s上,将tss_api_manage导出成sql文件
     目标机上库和表已经创建,不需要创建新库,不需要创建新表,不需要删除目标机的已存库,不需要删除目标机的已存同名表。
     mysqldump -uroot -pt1234455 -n -t  ttss_trust tss_api_manage  --skip-lock-tables > tss_api_manage.sql
    2.3 在mysql_s上,将tss_api_manage导入到xxx-db.mysql.rds.aliyuncs.com
     2.3.1 mysql -hxxx-db.mysql.rds.aliyuncs.com -uuser_t -ppasswordisok!!!
     2.3.2 然后在mysql里执行:source /root/bridir/tss_api_manage.sql




     


2. mysql_s上一共有n个表
+----------------------------+
| Tables_in_ttss_tru       | 记录数/备份后记录数
+----------------------------+
| tss_are         |0/不备份
| tss_ee_rule        |0/不备份
| tss_manage           |23/搞定




3. 导出导入二进制字段表tss_attach_file
3.1 在mysql_s上执行
mysqldump -uroot -pt1234455 -n -t ttss_trust tss_attach_file  --hex-blob --skip-lock-tables > tss_attach_file.sql
3.2 在mysql_s上执行:
mysql -hxxx-db.mysql.rds.aliyuncs.com -uuser_t -ppasswordisok!!!
然后再执行
source /tmp/bridir/tss_attach_file.sql




4. 导入增量数据
写一个py程序,来判断某个记录是否在另一个库里有值,如果没有,就把这个记录insert进去。
tss_ord
tss_ecord
tss_cord
...


5. 用代码导入
临时代码,不考虑复用,简单既可
从mysql_s库取5-6之后的创建的id,如果这个id不再rds上,则记录值,然后dump导出所有这些id的记录,然后在rds的source执行。


----------------------------
#!/usr/bin/env python3
#!-*- coding:utf-8 -*-


"""
迁移:
"""


import os
import pymysql


#mysql_s上的mysql
conn_s = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='t1234455',
                         db='ttss_tru', charset='utf8')


#rds
conn_t = pymysql.connect(host='xxx-db.mysql.rds.aliyuncs.com',
                         port=3306, user='user_t', passwd='passwordisok!!!',
                         db='ttss_tru', charset='utf8')
c_s = conn_s.cursor()
c_t = conn_t.cursor()


#################


#迁移当天
t_date = '2017-05-06 00:00:00'




def trans_a_table(t_name):
    #在mysql_s上,创建日期大于date的id
    sql = 'select id from %s where create_date > \'%s\';' % (t_name, t_date)
    # sql = 'select id from %s;' % (t_name)
    c_s.execute(sql)
    to_be_insert_id = []
    #取所有的结果
    r_s = c_s.fetchall()
    for i in r_s:
        # print(i[0])
        #这个id在rds是不是有?
        sql = 'select id from %s where id = \'%s\';' % (t_name, i[0])
        c_t.execute(sql)
        r_t = c_t.fetchone()
        #如果rds里没有这个id,那么,将它记录下来
        if None == r_t:
            print(i[0])
            to_be_insert_id.append(i[0])
    #生成mysqldump命令行
    str = ''
    for i in to_be_insert_id[:1000]:
        str += 'id=\'%s\' or ' % (i)
    str = str[:-4]
    cmd = 'mysqldump -uroot -pt1234455 -n -t ttss_tru %s --where=\"%s\" --skip-lock-tables > %s.sql' % (
    t_name, str, t_name)
    print(cmd)
    os.system(cmd)
    print('source /root/bridir/%s.sql' %(t_name))


trans_a_table('tss_record')
----------------------------







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值