使用mysqldump命令备份数据库
还原数据库
1、使用mysql命令还原数据库
将game_backupsql 还原至 game 数据库:
2、使用source命令还原数据库
如果数据库过大,建议可以使用source命令
打开mysqlexe和mysqldexe所在的文件夹,复制路径地址
2
打开cmd命令提示符,进入上一步mysqlexe所在的文件夹。
3
输入命令 mysqld --skip-grant-tables 回车,此时就跳过了mysql的用户验证。注意输入此命令之后命令行就无法 *** 作了,此时可以再打开一个新的命令行。注意:在输入此命令之前先在任务管理器中结束mysqldexe进程,确保mysql服务器端已结束运行。
然后直接输入mysql,不需要带任何登录参数直接回车就可以登陆上数据库。
输入show databases; 可以看到所有数据库说明成功登陆。
其中mysql库就是保存用户名的地方。输入 use mysql; 选择mysql数据库。
show tables查看所有表,会发现有个user表,这里存放的就是用户名,密码,权限等等账户信息。
输入select user,host,password from user; 来查看账户信息。
更改root密码,输入update user set password=password('123456') where user='root' and host='localhost';
再次查看账户信息,select user,host,password from user; 可以看到密码已被修改。
退出命令行,重启mysql数据库,用新密码尝试登录。
测试不带密码登录mysql,发现还是能够登陆上,但显示数据库时只能看到两个数据库了,说明重启之后跳过密码验证已经被取消了。
我这地方重启数据库之后之所以不带密码任然能够登录是因为我的数据库里存在设无须口令的账户。
我怎么觉得你是想查看删除的表呢?如果是表的话只有这么三种情况能恢复了
1
innodb引擎表开启了事务,执行dml语句,比如delete、update、insert之类,并且没有提交即commit *** 作的话,可以执行rollback进行回滚恢复。如果是ddl *** 作,如drop、create、alter之类的 *** 作时无效的
2
在进行删除 *** 作之前有备份,比如mysqldump,物理备份数据文件之类的 *** 作,那么可以恢复到删除前的数据
3
如果你的删除 *** 作是直接对data下的文件进行删除,注意,不是粉碎文件 *** 作,那么你可以尝试用磁盘恢复软件来找回被误删的数据文件;
MySQL的一些前台工具是有备份恢复功能的,可是如何在我们的应用程序中实现这一功能呢?本文提供了示例代码来说明如何使用Java代码实现MySQL数据库的备份恢复。
本次实现是使用了MySQL数据库本身提供的备份命令mysqldump和恢复命令mysql,在java代码中通过从命令行调用这两条命令来实现备份和恢复。备份和恢复所使用的文件都是sql文件。
本代码是参照网上某网友提供的源码完成的。
[java] view plaincopy
package xxxutils;
import javaioBufferedReader;
import javaioFile;
import javaioFileInputStream;
import javaioFileNotFoundException;
import javaioFileOutputStream;
import javaioIOException;
import javaioInputStream;
import javaioInputStreamReader;
import javaioOutputStream;
import javaioOutputStreamWriter;
import javaioPrintWriter;
import javaioUnsupportedEncodingException;
/
MySQL数据库的备份与恢复 缺陷:可能会被杀毒软件拦截
@author xxx
@version xxx
/
public class DatabaseBackup {
/ MySQL安装目录的Bin目录的绝对路径 /
private String mysqlBinPath;
/ 访问MySQL数据库的用户名 /
private String username;
/ 访问MySQL数据库的密码 /
private String password;
public String getMysqlBinPath() {
return mysqlBinPath;
}
public void setMysqlBinPath(String mysqlBinPath) {
thismysqlBinPath = mysqlBinPath;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
thisusername = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
thispassword = password;
}
public DatabaseBackup(String mysqlBinPath, String username, String password) {
if (!mysqlBinPathendsWith(Fileseparator)) {
mysqlBinPath = mysqlBinPath + Fileseparator;
}
thismysqlBinPath = mysqlBinPath;
thisusername = username;
thispassword = password;
}
/
备份数据库
@param output
输出流
@param dbname
要备份的数据库名
/
public void backup(OutputStream output, String dbname) {
String command = "cmd /c " + mysqlBinPath + "mysqldump -u" + username
+ " -p" + password + " --set-charset=utf8 " + dbname;
PrintWriter p = null;
BufferedReader reader = null;
try {
p = new PrintWriter(new OutputStreamWriter(output, "utf8"));
Process process = RuntimegetRuntime()exec(command);
InputStreamReader inputStreamReader = new InputStreamReader(process
getInputStream(), "utf8");
reader = new BufferedReader(inputStreamReader);
String line = null;
while ((line = readerreadLine()) != null) {
pprintln(line);
}
pflush();
} catch (UnsupportedEncodingException e) {
eprintStackTrace();
} catch (IOException e) {
eprintStackTrace();
} finally {
try {
if (reader != null) {
readerclose();
}
if (p != null) {
pclose();
}
} catch (IOException e) {
eprintStackTrace();
}
}
}
/
备份数据库,如果指定路径的文件不存在会自动生成
@param dest
备份文件的路径
@param dbname
要备份的数据库
/
public void backup(String dest, String dbname) {
try {
OutputStream out = new FileOutputStream(dest);
backup(out, dbname);
} catch (FileNotFoundException e) {
eprintStackTrace();
}
}
/
恢复数据库
@param input
输入流
@param dbname
数据库名
/
public void restore(InputStream input, String dbname) {
String command = "cmd /c " + mysqlBinPath + "mysql -u" + username
+ " -p" + password + " " + dbname;
try {
Process process = RuntimegetRuntime()exec(command);
OutputStream out = processgetOutputStream();
String line = null;
String outStr = null;
StringBuffer sb = new StringBuffer("");
BufferedReader br = new BufferedReader(new InputStreamReader(input,
"utf8"));
while ((line = brreadLine()) != null) {
sbappend(line + "/r/n");
}
outStr = sbtoString();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
writerwrite(outStr);
writerflush();
outclose();
brclose();
writerclose();
} catch (UnsupportedEncodingException e) {
eprintStackTrace();
} catch (IOException e) {
eprintStackTrace();
}
}
/
恢复数据库
@param dest
备份文件的路径
@param dbname
数据库名
/
public void restore(String dest, String dbname) {
try {
InputStream input = new FileInputStream(dest);
restore(input, dbname);
} catch (FileNotFoundException e) {
eprintStackTrace();
}
}
public static void main(String[] args) {
Configuration config = HibernateSessionFactorygetConfiguration();
String binPath = configgetProperty("mysqlbinpath");
String userName = configgetProperty("connectionusername");
String pwd = configgetProperty("connectionpassword");
DatabaseBackup bak = new DatabaseBackup(binPath, userName, pwd);
bakbackup("c:/tttsql", "ttt");
bakrestore("c:/tttsql", "ttt");
}
}
最后的main方法只是一个简单的使用方法的示例代码。
本人所做的项目是使用了hibernate的,而这里需要提供MySQL的bin路径和用户名、密码,而hibernatecfgxml中本身就是需要配置数据库的用户名和密码,所以我把MySQL的bin路径也直接配置到了这个文件里面,也不需要创建专门的配置文件,不需要写读取配置文件的接口了。
如果不明白,可以去看hibernatecfgxml的说明,里面是可以配置其他的property的
一般使用的命令: mysqldump --quick --database ondemand1 --u root >bacqupsql 这样就能把数据库中ondemand1的表全部备份出来。 其中参数的格式是:--(两横杠,不是我们常用的单横杠) quick是在数据比较多的时候,不用该参数的话,所有的数据都会先在内存缓存,接着才导出,这样会导致服务器运行减慢! --u 必须要加一个用户名,否则系统会提示你进不了ODBC数据库的。 >backupsql则是你备份数据库的目标文件名
数据导入: 可以使用MySQL-Front工具把上面导出的backupsql数据库导入执行。
以下导入方法未测试是否可行!
以上就是关于怎么备份和还原mysql数据库全部的内容,包括:怎么备份和还原mysql数据库、如何恢复mysql数据库原始密码、mysql怎么查看删除的数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)