106  
查询码:00000802
Mysql超大文本脚本执行
作者: 马文博 于 2021年12月23日 发布在分类 / 人防组 / 人防后端 下,并于 2021年12月23日 编辑
mysql 脚本执行

部署徐州项目过程中,需要把公司服务器上的数据导入到客户服务器中,导出的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、这个时候,就等待大文件开始执行就可以啦,根据服务器的性能,执行速度略有差异,总之还是很快的~以上就是执行大容量脚本的方法














 推荐知识

 历史版本

修改日期 修改人 备注
2021-12-23 17:44:52[当前版本] 马文博 创建版本

 附件

附件类型

PNGPNG

知识分享平台 -V 4.8.7 -wcp