数据备份
数据损失原因:存储介质鼓掌,用户操作错误(误删除整个数据库),服务器彻底瘫痪
1、文件复制
需要先停止服务器服务,在停止之前,执行flushtables将所有数据写入到数据文件,停止之后,将数据文件拷贝到其他地方
只适合MyISAM存储引擎,对其他引擎并不合适
2、mysqldump
mysqldump将包含数据的表结构和数据内容保存在相应的文本文件。具体执行时,首先检查备份数据的表结构,在相应的文本文件中生成create语句。然后检查数据内容,在相应的文本文件中生成insert into 语句。将来需要进行还原时,只需要执行文本文件中的create和insert into
三种形式:
备份一个数据库
mysqldump -u username -p dname table1,table2,... >backupname.sql
不指定table则会备份整个数据库
备份多个数据库
mysqldump -u username -p --databases dbname1,dbname2,...>backupname.sql
备份所有数据库
mysqldump -u username -p --all -databases>backupname.sql
数据还原
1、复制备份文件还原数据库
这种方式必须保证两个mysql数据库的主版本号一致,因为只有主版本号相同时,才能保证两个mysql数据库的文件类型是相同的
仅对MyISAM类型的表有效
主版本号,MySQL 5.5.21和MySQL 5.5.01主版本号是相同的,第一个数字是主版本号
2、mysqldump
mysqldump -u username -p [dbname]<backup.sql
指定dbname,则还原该数据库下的表,不指定,则还原备份文件中所有的数据库
导出
通过数据库中表的导入和导出操作,可以在mysql数据库服务器与其他数据库服务器间(sql server 、Oracle)轻松移动数据
导出:
将数据从mysql数据表里复制到文本文件
导入
将数据从文本文件加载到mysql数据库表里
1、select...into outfile
select [filename] from table_name [where condition] into outfile ‘filename‘ [option]
两部分:普通查询语句(查询要导出的数据)和导出位置
option的取值:
fileds terminated by "string" 用来设置字段的分隔符字符串对象(string),默认为制表符
fields enclosed by "char" 用来设置括上字段值的字符符号,默认不使用任何符号
fields optionally enclosed by ‘char‘ 用来括上char,varchar和text等字段的字符符号,默认不使用任何符号
fieles escaped by ‘char‘ 设置转义字符的字符符号,默认情况下使用"\"字符
lines starting by ‘char‘ 设置每行开头的字符符号,默认不使用任何符号
lines terminated by ‘string‘ 设置每行结束的字符串符号,默认使用‘\n‘
2、mysqldump
mysqldump -u root -p -T file_directory dbname tablename[option]
option的取值:
--fileds-terminated-by=string
--fileds-enclosed-by=char
--fileds-optionally-enclosed-by=char
--lines-terminated-by=string
导入
1、load data infile
load data[local] infile filename into table table_name[option]
local:指定在本地计算机中查找文本文件;
filename:用来指定文本文件的路径和名称;
tablename:用来指定表的名称
oprion的取值
fileds terminated by "string" 用来设置字段的分隔符字符串对象(string),默认为制表符
fields enclosed by "char" 用来设置括上字段值的字符符号,默认不使用任何符号
fields optionally enclosed by ‘char‘ 用来括上char,varchar和text等字段的字符符号,默认不使用任何符号
fieles escaped by ‘char‘ 设置转义字符的字符符号,默认情况下使用"\"字符
lines starting by ‘char‘ 设置每行开头的字符符号,默认不使用任何符号
lines terminated by ‘string‘ 设置每行结束的字符串符号,默认使用‘\n‘
ignore n lines 实现忽略文件的前n行记录
(字段列表) 实现根据字段列表中的字段和顺序来加载记录
set column=expr 用来设置列的转换条件,即所指定的列经过相应的转换后会被加载
2、mysqlimport
mysqlimport -u root -p [--local] dbname file_name[oiption]
option的取值:
--fileds-terminated-by=string
--fileds-enclosed-by=char
--fileds-optionally-enclosed-by=char
--lines-terminated-by=string
--ignrs-lines=n
注意:命令里没有指定导入到哪个表里。按照书上的意思,按照文件名寻找表,然后导入进去。
数据库迁移
1、相同版本间的mysql数据库之间的迁移
mysqldump -h hostname -u root -password=password1 --all-databases
|mysql -h hostname2 -u root -password=password2
备份和还原同时操作。
对于相同版本间的mysql数据库之间的迁移,先使用mysqldump进行备份,然后使用mysql命令将备份文件还原到新的mysql数据库。
2、不同版本间的mysql数据库之间的迁移
低版本->高版本最是容易实现,因为高版本兼容低版本
对于MyISAM的表
使用文件直接复制的方式或者mysqlhotcopy
对于InnoDB的表
使用mysqldump备份,使用mysql命令还原
3、不同数据库间的迁移
mysql->sql server :通过MyODBC实现迁移
mysql->oracle:先通过mysqldump命令导出sql文件,手动修改
sql中的create语句
时间: 2024-10-10 03:37:20