msql数据备份与还原

一数据库备份:

1.将单个表导出为csv文件

数据表导出csv语句:

select *from TSI_20140206_0_20120701 into outfile '/home/maysqldata/TSI_20140206_0_20120701.csv'  fields terminated by ',' optionally enclosed by'"' escaped by '"' lines terminated by '\r\n'; 

数据表导入csv语句:

导入的时候需要事先建好表结构,才能够导入。

mysql导出表结构的代码:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

使用mysqldump命令
格式
mysqldump YourDatabaseName -uYourUserName -pYourPassword 
YourDatabaseName是你想处理的数据库名
YourUserName和YourPassword 对应你的授权口令
如果只需要导出表的结构,那么可以使用mysqldump的 -d 选项

导出整个库的表结构如下:

mysqldump -uroot -p -d databasename > createtab.sql,

如果只想导出 表 table1 table2 table3 的 表结构 和 数据呢?
该如何导出?

mysqldump -uroot -p -d databasename test1 test2 test3 > createtab.sql

-- 上面的是导出指定表结构,下面这个可以导出指定表结构和数据
mysqldump -uroot -p --tables databasename > createtab.sql

mysqldump -uroot -p -d databasename table1table2 table3 > createtab.sql

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

然后导入:

load data infile '/tmp/test.csv' into table test_info  fields terminated by ','  optionally enclosed by '"' escaped by'"' lines terminated by '\r\n';  

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2.当数据表的个数很大,以至于手动备份不方便时(例如将数据库中所有表导出为csv文件),这里我用了一个比较笨的方法:

首先查询数据库中所有的表名,将表名称输出为csv文件。

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA ='BD_result_DB'into outfile '/mnt/80.50store/BD_mysql/BD_result_DB/tableName.csv';;

然后,自己编写了一个java小程序,读取这些表名称,循环遍历生成单表备份语句。

package cn.com.mysqlBack;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Locale;
import java.util.ResourceBundle;

import org.apache.log4j.Logger;

public class TestMain {
	public static Logger LOG = Logger.getLogger(TestMain.class);

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		ResourceBundle bundle = ResourceBundle.getBundle("config",
				Locale.getDefault());
		String filePath = bundle.getString("inputfile");
		String outfile = bundle.getString("outfile");
		Operate operate = new Operate();
		String sqlDB = "use " + bundle.getString("DB");
		operate.executeQuery(sqlDB);
		String sql = bundle.getString("getTBNameSql");
		operate.executeQuery(sql);
		File file = new File(filePath);
		if (file.isFile() && file.exists()) {
			InputStreamReader read = new InputStreamReader(new FileInputStream(
					file));
			BufferedReader bufferedReader = new BufferedReader(read);
			String lineTxt = null;
			while ((lineTxt = bufferedReader.readLine()) != null) {
				String tableBackupSql = "select * from "
						+ lineTxt
						+ " into outfile "
						+ "\'/mnt/80.50store/BD_mysql/"
						+ bundle.getString("DB")
						+ "/"
						+ lineTxt
						+ ".csv\'"
						+ " FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' escaped by '\"'  lines terminated by  '\\r\\n';";
				System.out.println(tableBackupSql);
				// String tableBackupSql1
				// ="SELECT * FROM TSI_20140310_320500_0_20120701 INTO OUTFILE '/APP/niuxinzan/123.csv'FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
				// LINES TERMINATED BY '\n';

				// 直接执行sql语句,备份表
				operate.executeQuery(tableBackupSql);
				// 将sql语句保存到文件中,以备批量复制到mysql命令行中用。
				System.out.println(tableBackupSql);
				// File outfile1 = new File(outfile);
				// BufferedWriter bw = new BufferedWriter(new
				// FileWriter(outfile1,
				// true));
				// bw.write(tableBackupSql);
				// bw.write("\r\n");
				// bw.flush();
				// bw.close();
			}
			operate.close();
			LOG.info("------out to csv successful!-----");
		}

	}

}

最后将outfile的csv文件里面的语句全部复制到mysql命令行中,执行完毕即可。或者,不用复制到mysql命令行,而是直接在程序中执行mysql命令也可。

二数据库还原

package cn.com.mysqlLoad;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Locale;
import java.util.ResourceBundle;

import org.apache.log4j.Logger;

import cn.com.mysqlBack.Operate;
import cn.com.mysqlBack.TestMain;

public class loadCSVToMysql {
	public static Logger LOG = Logger.getLogger(loadCSVToMysql.class);

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		// System.out.println("lines terminated by '\\r\\n';");
		ResourceBundle bundle = ResourceBundle.getBundle("config",
				Locale.getDefault());
		String filePath = bundle.getString("loadinputfile");
		System.out.println("filePath: " + filePath);
		Operate operate = new Operate();
		String sqlDB = "use " + bundle.getString("DBofload");
		System.out.println("sqlDB: " + sqlDB);
		operate.execute(sqlDB);
		File file = new File(filePath);
		if (file.isFile() && file.exists()) {
			InputStreamReader read = new InputStreamReader(new FileInputStream(
					file));
			BufferedReader bufferedReader = new BufferedReader(read);
			String lineTxt = null;
			while ((lineTxt = bufferedReader.readLine()) != null) {
				String DROPtable = "";
				String createtable1 = "";
				if (lineTxt.contains("BOTTLENECK")) {
					DROPtable = "DROP TABLE IF EXISTS " + lineTxt;
					createtable1 = "CREATE TABLE "
							+ lineTxt
							..................
							+ " KEY idx_linkID (linkID)) ENGINE=myisam DEFAULT CHARSET=utf8;";

					System.out.println("create table sqlString: "
							+ createtable1);
				}
				if (lineTxt.contains("PASSABLEROUTEDETAIL")) {
					DROPtable = "DROP TABLE IF EXISTS " + lineTxt;
					createtable1 = "CREATE TABLE "
							+ lineTxt
							+ "("
							.............
							+ ") ENGINE=myisam DEFAULT CHARSET=utf8;";
				}
				if (lineTxt.contains("RTIC_INFO")) {
					DROPtable = "DROP TABLE IF EXISTS " + lineTxt;
					createtable1 = "CREATE TABLE "
							.................

					System.out.println("create table sqlString: "
							+ createtable1);
				}
				if (lineTxt.contains("RTIC_ROAD")) {

					DROPtable = "DROP TABLE IF EXISTS " + lineTxt;
					createtable1 = "CREATE TABLE " + lineTxt + "("
							
+..........
+ ") ENGINE=myisam DEFAULT CHARSET=utf8;";System.out.println("create table sqlString: "+ createtable1);}if (lineTxt.contains("RTICLINKINFO")) {DROPtable = "DROP TABLE IF EXISTS " + lineTxt;createtable1 = "CREATE TABLE " + lineTxt + "(".........................+ ") ENGINE=myisam DEFAULT CHARSET=utf8;";System.out.println("create table sqlString: "+ createtable1);}if (lineTxt.contains("TRAFFICVOLUME")) {DROPtable = "DROP TABLE IF EXISTS " + lineTxt;createtable1 = "CREATE TABLE "+ lineTxt............+ ") ENGINE=myisam DEFAULT CHARSET=utf8;";System.out.println("create table sqlString: "+ createtable1);}if (lineTxt.contains("TSI_")) {DROPtable = "DROP TABLE IF EXISTS " + lineTxt;createtable1 = "CREATE TABLE "+ lineTxt+ "("..................+ ") ENGINE=myisam DEFAULT CHARSET=utf8;";System.out.println("create table sqlString: "+ createtable1);}if (lineTxt.contains("user_info")) {DROPtable = "DROP TABLE IF EXISTS " + lineTxt;createtable1 = "CREATE TABLE " + lineTxt + "("+ "id int(11) NOT NULL AUTO_INCREMENT,".............+ ") ENGINE=myisam DEFAULT CHARSET=utf8;";System.out.println("drop table sqlString: " + DROPtable);System.out.println("create table sqlString: "+ createtable1);}operate.execute(DROPtable);operate.execute(createtable1);String tableBackupSql = "load data infile "+ "\'/mnt/80.50store/BD_mysql/"+ bundle.getString("DBofcsv")+ "/"+ lineTxt+ ".csv\'"+ " into table "+ lineTxt+ " fields terminated by ',' optionally enclosed by '\"' escaped by'\"' lines terminated by '\\r\\n';";System.out.println("load table sqlString:" + tableBackupSql);operate.execute(tableBackupSql);}operate.close();LOG.info("------out to csv successful!-----");}}}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值