部署徐州项目过程中,需要把公司服务器上的数据导入到客户服务器中,导出的sql脚本文件单个5G+(存在大量附件),Navicat导入超时报错。所以想其他办法。
经过查询相关资料发现可以通过MySQL的命令窗口执行,尝试过程如下,目前仅针对windows及windowsserver操作系统。
1、找到mysql在本机中的安装位置,若不知道安装位置,可以在mysql数据库下执行查询语句:
select @@basedir as basePath from dual
2、找到对应位置,C:\Program Files\MySQL\MySQL Server 8.0\bin 执行cmd命令,进入mysql命令行窗口。
执行命令:mysql -u root -p ,若navicat可以连接成功,此处报错“ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)”。
首先确认密码是否输入错误,若密码确认无误,第二在navicat中查看连接权限,执行sql:
select host,user from user;
更新root用户权限,执行sql:
update user set host = '%' where user = 'root';
flush privileges; //刷新权限
3、正常登入数据库以后,依次执行一下命令,修改编码。
set character_set_client=utf8;
set character_set_connection=utf8;
set character_set_database=utf8;
set character_set_results=utf8;
set character_set_server=utf8;
注意:一次性生效,重启还原。
4、若导入的脚本中存在超大字段,导入会报错。mysql的max_allowed_packet配置的默认值设置太小,但是max_allowed_packet 最大值是1G(1073741824),如果设置超过1G,查看最终生效结果也只有1G。
设置对应参数:
set global max_allowed_packet=1000000000;
set global net_buffer_length=100000;
SET GLOBAL interactive_timeout=28800000;
SET GLOBAL wait_timeout=28800000;
注意:sql命令执行上述4操作后,若重启mysql,设置会失效,需重新设置,也可以在my.ini文件中设置,
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini ,ProgramData文件夹为隐藏文件夹,需要设置显示隐藏文件夹才能找到。
5、执行脚本文件
mysql 容器内部运行如下命令后回车,输入数据库密码进入mysql数据库
mysql -u root -p
切换到对应的数据库下,例如数据库arm
use arm ; 注意分号
运行如下命令执行存放在mysql容器内home/tmp/sqlfile 下的 SQL 文件,路径随意,根据自己放的地方写即可。
source /home/tmp/sqlfile/video_table.sql
docker容器和windows命令一样。
6、 建议mysql数据库安装完毕后转移到单独大容量磁盘 ,mysql日志文件过多影响磁盘容量,可以执行RESET MASTER 命 令清除。
7、这个时候,就等待大文件开始执行就可以啦,根据服务器的性能,执行速度略有差异,总之还是很快的~以上就是执行大容量脚本的方法