还原压缩的 MySQL 转储时禁用二进制日志记录

nel*_*aro 6 mysql replication mysqldump

我正忙于构建现有数据库的从属。我不希望它在将从属设备与主设备处于相同状态之前为我导入的数据构建 bin 日志。

这主要是为了节省导入 100 G 数据的空间。

mysqldump somelargedb | gzip > /somewhere/withspace/dump/somelargedb.sql.gz
Run Code Online (Sandbox Code Playgroud)

未压缩的此文件在 100 Gb 范围内。压缩后大约为 2Gb

nel*_*aro 6

我找到了这个答案。

https://geert.vanderkelen.org/2009/disabling-binary-logging-when-restoring-a-mysql-dump/

bash $ (echo "SET SESSION SQL_LOG_BIN=0;"; cat dump.sql) > dump_nobinlog.sql
Run Code Online (Sandbox Code Playgroud)

更好的解决方案如下。摘自上述网站的评论。但由于数据量相当大,我不想再花几个小时等待数据导出。这也不包括转储时文件的压缩。

$ echo "SET SESSION SQL_LOG_BIN=0;" > dumpfile   
$ mysqldump .... >> dumpfile
Run Code Online (Sandbox Code Playgroud)

我对其进行了如下调整。

echo "SET SESSION SQL_LOG_BIN=0;" | gzip | zcat - /somewhere/withspace/dump/somelargedb.sql.gz | mysql -u root -p somelargedb
Run Code Online (Sandbox Code Playgroud)


小智 6

可以通过以下方式完成 .gz 转储:

(echo "SET SESSION SQL_LOG_BIN=0;"; gzip -dc dump.sql.gz) | mysql
Run Code Online (Sandbox Code Playgroud)

或者,如果您直接从远程服务器复制数据库:

(echo "SET SESSION SQL_LOG_BIN=0;"; mysqldump --host your_host --verbose --compress my_database) | mysql my_database
Run Code Online (Sandbox Code Playgroud)

这意味着 mysqldump 和 mysql 的用户和密码都添加在 .cnf 文件中(例如在~/.my.cnf