mysql这个垃圾迁移数据费劲半天
mysql垃圾得很! 对于一些小系统还可以。大型系统自己找麻烦--必须有高昂的人工费!
没有高昂的人工(必须有好的程序员和工程师才能解决一些复杂的问题),构建基于大量数据的应用,非常麻烦。
而这些费用,如果用于采购oracle之类的,也许一次只要支付几个月人工就可以解决了。
例如用铁钎挖个小洞是不是很好用?还可以吧。
如果用铁钎挖一个10米深的石洞?可以吗?可以,不过你要付出很多的人工的!例如找很多工人,或者雇佣大力士之类的
俗话不会错的:便宜基本没有好货!
你所经常开发的应用都是基于互联网的吗?如果不是,那么需要谨慎考虑使用mysql
不过这些都是题外话,我们还是来说MYSQL的少量数据迁移吧!
mysql,对于dba而言非常麻烦,尤其是迁移数据的时候,如果数据是几百个G,或者上T之后。
就算不迁移几百个G,迁移几十个M的数据,也是颇为费劲!
--
它让我们非常想念oracle.
开发的时候,有一个要求,要传输20万数据。
用了source,一点也不好用! 各种设置还是和蜗牛差不多!(说实话,我对于mysql基本属于门外汉)
于是只好采用 select into + load data的方式
(版本 8.0.x)
不过在执行前,得先设置
secure_file_priv=''
这样设置的意思是,可以指定任意目录。
如果不再my.cnf等配置参数指定,则默认是NULL,表示不可以导出导入。
secure_file_priv得官方解释是:
The secure_file_priv system variable limits import and export operations to a specific
directory. Create a directory whose location can be specified as the value of that variable:
mkdir mysql-files
Grant directory user and group ownership to the mysql user and mysql group, and set the
directory permissions appropriately:
chown mysql:mysql mysql-files
chmod 750 mysql-files
这个参数的作用类似于oracle的directory概念,不过oracle这个值是非常灵活的。
配置好之后:
源库:
SELECT * INTO OUTFILE '\data\dump\data.txt' FIELDS TERMINATED BY ',' FROM c117_scores;
目标库:
LOAD DATA INFILE 'e:\\temp\\data.txt' INTO TABLE c117_scores FIELDS TERMINATED BY ',';
速度是快了不少!
--
所以迁移几个表的时候得准备一套脚本,否则让您够受得!
导入几张表的数据,在开发和维护中是很常见的!
可以考虑开发一个小工具用于迁移!不过好像navicate,sqlyog有类似功能!
但依然不够好用,这种专业工具最好稍微配置下,可以批处理执行!