数据导入导出
引言 提出问题 在使用MySQL过程中,经常需要: 如何备份数据库? 如何将Excel数据导入MySQL? 如何将MySQL数据导出为Excel或CSV? 如何迁移数据到另一台服务器? 测试环境如何快速导入生产数据? 这就是数据导入导出(Import/Export)的核心技能! mysqldump:数据备份工具 基础语法 mysqldump [options] database [tables] > backup.sql 备份单个数据库 # 备份整个数据库 mysqldump -u root -p mydb > mydb_backup.sql # 执行后,输入密码 Enter password: **** # 查看备份文件 ls -lh mydb_backup.sql # -rw-r--r-- 1 user staff 1.2M Jan 15 10:30 mydb_backup.sql 备份单张表 # 备份指定表 mysqldump -u root -p mydb users > users_backup.sql # 备份多张表 mysqldump -u root -p mydb users orders > tables_backup.sql 备份多个数据库 # 备份多个数据库 mysqldump -u root -p --databases db1 db2 db3 > multi_db_backup.sql 备份所有数据库 # 备份所有数据库(包括系统库) mysqldump -u root -p --all-databases > all_databases_backup.sql 常用选项 # 完整备份命令(推荐) mysqldump -u root -p \ --single-transaction \ # 一致性快照(InnoDB) --routines \ # 包含存储过程和函数 --triggers \ # 包含触发器 --events \ # 包含事件 --default-character-set=utf8mb4 \ # 字符集 mydb > mydb_full_backup.sql 选项 作用 --single-transaction 不锁表,适合InnoDB --lock-tables 锁表备份,适合MyISAM --no-data 只备份结构,不备份数据 --no-create-info 只备份数据,不备份结构 --where='条件' 按条件备份数据 只备份表结构 # 只备份表结构(DDL) mysqldump -u root -p --no-data mydb > mydb_schema.sql 只备份数据 # 只备份数据(不含表结构) mysqldump -u root -p --no-create-info mydb > mydb_data.sql 按条件备份 # 备份最近30天的订单 mysqldump -u root -p mydb orders \ --where="created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)" \ > orders_recent.sql 数据恢复(导入) 恢复数据库 # 方式1:命令行导入 mysql -u root -p mydb < mydb_backup.sql # 方式2:登录后导入 mysql -u root -p mysql> USE mydb; mysql> SOURCE /path/to/mydb_backup.sql; 创建数据库后恢复 # 如果数据库不存在,先创建 mysql -u root -p -e "CREATE DATABASE mydb CHARACTER SET utf8mb4;" # 再导入数据 mysql -u root -p mydb < mydb_backup.sql 恢复单张表 # 恢复单张表 mysql -u root -p mydb < users_backup.sql 进度显示 # 使用pv工具显示进度 pv mydb_backup.sql | mysql -u root -p mydb # 输出示例: # 1.2GB 0:05:30 [3.6MB/s] [=========> ] 45% ETA 0:06:45 CSV/TXT文件导入导出 导出为CSV -- 导出为CSV文件 SELECT * FROM users INTO OUTFILE '/var/lib/mysql-files/users.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; -- 执行结果: Query OK, 1000 rows affected (0.02 sec) 注意事项: ...