1. 程式人生 > 實用技巧 >【MySQL Database】資料遷移--mydumper

【MySQL Database】資料遷移--mydumper

[root@wallet01 ~]# yum install -y glib2-devel mysql-devel zlib-devel \
pcre-devel openssl-devel cmake

[root@wallet01 ~]# git clone https://github.com/maxbube/mydumper.git
Initialized empty Git repository in /root/mydumper/.git/
error:  while accessing https://github.com/maxbube/mydumper.git/info/refs
fatal: HTTP request failed

[root@wallet01 ~]# yum update -y nss curl libcurl

[root@wallet01 ~]# git clone https://github.com/maxbube/mydumper.git
Initialized empty Git repository in /root/mydumper/.git/
remote: Enumerating objects: 1185, done.
remote: Total 1185 (delta 0), reused 0 (delta 0), pack-reused 1185
Receiving objects: 100% (1185/1185), 983.01 KiB | 573 KiB/s, done.
Resolving deltas: 100% (724/724), done.

[root@wallet01 ~]# cd mydumper
[root@wallet01 mydumper]# cmake .
[root@wallet01 mydumper]# make
[root@wallet01 mydumper]# make install

[root@wallet01 ~]# mydumper --help

  -B, --database              需要備份的資料庫,不指定則備份全部庫
  -T, --tables-list           需要備份的表,多表用逗號隔開
  -O, --omit-from-file        File containing a list of database.table entries to skip, one per line (skips before applying regex option)
  -o, --outputdir             備份目錄
  -s, --statement-size        Attempted size of INSERT statement in bytes, default 1000000
  -r, --rows                  Try to split tables into chunks of this many rows. This option turns off --chunk-filesize
  -F, --chunk-filesize        Split tables into chunks of this output file size. This value is in MB
  -c, --compress              壓縮備份檔案
  -e, --build-empty-files     Build dump files even if no data available from table
  -x, --regex                 Regular expression for 'db.table' matching
  -i, --ignore-engines        Comma delimited list of storage engines to ignore
  -N, --insert-ignore         Dump rows with INSERT IGNORE
  -m, --no-schemas            不備份表結構,僅備份表資料
  -d, --no-data               不備份表資料,僅備份表結構
  -G, --triggers              備份與表關聯的觸發器
  -E, --events                備份資料庫的事件
  -R, --routines              備份資料庫的儲存過程和函式
  -W, --no-views              不備份資料庫的檢視
  -k, --no-locks              Do not execute the temporary shared read lock.  WARNING: This will cause inconsistent backups
  --no-backup-locks           Do not use Percona backup locks
  --less-locking              Minimize locking time on InnoDB tables.
  -l, --long-query-guard      Set long query timer in seconds, default 60
  -K, --kill-long-queries     Kill long running queries (instead of aborting)
  -D, --daemon                Enable daemon mode
  -I, --snapshot-interval     Interval between each dump snapshot (in minutes), requires --daemon, default 60
  -L, --logfile               Log file name to use, by default stdout is used              
  --use-savepoints            Use savepoints to reduce metadata locking issues, needs SUPER privilege
  --lock-all-tables           Use LOCK TABLE for all, instead of FTWRL
  --trx-consistency-only      Transactional consistency only
  --complete-insert           Use complete INSERT statements that include column names
  -h, --host                  The host to connect to
  -u, --user                  Username with the necessary privileges
  -p, --password              User password
  -a, --ask-password          Prompt For User password
  -P, --port                  TCP/IP port to connect to
  -S, --socket                UNIX domain socket file to use for connection
  -t, --threads               備份使用的執行緒數量,預設是 4
  -C, --compress-protocol     Use compression on the MySQL connection
  -V, --version               Show the program version and exit
  -v, --verbose               Verbosity of output, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2

備份全部庫:除了information_schema與performance_schema之外的庫都會被備份
[mysql@wallet01 ~]$ mydumper -u root -p abcd.1234 -o /home/mysql/backup

備份指定的庫 
[mysql@wallet01 ~]$ mydumper -u root -p abcd.1234 -B soe -o /home/mysql/backup
[mysql@wallet01 ~]$ cd backup
[mysql@wallet01 backup]$ ls -lh
total 732M
-rw-rw-r-- 1 mysql mysql  141 Feb  1 09:08 metadata
-rw-rw-r-- 1 mysql mysql 1.4K Feb  1 09:07 soe.customer-schema.sql
-rw-rw-r-- 1 mysql mysql 172M Feb  1 09:08 soe.customer.sql
-rw-rw-r-- 1 mysql mysql  804 Feb  1 09:07 soe.district-schema.sql
-rw-rw-r-- 1 mysql mysql  11K Feb  1 09:07 soe.district.sql
-rw-rw-r-- 1 mysql mysql  481 Feb  1 09:07 soe.history-schema.sql
-rw-rw-r-- 1 mysql mysql  19M Feb  1 09:07 soe.history.sql
-rw-rw-r-- 1 mysql mysql  431 Feb  1 09:07 soe.item-schema.sql
-rw-rw-r-- 1 mysql mysql 7.9M Feb  1 09:07 soe.item.sql
-rw-rw-r-- 1 mysql mysql  304 Feb  1 09:07 soe.new_order-schema.sql
-rw-rw-r-- 1 mysql mysql 1.1M Feb  1 09:07 soe.new_order.sql
-rw-rw-r-- 1 mysql mysql  615 Feb  1 09:07 soe.order_line-schema.sql
-rw-rw-r-- 1 mysql mysql 204M Feb  1 09:08 soe.order_line.sql
-rw-rw-r-- 1 mysql mysql  525 Feb  1 09:07 soe.orders-schema.sql
-rw-rw-r-- 1 mysql mysql  14M Feb  1 09:07 soe.orders.sql
-rw-rw-r-- 1 mysql mysql   66 Feb  1 09:07 soe-schema-create.sql
-rw-rw-r-- 1 mysql mysql 1.2K Feb  1 09:07 soe.stock-schema.sql
-rw-rw-r-- 1 mysql mysql 316M Feb  1 09:08 soe.stock.sql
-rw-rw-r-- 1 mysql mysql  730 Feb  1 09:07 soe.warehouse-schema.sql
-rw-rw-r-- 1 mysql mysql 1.2K Feb  1 09:07 soe.warehouse.sql

備份指定的表
[mysql@wallet01 ~]$ mydumper -u root -p abcd.1234 -B soe -T customer -o /home/mysql/backup
[mysql@wallet01 ~]$ cd backup
[mysql@wallet01 backup]$ ls -lh
total 172M
-rw-rw-r-- 1 mysql mysql  141 Feb  1 09:20 metadata
-rw-rw-r-- 1 mysql mysql 1.4K Feb  1 09:20 soe.customer-schema.sql
-rw-rw-r-- 1 mysql mysql 172M Feb  1 09:20 soe.customer.sql
-rw-rw-r-- 1 mysql mysql   66 Feb  1 09:20 soe-schema-create.sql

備份多表
[mysql@wallet01 ~]$ mydumper -u root -p abcd.1234 -B soe -T customer,orders -o /home/mysql/backup
[mysql@wallet01 ~]$ cd backup
[mysql@wallet01 backup]$ ls -lh
total 186M
-rw-rw-r-- 1 mysql mysql  141 Feb  1 09:24 metadata
-rw-rw-r-- 1 mysql mysql 1.4K Feb  1 09:24 soe.customer-schema.sql
-rw-rw-r-- 1 mysql mysql 172M Feb  1 09:24 soe.customer.sql
-rw-rw-r-- 1 mysql mysql  525 Feb  1 09:24 soe.orders-schema.sql
-rw-rw-r-- 1 mysql mysql  14M Feb  1 09:24 soe.orders.sql
-rw-rw-r-- 1 mysql mysql   66 Feb  1 09:24 soe-schema-create.sql

僅備份表結構
[mysql@wallet01 ~]$ mydumper -u root -p abcd.1234 -B soe -T customer -d -o /home/mysql/backup
[mysql@wallet01 ~]$ cd backup
[mysql@wallet01 backup]$ ls -lh
total 12K
-rw-rw-r-- 1 mysql mysql  141 Feb  1 09:25 metadata
-rw-rw-r-- 1 mysql mysql 1.4K Feb  1 09:25 soe.customer-schema.sql
-rw-rw-r-- 1 mysql mysql   66 Feb  1 09:25 soe-schema-create.sql

僅備份表資料
[mysql@wallet01 ~]$ mydumper -u root -p abcd.1234 -B soe -T customer -m -o /home/mysql/backup
[mysql@wallet01 ~]$ cd backup
[mysql@wallet01 backup]$ ls -lh
total 172M
-rw-rw-r-- 1 mysql mysql  141 Feb  1 09:27 metadata
-rw-rw-r-- 1 mysql mysql 172M Feb  1 09:27 soe.customer.sql

[root@wallet01 ~]# myloader --help

  -d, --directory                   備份目錄
  -q, --queries-per-transaction     Number of queries per transaction, default 1000
  -o, --overwrite-tables            如果表已經存在則刪除
  -B, --database                    還原到另一個數據庫,例如備份A庫,還原為B庫
  -s, --source-db                   需要還原的資料庫(備份檔案中)
  -e, --enable-binlog               Enable binary logging of the restore data
  -h, --host                        The host to connect to
  -u, --user                        Username with the necessary privileges
  -p, --password                    User password
  -a, --ask-password                Prompt For User password
  -P, --port                        TCP/IP port to connect to
  -S, --socket                      UNIX domain socket file to use for connection
  -t, --threads                     還原使用的執行緒數量,預設是 4
  -C, --compress-protocol           Use compression on the MySQL connection
  -V, --version                     Show the program version and exit
  -v, --verbose                     Verbosity of output, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
  
還原全部庫       
[mysql@wallet01 ~]$ myloader -u root -p abcd@1234 -o -d /home/mysql/backup 

還原指定的庫
[mysql@wallet01 ~]$ myloader -u root -p abcd@1234 -o -s soe -d /home/mysql/backup 

備份的soe庫還原為tpcc庫
[mysql@wallet01 ~]$ myloader -u root -p abcd@1234 -o -B tpcc -s soe -d /home/mysql/backup

還原指定的表
[mysql@wallet01 ~]$ mysql -uroot -pabcd@1234 soe < /home/mysql/backup/soe.customer-schema.sql

[mysql@wallet01 ~]$ mysql -uroot -pabcd@1234 soe < /home/mysql/backup/soe.customer.sql