问题
mysql只备份以下表中project_no为WS10145100290001的数据: acc_adapter.jzhy_batch_loan_apply:原始层进件信息 acc_adapter.jzhy_init_repay_schedule:原始层还款计划 acc_adapter.jzhy_loan_detail:合同终止状态 acc_adapter.jzhy_refund_confirm:退车信息 acc_loan.loan_apply:原始层数据还包括此表 acc_adapter.jzhy_repayment_info:还款信息 acc_adapter.jzhy_batch_redemption:代偿还款原始数据 acc_adapter.jzhy_rublease_mapping:转租映射关系表
方法
要备份这些表中 project_no
为 WS10145100290001
的数据,你可以使用 mysqldump
工具,它是一个命令行实用程序,用于生成数据库和表的 SQL 转储。但是,如果你只想通过 SQL 查询来导出这些数据,那么你将需要手动编写 SELECT ... INTO OUTFILE
语句。
不过,请注意,SELECT ... INTO OUTFILE
语句会将数据导出到服务器的文件系统中,并且MySQL用户需要有适当的文件权限来写入指定的目录。此外,出于安全原因,MySQL通常禁止将数据导出到服务器上的任意位置,你需要确保MySQL配置允许此操作,并且你指定的文件路径是安全的。
以下是如何为每个表编写 SELECT ... INTO OUTFILE
语句的示例。你需要将 /path/to/your/backup/directory/
替换为你希望保存备份文件的实际路径,并确保MySQL服务器对该路径有写权限。
-- acc_adapter.jzhy_batch_loan_apply
SELECT *
INTO OUTFILE '/path/to/your/backup/directory/jzhy_batch_loan_apply_backup.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM acc_adapter.jzhy_batch_loan_apply
WHERE project_no = 'WS10145100290001';
-- acc_adapter.jzhy_init_repay_schedule
SELECT *
INTO OUTFILE '/path/to/your/backup/directory/jzhy_init_repay_schedule_backup.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM acc_adapter.jzhy_init_repay_schedule
WHERE project_no = 'WS10145100290001';
-- acc_adapter.jzhy_loan_detail
SELECT *
INTO OUTFILE '/path/to/your/backup/directory/jzhy_loan_detail_backup.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM acc_adapter.jzhy_loan_detail
WHERE project_no = 'WS10145100290001';
-- acc_adapter.jzhy_refund_confirm
SELECT *
INTO OUTFILE '/path/to/your/backup/directory/jzhy_refund_confirm_backup.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM acc_adapter.jzhy_refund_confirm
WHERE project_no = 'WS10145100290001';
-- acc_loan.loan_apply
SELECT *
INTO OUTFILE '/path/to/your/backup/directory/loan_apply_backup.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM acc_loan.loan_apply
WHERE project_no = 'WS10145100290001';
-- acc_adapter.jzhy_repayment_info
SELECT *
INTO OUTFILE '/path/to/your/backup/directory/jzhy_repayment_info_backup.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM acc_adapter.jzhy_repayment_info
WHERE project_no = 'WS10145100290001';
-- acc_adapter.jzhy_batch_redemption
SELECT *
INTO OUTFILE '/path/to/your/backup/directory/jzhy_batch_redemption_backup.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM acc_adapter.jzhy_batch_redemption
WHERE project_no = 'WS10145100290001';
-- acc_adapter.jzhy_rublease_mapping
SELECT *
INTO OUTFILE '/path/to/your/backup/directory/jzhy_rublease_mapping_backup.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM acc_adapter.jzhy_rublease_mapping
WHERE project_no = 'WS10145100290001';
在执行这些语句之前,请确保:
-
你已经登录到MySQL服务器,并且使用的用户账户具有读取这些表以及写入到指定文件路径的权限。
-
/path/to/your/backup/directory/
是一个实际存在的目录,并且MySQL服务器进程对该目录有写权限。 -
project_no
字段确实存在于每个表中,并且你确实想要基于这个字段的值来过滤数据。
如果你更倾向于使用 mysqldump
来备份特定条件下的数据,那么这不是一个直接的选项,因为 mysqldump
通常用于备份整个数据库或表,而不是基于特定条件的数据。但是,你可以结合使用 mysqldump
和后续的 mysql
命令行工具来导出数据,并在本地进行过滤。
以下是使用 mysqldump
和 mysql
导出并过滤数据的步骤:
- 使用
mysqldump
导出整个表到 SQL 文件:
mysqldump -u [username] -p[password] [database_name] [table_name] > [table_name]_full_backup.sql
替换 [username]
、[password]
、[database_name]
和 [table_name]
为实际的值。注意 -p
和密码之间没有空格。
- 使用
mysql
和grep
过滤出特定project_no
的数据:
mysql -u [username] -p[password] [database_name] -e "SELECT * FROM [table_name] WHERE project_no = 'WS10145100290001';" | grep -v "mysql" > [table_name]_filtered_backup.sql
这将执行 SQL 查询并将结果输出到 [table_name]_filtered_backup.sql
文件中。grep -v "mysql"
用于移除查询命令本身的输出。
- 重复上述步骤,为每个表创建一个过滤后的备份。
请注意,这种方法可能不会保留原始数据的所有结构和特性(例如,索引、触发器、存储过程等),因为它仅导出数据本身。如果你需要完整的表结构,你需要单独使用 mysqldump
来备份整个表,然后在本地处理数据以过滤出你需要的行。
在实际操作中,如果你需要定期或频繁地进行此类操作,编写脚本自动化这个过程可能是个好主意。这将减少错误并提高备份的效率。