我正遭受 mysqldump/mariadb-dump 速度缓慢的困扰。
我发现禁用autocommit, unique_checks and foreign_key_checks
提升导入性能。
我通过在前面dump.sql
添加
SET autocommit=0;SET unique_checks=0;SET foreign_key_checks=0;
并附加
COMMIT;SET unique_checks=1;SET foreign_key_checks=1;
直到它的结束。
附加很简单,但是在添加时,我需要在所消耗的时间和空间之间做出妥协。
前面加上
sed -i '0,/^/s//SET autocommit=0;SET unique_checks=0;SET foreign_key_checks=0;/' dump.sql
进行大型转储可能需要花费大量时间,但它会创建一个文件。
cat <(echo "SET autocommit=0;SET unique_checks=0;SET foreign_key_checks=0;") dump.sql <(echo "COMMIT;SET unique_checks=1;SET foreign_key_checks=1;") > new-dump.sql"
速度很快,但它会创建另一个转储文件,因此占用大量空间(即使它只是临时的)
在创建转储时,是否可以指示mysqldump/maridb-dump
在转储前面添加和附加自定义文本?
echo
在命令之前和之后使用mariadb-dump
,然后将输出重定向到文件中,至少应该可以与 bash 一起使用:当您将输出通过管道传输到远程服务器或其他程序时,这也有效
gzip
。我更喜欢使用 bash 脚本进行大量导入。它很简单而且非常有用,尤其是在副本上,您可以
start slave/replica
在还原完成后运行它。可以添加更多命令,如
net_buffer_length
或max_allowed_packet
等等。它在终端上输出恢复开始和结束的时间。
Bash 脚本
编辑问题是关于创建数据库转储,而不是将其加载到数据库中
我还是喜欢使用更有效的脚本,它可以根据需要轻松调整
它将显示类似