mysql大数据迁移,简单步骤

M级别数据迁移(几百M的数据大小)


本地环境的修改:
一、修改php.ini文件。
cmd+shift+g (mac快捷键,windows没试过)  输入 /etc/php.ini 找到php.ini
找到php.ini搜索这3个地方
1、查找post_max_size,指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值,默认为8M,看你自己需要进行改变。
2、查找File Uploads,首先确认file_uploads = on ;是否允许通过HTTP上传文件的开关,默认为ON即是开。 upload_tmp_dir ;
查找upload_max_filesize ;即允许上传文件大小的最大值。默认为2M。
3、如果要上传>8M的文件,那么只设置上述四项还不定一定可以。最好对下面的参数也进行设置:
查找max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒。
max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒 。
memory_limit = 8M ;每个PHP页面所吃掉的最大内存,默认8M。
4.重启mysql :
sudo /Library/StartupItems/MySQLCOM/MySQLCOM restart
sudo apachectl restart
然后重新登录phpmyadmin就可以了

二、修改/phpmyadmin/import.php文件。
用写字板打开import.php文件:
1、查找$memory_limit,默认为$memory_limit = 2*1024*1024;自己修改。
2、下边三四行的位置有同样的语句,自己修改。


服务器环境(lnmp为例)mysql上传文件大小限制 详细设置步骤:

命令行进入服务器后:

命令行输入:

```find / -name php.ini```

显示查找结果如下:(时间有点长,稍等一下就出来了)

```usr/local/php/etc/php.ini```

命令行输入:

```cd usr/local/php/etc/```

```ls```

看到有 php.ini 这个文件,用 vi 编辑 此文件

``` vi php.ini```

找到 post_max_size 设置为 100M

同样 找到 upload_max_filesize 设置为 100M

(注意:找到 对应字段时,按 键盘的字母键 i ,进入编辑模式,用上下左右箭头控制光标位置,设置为100M)

设置完后 按 键盘ESC 键退出编辑模式,然后按 SHIFT+: ,输入wq,回车(保存退出)。

修改后要重启php才能生效,这里的重启并不是重启nginx

```/etc/init.d/php-fpm restart```

(如果装的是php-cgi就重启php-cgi,如果装的是php-fpm就重启php-fpm)

或者整个lnmp重启也行:

```/root/lnmp restart```

这样再次就设置成功了

补充,本地测试的时候成功了,服务器上传一个50M的 .sql 还是出现错误提示:

没有接收到要导入的数据。可能是文件名没有提交,也可能是文件大小超出 PHP 限制。

这可咋办呀?

在phpmyadmin导入管理页面,发现有个这样的按钮:


大部分童鞋这个后面可能有个提示:没有可选择上传的文件,这就好办了,把需要上传的 .sql文件用ftp工具上传到 phpmyadmin 的upload 目录下,然后再导入:

```find / -name phpmyadmin```

// 如果你的phpmyadmin 文件名改了,就要输入你改过以后的名字 比如:```find / -name pma```

进入所显示的路径

```ls``` 看到有个upload文件夹
然后 在ftp工具里,把 xxx.sql 导入到 这个upload文件夹的下面,然后在phpmyadmin 的 导入管理界面 选择此文件 进行服务器端导入了,


经过测试成功了,还有别的疑问欢迎讨论区留言,作者会第一时间解决

-------------------------------------------------
G级别数据迁移


最近有个需求,要把机器a上的一个数据库迁移到机器b上,这个数据库的数据有100多个G。所以,果断抛弃用mysqldump的方法来迁移。这时候想到的就是直接复制文件来做迁移。
于是我按照网上的说法,步骤如下:
一、把机器b的MySQL停掉。
二、把机器a上要迁移的库的整个目录复制到机器b的mysql data目录下。
三、修改目录权限为700,修改文件权限为660,并修改他们的所属用户和所属组为mysql。
四、再启动机器b的mysql。
操作完成后,我进入机器b的mysql,此时,执行show databases可以看到要迁移的数据库。然后执行use databasename,再执行show tables,也可以看到所有的表。但是问题来了,我执行select * from table limit 10,这时候却报错了,提示表不存在。
所以,我们大致可以指定mysql的工作机制,show databases和show tables时,mysql其实是去目录下扫描,但执行select这些操作的时候,mysql优化器会去information_schema.TABLES 这个表里面获取信息。由于我们是直接复制文件过去,所以,这个表里面是没有信息的,所以就会提示表不存在。
知道了这点之后,我修改了上述步骤:
一、在机器b上,创建需要的database
二、在该database建好所有的表。
三、把机器b的mysql停掉。
四、到机器b上,刚才建的那个数据库的目录下,把所有的(.ibd)文件删除掉。
五、把机器a上,对应数据库目录下所有的(.ibd)文件复制到机器b上,修改文件的权限。
六、启动机器b的mysql。
这时候再连接上b的mysql,就可以看到所有的数据了。

你可能感兴趣的:(mysql)