mysql - 数据库备份方案 - 数据库备份策略
从jsp页面数据库备份 (2)
我有一个带有MySQL数据库的struts 2(jsp)web应用程序 。
可以从jsp / java页面进行数据库备份吗?
是否有可能以同样的方式恢复 ?
请给我一些教程或技巧..
我的实际需要是授予管理员权限, 使用gui本身进行恢复和恢复,而无需从服务器访问MySQL 。
提前致谢..
你可以做到这一点,虽然它可能不是一个好主意。 MySQL逻辑备份是SQL,不需要对服务器内部进行任何访问。 您可以使用记录的SQL界面进行备份。
- 您可以从information_schema或
show tables
等获取数据库,表格,视图等的列表。 - 您可以从information_schema获取表定义,或者
show create table
- 您可以使用
select * from table_name
来获取表的内容 - 等等
当然,你可能会丢失一些东西(你是否记得触发器,存储过程,用户自定义函数,...?)。 即使你今天没有遗漏任何东西,但是当一个新的MySQL版本出来时,你很可能会失去一些新的东西。
mysqldump
应该是首选的,因为MySQL的作者会考虑添加新的东西来备份它。 你可以掏出来叫它; 它的输出(默认)是SQL。
恢复备份相当简单; 只要依次运行SQL语句。
如果你正在使用mySQl,你可以做类似的事情
static int BUFFER = 10485760;
public static String getData(String host, String port, String user, String password, String db) throws Exception {
Process run = Runtime.getRuntime().exec(
"C:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\mysqldump --host=" + host + " --port=" + port +
" --user=" + user + " --password=" + password +
" --compact --databases --add-drop-table --complete-insert --extended-insert " +
"--skip-comments --skip-triggers "+ db);
InputStream in = run.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
StringBuffer temp = new StringBuffer();
int count;
char[] cbuf = new char[BUFFER];
while ((count = br.read(cbuf, 0, BUFFER)) != -1)
temp.append(cbuf, 0, count);
br.close();
in.close();
return temp.toString();
}
public static void main(String[] args) {
byte[] data = BackupRestore.getData("localhost", "3306",
"root", "", "test").getBytes();
File filedst = new File(path);
FileOutputStream dest = new FileOutputStream(filedst);
dest.write(data);
}
但是,我相信,直到你没有任何令人信服的/奇特的理由来做这个更好的用户命令行工具
您可以使用随MySQL发布的GUI工具,更经过测试和更易于使用。
String path="C:/datadump/db_backup.sql"
确保路径C:/datadump
应该存在,或者你可以提供你选择的其他路径。