本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
前提
我本次躺的坑是基于下面的环境的,并且是数据量比较小。如果非一样的条件请自行参考,当然可以参考一下我的思想。
环境
- 两台都是linux服务器,操作系统是centos
- 两台服务器中mysql数据库所操作的表结构相同
思想
首先我想用mysql中的outfile将表中的数据导出为txt格式的文件,然后打包使用scp发送到对应另一台服务器上,然后在通过load的infile导入文件形式导入txt文件的数据。
实践(如果有坑,请务必看到最后)
首先当然是确保你的数据库服务启动,由于不同的linux操作系统启动方法不同,这个就自行搜吧!接下来启动你的数据库吧
mysql -uroot -p
#会要求输入密码
使用对用操作的数据库如:stat
use stat
接下来对表进行导出操作,例如对表tools,然后将表导出的数据保存到/home/jie目录下,文件名也为tools
select * from tools into outfile "/home/jie/tools.txt";
如果表多的话可以将表使用tar打包成压缩包的形式传输,下面将form目录打包到/home/jie目录下的form.tar.gz文件
tar -zcvf /home/jie/form.tar.gz /home/jie/form
使用scp进行网络安全传输,文件或者刚才打包的东西
scp [参数] 本地文件 远程用户@远程IP地址:远程目录
# 之后会输入远程用户的密码
传输过来解压,下面是直接解压到当前目录下
tar -zxvf form.tar.gz
然后进行这台服务器的mysql数据库(同上面开始一样),导入数据对应表的数据,如tools表
load data infile "/home/jie/tools.txt" into table tools;
坑
问题一:
ERROR 1 (HY000): Can't create/write to file '/home/jie/tools.txt' (Errcode: 13)
这是在导出表中数据时的问题,出现这种错误你一定远程账户用的不是root,其实就是操作命令包含了路径,此远程用户对应的目录没有写权限。修改目录/home/jie的权限
sudo chmod -R 777 /home/jie
注意:权限一定要改回去,如果你的服务器比较重要是会出大问题的。
问题二:
ERROR 13 (HY000): Can't get stat of '/home/jie/tools.txt' (Errcode: 13)
这种问题出现在导入表时,也属于权限问题,看mysql中文手册的一段话:
出于安全原因,当读取位于服务器中的文本文件时, www.2cto.com 文件必须位于数据库目录中,或者是全体可读的。另外,要对服务器文件使用LOAD DATA INFILE,您必须拥有FILE权限。
解决:
load data local infile "/home/jie/tools.txt" into table tools;
注意:如果导入多张表的时要注意表之间的关系,然后选择导入顺序