在DBA的工作当中导数据可谓是要经常要做的一件事,在数据量小的时候随随便便整库更新也是无所谓的。但是单数据量达到百G那整库更新起来可谓是十分费力,而且测试库的磁盘也不好。因此,经常发生的应该是单表的迁移或拷贝。
导出数据的(工具/方法)有很多:
想必上面的工具或方法多多少少大家都有尝试过。
一般在什么样的情况下应该使用哪种工具会比较好呢?
有许多人可能都知道数据小就用逻辑导出呗(mysqldump),如果数据大我们就使用物理导出呗。
那我就想问怎么样算是数据量大,怎么样算数据量小呢?
有很多人会直接去查看表的行数来定,如:
1 | SELECT COUNT ( * ) FROM xx ; |
还有的人会使用操作系统的命令来查看磁盘数据的大小,如:
1 | ls – lh xxx . ibd |
其实比较正确的方法是使用数据字典information_schema.tables
1 2 3 4 5 6 7 | SELECT table_name , data_length / 1024 / 1024 AS ‘data_length(MB)’ , index_length / 1024 / 1024 AS ‘index_length(MB)’ , ( data_length + index_length ) / 1024 / 1024 AS ‘total(MB)’ FROM information_schema . tables WHERE table_schema = ‘test’ AND table_name = ‘t1’ ; |
之后,我们会模拟三种在不同场景下如何选择表迁移的方法:mysqlpump、xtrabackup以及复制*.ibd的方法。
我们这边主要的目的是不是叫你如何使用这些工具,因为这些工具在网上能找到一大片使用的方法。我们的目的在于如何选择使用它(当然会附带完整的例子)
我使用的是Percona Server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [ root @ centos7 / ] # mysql -uHH -p Enter password : Welcome to the MariaDB monitor . Commands end with ; or \ g . Your MySQL connection id is 8 Server version : 5.7.10 – 3 – log Percona Server ( GPL ) , Release 3 , Revision 63dafaf Copyright ( c ) 2000 , 2015 , Oracle , MariaDB Corporation Ab and others . Type ‘help;’ or ‘\h’ for help . Type ‘\c’ to clear the current input statement . HH @ ( none ) 18 : 10 > SELECT @ @ VERSION ; + — — — — — — — + | @ @ VERSION | + — — — — — — — + | 5.7.10 – 3 – log | + — — — — — — — + 1 row in set ( 0.00 sec ) |
文章转载来自:trustauth.cn
上一篇:MySQL多层级结构-树搜索
下一篇:阿里云 Python SDK 管理安全组