使用 mysqldump 备份 MySQL

基本用法

mysqldump是一个客户端应用程序,可用于进行逻辑备份。它将生成必要的 SQL 语句来重现原始数据库。

备份

以下语句是 mysqldump 的一些常见用法:

  1. mysqldump -u username -p database_name [table_name] > dump.sql
  2. mysqldump -u username -p --databases db1_name db2_name > dump.sql
  3. mysqldump -u username -p --all-databases > dump.sql

第一个示例用于备份单个数据库。如果您需要备份一些特定的表而不是整个数据库,请写下它们的名称,以空格分隔。

通过该--databases选项,您可以备份两个或多个数据库,它们的名称必须以空格分隔。

要备份 MySQL 服务器中的所有数据库,只需附加该--all-databases选项即可。

dump.sql文件不包含创建数据库 SQL 语句。如果您需要它,请使用-B选项添加它。如果您使用mysqldump--databases选项运行,则这是不必要的--all-databases

使用该选项也可以在备份数据库时忽略表--ignore-tables

$ mysqldump -u username -p database_name --ignore-tables=database_name.table1 > database_name.sql

如果您需要忽略多个数据库,只需根据需要多次使用该选项。

$ mysqldump -u root -p database_name --ignore-table=database_name.table1 --ignore-table=database_name.table2 > database_name.sql

库表架构备份

如果您只需要备份没有数据的数据库架构,请使用以下选项运行 mysqldump --no-data

$ mysqldump -u username -p database_name --no-data > dump.sql

mysqldump您还可以在运行时使用--databases和选项备份架构--all-databases

$ mysqldump -u username -p --all-databases --no-data > dump.sql

$ mysqldump -u username -p --databases db1_name db2_name --no-data > dump.sql

数据还原

要恢复文件中的数据库dump.sql,请运行以下命令:

$ mysqldump -u root -p < dump.sql

如果您需要从完整备份中恢复单个数据库,您可以通过运行以下任何语句来完成:

$ mysqldump -u root -p -o database_name < dump.sql

$ mysqldump -u root -p --one-database database_name < dump.sql

在这两种情况下,数据库都必须存在于您的 MySQL 服务器中,因为它只会恢复模式和数据。

指定条件备份

如果您需要创建包含符合条件的数据的备份,您可以使用WHERE带有 mysqldump 的子句。

您可以使用单个 where 条件:

$ mysqldump database_name table_name --where="id > 500" > dump.sql

或多个条件:

$ mysqldump database_name users --where="id > 500 and disabled = 0" > dump.sql

mysqldump.guru网站中的此处所述。

例如,在具有以下模式的数据库中,该数据库是从Moviet数据集构建的:

电影网数据库

如果您想备份在特定国家(如墨西哥)制作的电影,一种方法是运行带有子句的 mysqldump WHERE

$ mysqldump -u root -p movienet movies --where=”country = 22” > dump.sql

22是这个特定数据库中的墨西哥,可以通过执行以下 SQL 语句来获取这些值:

select movies.movie_id, movies.title, countries.name as country from movies inner join countries on movies.country = countrie s.country_id and movies.country = '22';

+-----------+-----------------------------------------------------------+---------+ | movie_id | title | country | +-----------+-----------------------------------------------------------+---------+ | tt0047501 | Sitting Bull (1954) | Mexico | | tt0049046 | Canasta de cuentos mexicanos (1956) | Mexico | | tt0076336 | Hell Without Limits (1978) | Mexico | | tt0082048 | El barrendero (1982) | Mexico | | tt0082080 | Blanca Nieves y sus 7 amantes (1980) | Mexico | | tt0083057 | El sexo de los pobres (1983) | Mexico | | tt0110185 | El jardín del Edén (1994) | Mexico | | tt0116043 | De jazmín en flor (1996) | Mexico | | tt0121322 | El giro, el pinto, y el Colorado (1979) | Mexico | | tt0133354 | Algunas nubes (1995) | Mexico | | tt0207055 | La risa en vacaciones 4 (TV Movie 1994) | Mexico | | tt0208889 | To and Fro (2000) | Mexico | | tt0211878 | La usurpadora (TV Series 1998– ) | Mexico | | tt0220306 | El amarrador 3 (1995) | Mexico | | tt0229008 | El vampiro teporocho (1989) | Mexico |

跳过指定数据库

生成备份时没有mysqldump跳过数据库的选项,但这里有一个适合您的解决方案:

DATABASES_TO_EXCLUDE="db1 db2 db3" EXCLUSION_LIST="'information_schema','mysql'" for DB in `echo "${DATABASES_TO_EXCLUDE}"` do EXCLUSION_LIST="${EXCLUSION_LIST},'${DB}'" done SQLSTMT="SELECT schema_name FROM information_schema.schemata" SQLSTMT="${SQLSTMT} WHERE schema_name NOT IN (${EXCLUSION_LIST})" MYSQLDUMP_DATABASES="--databases" for DB in `mysql -u username -p -ANe"${SQLSTMT}"` do MYSQLDUMP_DATABASES="${MYSQLDUMP_DATABASES} ${DB}" done MYSQLDUMP_OPTIONS="--routines --triggers" mysqldump -u username -p ${MYSQLDUMP_OPTIONS} ${MYSQLDUMP_DATABASES} > MySQLDatabases.sql

上面的 BASH 脚本将生成您的 MySQL 服务器的备份,不包括变量中列出的information_schema和数据库,以及您在变量中选择的数据库。mysql``EXCLUSION_LIST``DATABASES_TO_EXCLUDE

不要忘记将要排除的数据库添加到DATABASES_TO_EXCLUDE变量中,替换和命令username中的, 并将所需的选项添加到变量中。mysql``mysqldump``MYSQLDUMP_OPTIONS

安全注意事项

一些常见问题是关于如何从完整备份进行部分恢复。例如,当您使用 备份数据库时mysqldump,您将获得用于创建数据库架构和从备份中插入数据的语句。

如果您只需要架构,则可以使用 --no-data 选项运行 mysqldump。但是如果你需要从一个完整的备份中恢复特定数据库的模式,我发现了一个有趣的解决方案:

cat dump.sql | grep -v ^INSERT | mysql -u username -p

上面的命令将恢复数据库的模式,跳过用于插入数据的 SQL 语句。当您备份单个数据库时,它运行良好,但没有理由使用它,因为您可以使用该选项获取模式--no-data,而不是删除插入。

如果您尝试使用包含服务器中所有数据库的备份运行此命令,会发生什么情况?您必须小心,因为这会尝试覆盖数据库中的系统模式,mysql这是危险的。此数据库存储身份验证详细信息并覆盖数据将使您无法访问您的服务器。

如果您不需要备份mysql数据库,请mysqldump使用选项运行以指定您需要哪些数据库或使用跳过数据库--databases部分中共享的脚本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youtian.L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值