- 备份与恢复
- 备份:
- 1、系统运行中,增量备份与整体备份
- 例:每周日整体备份一次,周一到周六备份当天
- 如果周五出了问题可以用周日的整体备份加周一、二、三、四来恢复
- 2、备份工具有第三方收费备份工具,系统也有自带的备份功能mysqldump
- mysqldump可以导出表和库
- 1)、导出指定表格式:mysqldump -u用户名 -p 库名 表1 表2 表3 >保存地址\\保存备份文件名
- 例一、导出mugua库下的account表
- mysqldump -uroot -p mugua account >D:\\account.sql
- 注:语句结尾不用加分号,用反斜杠需要再加一个用来转义。
- 2)、导出库下的所有表格式:mysqldump -u用户名 -p 库名 >保存地址\\保存备份文件名
- 3)、导出库格式:mysqldump -u用户名 -p -B 库名1 库名2 库名3 >保存地址\\保存备份文件名
- 注:不加-B会把库2和库3当初表名,加了-B后就表示以库为单位备份
- 4)、导出所有库格式:mysqldump -u用户名 -p -A >保存地址/保存备份文件名
- 恢复:
- a、登录到mysql情况下:
- 语句格式:source 保存地址/保存备份文件名;
- 对于表级备份文件需要在指定的库下才能恢复
- b、不登录mysql情况下恢复库、表:
- 1、恢复库:mysql -uroot -p <保存地址/保存备份文件名;
- 2、恢复库下的表:mysql -uroot -p 库名 <保存地址/保存备份文件名;
- 备份
- 1、mysqldump备份
- 1)、备份多个数据库,如:
- mysqldump -u username -p --databases dbname1 dbname2...>backupName.sql;//要加--databases选项
- 2)、备份所有数据库
- mysqldump -u username -p --all-databases > backupName.sql;
- 2、mysqlhostcopy工具快速备份--直接复制整个数据库目录
- 注:该工具是perl脚本,主要在linux系统下使用。该工具原理是将数据库文件拷贝到目标目录。因此只能备份MyISAM类型的表,不能用来备份InnoDB类型的表。该工具使用lock tables、flush tables和cp进行快速备份。先将需要备份的数据库加上一个读操作锁,如拿回用flush tables将内存中的数据写回到硬盘上的数据库,最后,把需要备份的数据库文件复制到目标目录。
- backipDir参数指出备份到哪个文件夹下。选项:--help:用来查看帮助 --allowold:如果备份目录下存在相同的备份文件,将旧的备份文件名加上_old;--keepold:如果备份目录下存在相同的备份文件,不删除旧的备份文件,而是将旧文件更名;--flushlog:本次备份之后,将对数据库的更新记录到日志中;--noindices:只备份数据文件,不备份索引文件;--user=用户名:用来指定用户名,可以用-u代替;--password=密码:用来指定密码,可以用-p代替。使用-p时,密码与-p紧挨着。或者只用-p,然后交换方式输入密码。--port=端口号:用来指定访问端口,可以用-P代替;--socket=socket文件:用来指定socket文件,可以用-S代替。
- 如:[root@localhost~]#mysqlhostcopy [option] dbname1 dbname2 ... backupDir/
- 数据还原
- 直接复制到数据库目录
- 1)、可以直接复制到mysql数据库目录下。需要mysql数据库主版本号相同。而且对MyISAM类型的表比较有效。
- winsows下数据库目录通常放在C:\mysql\date、C:\documents and settings\all users\application data\mysql\mysql server5.1\data或c:\program files\mysql\mysql server 5.1\data。
- linux下通常在/var/lib/mysql、/usr/local/mysql/data或/usr/local/mysql/var。具体位置根据安装时设置位置而定。
- 2)、mysqlhostcopy命令也是通过这种方式还原的。在linux下,复制到数据库目录后一定要将数据库的用户和组变成mysql。如:chown -R mysql.mysql dataDir 注:两个mysql分别表示组和用户;"-R"参数可以改变文件夹下的所有子文件的用户和组;"dataDir"参数表示数据库目录。mysql数据库只有root用户和mysql用户组下的mysql用户可以访问。因此,将数据库目录复制到指定文件夹后,一定要用chown命令将文件夹用户组变为mysql,将用户变为mysql。
- 数据库迁移
- 1、相同版本mysql数据库间迁移
- 备份和迁移可以同时进行,如host1机器备份出所有数据库迁移到host2机器上。如:
- mysqldump -h name1 -u root --password=password1 --all-databases | mysql -h host2 -u root --password=password2
- 其中‘|’符号表示管道,作用是将mysqldump备份的文件送给mysql命令;"--password=password1"是name1主机上root用户的密码。同理,password2是name2主机上的root用户的密码。通过这种方式可以直接实现迁移。
- 2、不同版本的mysql数据库间迁移也可用mysqldump
- 3、不同数据库间迁移
- 通常可以用MyODBC来实现Mysql与sql server间迁移。mysql迁移到oracle时,需要用mysqldump导出sql文件,然后手动更改sql文件中的create语句。详情可以看tech.ccidnet.com/zt/qianyi/
- 表的导出导入
- mysql中可以将表导出成文本文件、xml文件或html文件。相应文本文件也可以导入mysql中。
- 1、用select...into outfile导出文本文件
- 如:select [列名] from table [where 语句] into outfile '目标文件'[option];
- 注:a、fields terminated by '字符串':设置字符串为字段的分隔符,默认值是"\t";
- b、fields enclosed by '字符':设置字符来括上字段的值。默认情况下不使用任何符号;
- c、fields optionally enclosed by '字符':设置字符来括上char、varchar和text等字符型字段。默认情况下不使用任何符号;
- d、fields escaped by '字符':设置转义字符,默认值为“\”;
- e、lines starting by '字符串':设置每行开头的字符,默认情况下无任何字符;
- f、lines terminated by '字符串':设置每行的结束符,默认值是"\n"。
- 如:select * from test.student into oufile 'C:/student1.txt' fields terminated by '\、' optionally enclosed by '\"' lines starting by '\>' terminated by '\r\n';student1.txt中内容如下:
- >901、"张老大"、"男"、1985、"计算机系"、"北京市"注:windows下"\r\n"才是回车换行。
- 2、用mysqldump命令导出文本文件
- 格式:mysqldump -uroot -ppassword -T 目标目录 dbname table [option];
- 注:option表示附件选项:这些选项必须用双引号括起来
- --fields-terminated-by=字符串:设置字符串为字段的分隔符,默认值是"\t";
- --fields-enclosed-by=字符:设置字符来括上字段的值;
- --fields-optionally-enclosed-by=字符:设置字符括上char、varchar和text等字符型字段;
- --fields-escaped-by=字符:设置转义字符;
- --lines-terminated-by=字符串:设置每行的结束符。
- 如:mysqldump -uroot -phuang -T C:/test student "--fields-terminated-by=," "--fields-optionally-enclosed-by=""
- student.txt中的内容如:
- 901,"张老大","男",1985,"计算机系","北京市"
- 3、导出xml格式文件:mysqldump -uroot -ppassword [--xml或 -X] dbname table > C:/name.xml;
- 注:--xml或-X选项可以导出xml格式文件;
- 4、用mysql命令导出文本文件
- 如:mysql -uroot -ppassword -e "select 语句" dbname > C:/name.txt;
- 如:mysql -uroot -ppassword [--xml|-X] -e "select 语句" dbname > C:/name.xml;//导出xml格式
- 如:mysql -uroot -ppassword [--html|-H] -e "select 语句" dbname > C:/name.html;//导出html文件
- 5、用load data infile方式导入文本文件
- LOAD DATA [LOCAL] INFILE file INTO TABLE table [OPTION];
- 其中,"LOCAL"是在本地计算机中查找文本文件时用的;"file"参数指定了文本文件的路径和名称;"table"参数指表的名称;"OPTION"参数是可以有常用的选项如:
- fields terminated by '字符串':设置字符串为字段的分隔符,默认值是"\t";
- fields enclosed by '字符':设置字符来括上字段的值。默认情况下不使用任何符号;
- fields optionally enclosed by '字符':设置字符来括上char、varchar和text等字符型字段。默认情况下不使用任何符号;
- fields escaped by '字符':设置转义字符,默认值为"\";
- lines starting by '字符':设置每行开头的字符,默认情况下无任何字符;
- lines terminated by '字符串':设置每行的结束符,默认值是"\n";
- ignore n lines:忽略文件的前n行记录;
- (字段列表):根据字段列表中的字段和顺序来加载记录;
- set column=expr:将指定的列column进行相应地转换后再加载,使用expr表达式来进行转换。
- 例:LOAD DATA INFILE 'C:/student.txt' into table student FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY "";
- 6、用mysqlimport命令导入文本文件
- 格式如:mysqlimport -u -ppassword [--local] dbname file [OPTION]
- 其中,"local"是在本地计算机中查找文本文件时用的;"file"参数指定了文本文件的路径和名称;如:
- --fields-terminated-by=字符串:设置字符串为字段的分隔符,默认值是"\t";
- --fields-enclosed-by=字符:设置字符来括上字段的值。
- --fields-optionally-enclosed-by=字符:设置字符括上char、varchar和text等字符型字段。
- --fields-escaped-by=字符:设置转义字符;
- --lines-terminated-by=字符串:设置每行的结束符;
- --ignore-lines=n:忽略文件的前n行;
- 如:mysqlimport -uroot -phuang test C:/student.txt "--fields-terminated-by=," "--fields-optionally-enclosed-by=""