我一直在尝试使用管道运算符通过 7z 压缩我的 mysqldump 输出(我已经看到这问题,但其答案使用 xz 而不是 7z)。这是我到目前为止所尝试过的:
mysqldump -u root -p Linux_Wiki | 7z > backup.sql.7z
和:
mysqldump -u root -p Linux_Wiki | 7za > backup.sql.7z
和:
mysqldump -u root -p Linux_Wiki | '7za a' > backup.sql.7z
和:
mysqldump -u root -p Linux_Wiki | `7za a` > backup.sql.7z
所有四个都失败了,但我确信我已经p7zip
安装了,因为最后一次尝试给出了以下输出:
Enter password: bash: 7-Zip: command not found
mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect
答案1
首先将密码存储在.my.cnf
用户主目录中调用的文件中,格式如下:
[mysqldump]
password=secret
然后,您必须使用mysqldump
不带-p
标志的方法来转储 mysql 数据库(它现在使用文件中的密码):
mysqldump -u root database | 7z a -si backup.sql.7z
- 添加到存档
a
的标志7z
-si
表示从标准输入(从匿名管道)读取。
答案2
有些人可能不赞成这种做法,但您可以将密码放在命令行上,如下所示:
mysqldump -u root -pmyrootpassword database | 7z a -si backup.sql.7z
它必须紧接在-p
论证之后。
答案3
如果您想使用带有 7zip 算法的管道,您应该考虑使用 xz 而不是 7z。
xz 使用与 7z 完全相同的算法,但它可以像 gzip(或 bzip2)一样使用。 xz 和 7zip 是同一作者设计的。
mysqldump -u root -p Linux_Wiki | xz -9 > backup.sql.xz
7zip 的 GUI 可以识别 xz。