mysql 数据备份与还原

数据备份

1.mysqldump

备份单个数据库中的所有表

mysqldump -u root -p testdb >/www/test.sql

备份数据库中的某个表

mysqldump -u root -p testdb user >/www/user.sql

备份多个数据库

mysqldump -u root -p --databases testdb fgame >/www/my.sql

备份所有的表

mysqldump -u root -p --all-databases >/www/all.sql

2.直接复制整个数据库目录

要想保证数据的一致性,备份前需要对表执行LOCK TABLES操作,然后执行FLUSH TABLES。也可以停止mysql服务器再进行备份

注意:这种方法对InnoDB存储引擎的表不适用

3.使用mysqlhotcopy工具快速备份

这个执行文件在 mysql/bin 文件夹下

mysqlhotcopy -u root -p test /www/data

我测试没有成功

 

 

数据还原

1.使用mysql命令还原

mysql -u root -p testdb < /www/testdb.sql       //执行语句前必须现在MySQL中创建testdb表

也可以在登陆mysql命令行后使用source

source /www/testdb.sql

注意:执行source命令前,必须使用use语句选择数据库

2.直接复制数据到数据库目录

注意:文件的读写权限

3.mysqlhotcopy

不建议使用

 

数据库迁移

1.相同版本mysql之间的迁移

将www.abc.com主机上的MySQL数据库全部迁移到www.bcd.com主机上。在www.abc.com主机上执行的命令如下:
mysqldump –h www.abc.com –uroot –ppassword dbname | mysql –h www.bcd.com –uroot –ppassword
2.不同版本的MySQL数据库之间的迁移

最好使用mysqldump 导出再导入

3.不同数据库之间的切换

迁移之前,要了解不同数据库的架构,比较语句的差异,不同数据库中定义的相同类型的数据关键字可能会不同

 

表的导出和导入

1.用SELECT…INTO OUTFILE导出文本文件

SELECT *  FROM test.person INTO OUTFILE '/www/person.txt';
【例1】

使用SELECT...INTO OUTFILE将test数据库中的person表中的记录导出到文本文件,使用FIELDS选项和LINES选项,要求字段之间使用逗号‘,’间隔,所有字段值用双引号括起来,定义转义字符定义为单引号‘\’’
SELECT * FROM test.person INTO OUTFILE "C:/person1.txt"
  FIELDS
    TERMINATED BY ','
    ENCLOSED BY '\"'
    ESCAPED BY '\''
  LINES
    TERMINATED BY '\r\n';

【例2】

使用SELECT...INTO OUTFILE将test数据库中的person表中的记录导出到文本文件,使用LINES选项,要求每行记录以字符串“> ”开始,以“<end>”字符串结尾
SELECT * FROM test.person INTO OUTFILE "C:/person2.txt"
  LINES
    STARTING BY '> '
    TERMINATED BY '<end>';

SELECT * FROM test.person INTO OUTFILE "C:/person2.txt"
  LINES
    STARTING BY '> '
    TERMINATED BY '<end>\r\n';

 

2.用mysqldump 导出文本文件

mysqldump -T C:/ test person -u root -p    //使用mysqldump将test数据库中的person表中的记录导出到文本文件

使用mysqldump命令将test数据库中的person表中的记录导出到文本文件,使用FIELDS选项,要求字段之间使用逗号‘,’间隔,所有字符类型字段值用双引号括起来,定义转义字符定义为问号‘?’,每行记录以回车换行符“\r\n”结尾
mysqldump -T C:\backup test person -u root -p --fields-terminated-by=, --fields-optionally-enclosed-by=\" --fields-escaped-by=? --lines-terminated-by=\r\n

3.使用mysql命令

mysql -u root -p --execute "select 语句" testdb > testdb.txt

【例1】使用mysql命令导出test数据库中person表中的记录到html文件
mysql -u root -p --html --execute="SELECT * FROM person;" test > C:\person5.html

【例2】使用mysql命令导出test数据库中person表中的记录到xml文件
mysql -u root -p --xml --execute="SELECT * FROM person;" test > C:\person6.xml

 

4.导入.sql文件

常用source 命令

如mysql -u root -p

mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

mysql>source /www/bbs_server_backup.sql

 

导入文本文件

1.用LOAD DATA INFILE方式导入文本文件

使用LOAD DATA命令将C:\person0.txt文件中的数据导入到test数据库中的person表
LOAD DATA  INFILE 'C:/person0.txt' INTO TABLE test.person;

【例】使用LOAD DATA命令将C:\person1.txt文件中的数据导入到test数据库中的person表,使用FIELDS选项和LINES选项,要求字段之间使用逗号‘,’间隔,所有字段值用双引号括起来,定义转义字符定义为单引号‘\’’
LOAD DATA  INFILE 'C:/person1.txt' INTO TABLE test.person
  FIELDS
    TERMINATED BY ','
    ENCLOSED BY '\"'
    ESCAPED BY '\''
  LINES
    TERMINATED BY '\r\n';

2.使用mysqlimport命令导入文本文件

命令在mysql/bin文件夹下

./mysqlimport -u root -p booksDB /test/books.txt     //booksDB是数据库名,books必须是已经存在的表名

【例】使用mysqlimport命令将C:\backup目录下的person.txt文件内容导入到test数据库中,字段之间使用逗号‘,’间隔,字符类型字段值用双引号括起来,定义转义字符定义为问号‘?’,每行记录以回车换行符“\r\n”结尾
mysqlimport -u root -p test C:/backup/person.txt --fields-terminated-by=, --fields-optionally-enclosed-by=\" --fields-escaped-by=? --lines-terminated-by=\r\n

posted @ 2015-08-06 16:46  笑笑别人  阅读(315)  评论(0编辑  收藏  举报