Mysql数据备份与恢复

一、备份恢复MyISAM表

1·.用BACKUP备份

只有在MyISAM表时才起作用,备份的目录需mysql要有权限

mysql>BACKUP TABLE TABLE_NAME1,TABLE_NAME2 TO '/db_backup_path';
查看
ls -l db_backup_path/

2·.用RESTORE恢复

恢复前先删除TABLE_NAME1

RESTORE TABLE TABLE_NAME1 FROM '/db_backup_path';

二、直接拷贝文件备份MyISAM表

MyISAM表被以文件的形式存在以数据库名字命名的目录中(.frm表示定义,.MYD代表数据,.MYI代表索引),所以备份这些文件的简单方法就是拷贝这些文件,不想BACKUP,直接拷贝不会自动非这些表上锁。因此,为了得到相关联的图形,你需要自己锁住这些表格。另一种选择是直接关闭服务器,直接拷贝。

窗口1
mysql>LOCK TABLES TABLE_NAME1 READ,TABLE_NAME2  READ;
mysql>FLUSH TABLES TABLE_NAME1 ,TABLE_NAME2;
窗口2
cd 数据库目录下
cp TABLE_NAME1 .*  /db_backups
cp TABLE_NAME2 .*  /db_backups
拷贝完毕去窗口1将锁释放UNLOCK TABLES;
还原的操作就是去数据库把原来的表删除,然后还原备份的数据文件

三、mysqldump备份和恢复

前面两种直接拷贝文件的方法只能在MyISAM表的时候起作用(对于InnnoDB表来说,由于其不能以文件的形式保存,因此前面的方法无法使用)。

备份
mysqldump fisrtdb table_name > /linux_path/test.sql
恢复
mysql firstdb < /linux_path/test.sql

mysqldump的参数
--add-locks       //lock tables语句放在每一个表转存处之前,而把unlock table语句放在每一个表转存处之后,加快了insert语句的执行
--add-drop-table    //在每个create table语句之前,假如drop table语句之前,假如drop
-A       //转储所有存在的数据库
-e       //利用多行insert语法结构,运行加快
-f       //如果转储期间Mysql出错,也继续运行
-h       //指定主机,默认为本地主机
-P       //指定端口
-S       //指定套接字文件
-T       //为每一个表创建两个文件,一个是create table的tablename.sql,另外一个是包含数据的tablename.txt文件

四、select into备份和locd data恢复

备份
mysql>select * from table_name into outfile '/linux_path.dat' fields terminated by '|' line terminated by '[end]';       //指定列分隔符和行结束符
恢复
mysql>load data infile '/linux_path.dat' into table table_name fields terminated by '|' line terminated by '[end]';      //根据上面备份的指定列分隔符和行结束符

使用load data local的安全问题:load data local可以读取那些与他们连接且可以访问的任何文件,这会带来安全上的问题。load data是从mysql内部运行的,可以使用命令行的等价命令mysqlimport来代替
mysqlimport [options] databasename filename1 [filename2...]
mysqlimport firstdb  '/linux_path.dat';

五、使用mysqlhotcopy备份

mysqlhotcopy依赖于perl语音
mysqlhotcopy databasename /linux_path
参数
-u       //指定用户名
-p       //指定密码
-P       //指定端口
-S       //连接服务器所用 的套接字

六、使用二进制的更新日志文件,恢复到最近位置

posted @ 2018-12-29 12:56  reaperhero  阅读(187)  评论(0编辑  收藏  举报