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