MySQL数据备份、还原与迁移
一、数据备份------mysqldump
1、语法:
mysqldump -u user(用户名)-h host(登录用户的主机名称)-p password(登录密码)
dbname(需要备份的数据库名称)[tbname,tbname1(数据库中需要备份的数据表] >存储路径
2、数据库备份
①单个数据库备份 语法:C:\WINDOWS\system32>mysqldump -u root -p 库名>存储路径 【例】C:\WINDOWS\system32>mysqldump -u root -p webshop>G:\a\webshop.bak ②多个数据库备份 语法:C:\WINDOWS\system32>mysqldump -u root -p --databases 库名 库名1>存储路径 【例】C:\WINDOWS\system32>mysqldump -u root -p --databases webshop zixi>G:\a\w5.bak 注:多个数据库备份的关键字是“--databases”,并且数据库之间分隔用空格; ③全部数据库备份 语法:C:\WINDOWS\system32>mysqldump -u root -p --all-databases>存储路径
【例】C:\WINDOWS\system32>mysqldump -u root -p --all-databases>G:\a\webshop1.bak
3、数据表备份
①单个数据表备份
语法:C:\WINDOWS\system32>mysqldump -u root -p 库名 表名>存储路径
【例】C:\WINDOWS\system32>mysqldump -u root -p webshop guke>G:\a\webshop1.bak
②多个数据表备份
语法:C:\WINDOWS\system32>mysqldump -u root -p 库名 表名 表名1>存储路径
【例】
C:\WINDOWS\system32>mysqldump -u root -p webshop guke shangpin>G:\a\webshop1.bak
注:
MySQL中如果直接复制数据库文件目录备份的方法,只适用于MyISAM引擎的表,并且这种方法 还容易造成数据库的崩溃。
二、数据还原
1、未登录在服务器里面
语法:C:\WINDOWS\system32>mysql -u root -p 存放数据的资料的数据库<导入的数据的路径
【例】:C:\WINDOWS\system32>mysql -u root -p text<G:\a\zixi.bak
2、登录在服务器里面
语法:mysql> source 导入的数据的路径
【例】mysql> source G:\a\webshop.bak
三、数据库迁移
1、迁移数据库的原因:
- 需要安装新的数据库服务器
- MySQL的版本更新
- 数据库管理系统的变更
2、相同版本的MySQL数据库之间的迁移
mysqldump -h 原主机名 -u root -p password 数据库名 |
mySQL -h 新主机名 -u root -p passward
3、不同版本的MySQL数据库之间的迁移
数据库备份,然后在导入数据库中
四、表的导入和导出(一次只能一张表)
1、导出
(1)mysqldump语句导出文本文件
语法:
mysql -u 用户名 -p --execute="查询语句" 数据库名>数据文件路径及文件名 [--default-character-set=字符集]
【附】
如果数据文件中的数据有中文,则需要通过--default-character-set参数设置中文字符集来保存数据文件
【例】
C:\WINDOWS\system32>mysql -u root -p --execute="select * from writers" zixi
>G:\\知识点\\exercise\\writers.txt --default-character-set=utf8
注意:
- 必须不在MySQL里面
- 使用双引号
- 等号后面不能有空格
- 结尾没有分号
【效果】
w_id w_name w_address w_age w_note
1 海明威 NULL 67 NULL
2 罗贯中 NULL 34 NULL
3 曹雪芹 NULL 43 NULL
(2)select……into outfile语句导出文本文件
语法:
查询语句 into outfile '数据文件路径及文件名' [fields terminated by '分隔符']
[lines terminated by '换行符']
fields terminated by每条记录数据之间的分隔符
lines terminated by记录之间是怎么分隔的
【例】
1)mysql> select * from books into outfile 'G:\\知识点\\exercise\\books.txt' fields terminated by ',' lines terminated by '\r\n';
2)mysql> select * from books into outfile 'G:\\知识点\\books.txt';
注意:
- 指定路径时,需要使用“\\”,而不是“\”;
- 注意在文件路径和文件名中也要加“\\”;
【效果】
1)
1,老人与海,海明威,1
2,三国演义,罗贯中,2
3,红楼梦,曹雪芹,3
4,祥林嫂,鲁迅,4
2)
1 老人与海 海明威 12 三国演义 罗贯中 23 红楼梦 曹雪芹 3
2、导出
【附】清空表数据---语句:delete from 表名;
(1)mysqlimport 语句
语法:
mysqlimport [-h 服务器地址] -u 用户名 -p 数据库名
数据文件路径及文件名
[--fields-terminated-by=分隔符]
[--lines-terminated-by=换行方式]
[--ignore-lines= 忽略行数]
【附】
1)文件名必须以表名命名
2)等号后面不能有空格
3)最后不能有冒号
【例】
C:\WINDOWS\system32>mysqlimport -u root -p zixi G:\\知识点\\books.txt
(2)load data infile ……into table语句导入数据
语法:
load data infile '数据文件路径及文件名.扩展名' into table 表名
[fields terminated by '分隔符' lines terminated by '换行符' ignore 行数 lines];
【例】
mysql> load data infile 'G:\\知识点\\books.txt'into table books;
附:
1、表的备份与表的导入的区别
数据备份与还原只能是相同的数据库,数据的迁移(导入和导出)可以是不用相同的数据库
导出数据库:到导出数据库中某个表或者多个表。
备份数据库:是备份数库中的所有数据包括表、视图、存储过程、函数等等
2、直接复制到数据库目录
如果数据库通过复制数据库文件备份,可以直接复制备份的文件到到MySQL数据目录下实现还原。通过这种方式还原时,必须保存备份数据的数据库和待还原的数据库服务器的主版本号相同。而且这种方式只对 MyISAM引擎的表有效。对于InnoDB引擎 的表不可用。