首页 > 技术文章 > mysql 归档方案(一次性)

Jack1023 2019-05-22 15:51 原文

一、 归档流程:

               1. 导出需要的数据

               2. 创建临时表table_tmp

               3. 导入数据到临时表

               4. 修改原始表名为table_bak

               5. 修改临时表为原始表名

二、归档方式对比

  1. select into outfile load data infile 导入导出的方式

    SELECT * FROM student where create_time > '2018-10-01 00:00:00' into  /data/mysql/student.sql

    source  /data/mysql/student.sql

  2. INSERT INTO 直接读取写入的方式

    INSERT INTO student_tmp SELECT * FROM student where create_time > '2019-02-16 00:00:00'

  3. mysql官方自带逻辑备份工具mysqldump

    mysqldump --user=root --host=127.0.0.1 -p --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 test student --where="create_time > '2019-04-16 00:00:00'" > /data/mysql/student.sql

  4. Percona归档工具pt-archiver

    pt-archiver  \

    --source h=127.0.0.1, u=root, p=123456, D=test, t=student \

    --dest h=127.0.0.1, P=3306,u=root,p=123456, D=test,t=student_tmp \

     --progress 50000 \

    --where "create_time > '2019-02-16 00:00:00'" \

    --bulk-insert \

    --statistics \

    --charset=UTF8 \

    --limit=50000 \

    --txn-size 1000  \

    --no-delete  

    参数说明:

      --source      #源数据库信息

      --dest    #目标数据库信息

      --progress 5000    #每处理5000行输出一次处理信息

      --where         #设置操作条件

      --bulk-insert    #批量插入数据到dest主机

      --statistics     #输出执行过程及最后的操作统计

      --charset=UTF8    #指定字符集为UTF8

      --limit=50000     #每次取1000行数据用pt-archive处理

      --txn-size 1000    #设置1000行为一个事务提交一次

      --no-delete      #不删除源数据

      --purge     #删除source数据库的相关匹配记录 

推荐阅读