mysql数据库恢复命令?MySQL数据库备份和还原的常用命令
今天给各位分享mysql数据库恢复命令的知识,其中也会对MySQL数据库备份和还原的常用命令进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
如何用mysql命令备份和恢复
Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下面为大家分享一下操作的常用的命令。
一、备份命令
1、备份MySQL数据库的命令
<!--
Code highlighting produced by Actipro CodeHighlighter(freeware)
http://www.CodeHighlighter.com/
-->mysqldump-hhostname-uusername-ppassword databasename>backupfile.sql
2、备份MySQL数据库为带删除表的格式
备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
<!--
Code highlighting produced by Actipro CodeHighlighter(freeware)
http://www.CodeHighlighter.com/
-->mysqldump-–add-drop-table-uusername-ppassword databasename>backupfile.sql
3、直接将MySQL数据库压缩备份
<!--
Code highlighting produced by Actipro CodeHighlighter(freeware)
http://www.CodeHighlighter.com/
-->mysqldump-hhostname-uusername-ppassword databasename|gzip>backupfile.sql.gz
4、备份MySQL数据库某个(些)表
<!--
Code highlighting produced by Actipro CodeHighlighter(freeware)
http://www.CodeHighlighter.com/
-->mysqldump-hhostname-uusername-ppassword databasename specific_table1 specific_table2>backupfile.sql
5、同时备份多个MySQL数据库
<!--
Code highlighting produced by Actipro CodeHighlighter(freeware)
http://www.CodeHighlighter.com/
-->mysqldump-hhostname-uusername-ppassword–databases databasename1 databasename2 databasename3>multibackupfile.sql
6、仅仅备份数据库结构
<!--
Code highlighting produced by Actipro CodeHighlighter(freeware)
http://www.CodeHighlighter.com/
-->mysqldump–no-data–databases databasename1 databasename2 databasename3>structurebackupfile.sql
7、备份服务器上所有数据库
<!--
Code highlighting produced by Actipro CodeHighlighter(freeware)
http://www.CodeHighlighter.com/
-->mysqldump–all-databases>allbackupfile.sql
二、还原命令
1、还原MySQL数据库的命令
<!--
Code highlighting produced by Actipro CodeHighlighter(freeware)
http://www.CodeHighlighter.com/
-->mysql-hhostname-uusername-ppassword databasename<backupfile.sql
2、还原压缩的MySQL数据库
<!--
Code highlighting produced by Actipro CodeHighlighter(freeware)
http://www.CodeHighlighter.com/
-->gunzip<backupfile.sql.gz|mysql-uusername-ppassword databasename
3、将数据库转移到新服务器
<!--
Code highlighting produced by Actipro CodeHighlighter(freeware)
http://www.CodeHighlighter.com/
-->mysqldump-uusername-ppassword databasename|mysql–host=*.*.*.*-C databasename
做好数据备份和还原,定好合适的备份策略,这是一个DBA所做事情的一小部分,万事开头难,就从现在开始吧!
MySQL数据库备份和还原的常用命令
1.备份MySQL数据库的命令
mysqldump-hhostname-uusername-ppassworddatabasename>backupfile.sql
2.备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqldump-_add-drop-table-uusername-ppassworddatabasename>backupfile.sql
3.直接将MySQL数据库压缩备份
mysqldump-hhostname-uusername-ppassworddatabasename|gzip>backupfile.sql.gz
4.备份MySQL数据库某个(些)表
mysqldump-hhostname-uusername-ppassworddatabasenamespecific_table1specific_table2>backupfile.sql
5.同时备份多个MySQL数据库
mysqldump-hhostname-uusername-ppassword_databasesdatabasename1databasename2databasename3>multibackupfile.sql
6.仅仅备份数据库结构
mysqldump_no-data_databasesdatabasename1databasename2databasename3>structurebackupfile.sql
7.备份服务器上所有数据库
mysqldump_all-databases>allbackupfile.sql
8.还原MySQL数据库的命令
mysql-hhostname-uusername-ppassworddatabasename<backupfile.sql
9.还原压缩的MySQL数据库
gunzip<backupfile.sql.gz|mysql-uusername-ppassworddatabasename
10.将数据库转移到新服务器
mysqldump-uusername-ppassworddatabasename|mysql_host=*.*.*.*-Cdatabasename
mysql命令行下怎样实现数据的回滚操作
当启动Binlog后,事务会产生Binlog Event,这些Event被看做事务数据的一部分。因此要保证事务的Binlog Event和InnoDB引擎中的数据的一致性。所以带Binlog的CrashSafe要求MySQL宕机重启后能够保证:
-所有已经提交的事务的数据仍然存在。
-所有没有提交的事务的数据自动回滚。
-所有已经提交了的事务的Binlog Event也仍然存在。
-所有没有提交事务没有记录Binlog Event。
这些要求很好理解,如果重启后数据还在,但是Binlog Event没有了,就没办法复制到其他节点上了。如果重启后,数据没了,但是Binlog Event还在,那么不存在的数据就会被复制到其他节点上,从而导致主从的不一致。
为了保证带Binlog的CrashSafe,MySQL内部使用的两阶段提交(Two Phase Commit)。
2- MySQL的Two Phase Commit(2PC)
在开启Binlog后,MySQL内部会自动将普通事务当做一个XA事务来处理:
-自动为每个事务分配一个唯一的ID
- COMMIT会被自动的分成Prepare和Commit两个阶段。
- Binlog会被当做事务协调者(Transaction Coordinator),Binlog Event会被当做协调者日志。
想了解2PC,可以参考文档:【https://en.wikipedia.org/wiki/Two-phase_commit_protocol。】
-分布式事务ID(XID)
使用2PC时,MySQL会自动的为每一个事务分配一个ID,叫XID。XID是唯一的,每个事务的XID都不相同。XID会分别被Binlog和InnoDB记入日志中,供恢复时使用。MySQ内部的XID由三部分组成:
-前缀部分
前缀部分是字符串"MySQLXid"
- Server ID部分
当前MySQL的server_id
- query_id部分
为了保证XID的的唯一性,数字部分使用了query_id。MySQL内部会自动的为每一个语句分配一个query_id,全局唯一。
参考代码:sql/xa。h的struct xid_t结构。
-事务的协调者Binlog
Binlog在2PC中充当了事务的协调者(Transaction Coordinator)。由Binlog来通知InnoDB引擎来执行prepare,commit或者rollback的步骤。事务提交的整个过程如下:
1.协调者准备阶段(Prepare Phase)
告诉引擎做Prepare,InnoDB更改事务状态,并将Redo Log刷入磁盘。
2.协调者提交阶段(Commit Phase)
2.1记录协调者日志,即Binlog日志。
2.2告诉引擎做commit。
注意:记录Binlog是在InnoDB引擎Prepare(即Redo Log写入磁盘)之后,这点至关重要。
在MySQ的代码中将协调者叫做tc_log。在MySQL启动时,tc_log将被初始化为mysql_bin_log对象。参考sql/binlog.cc中的init_server_components():
if(opt_bin_log) tc_log=&mysql_bin_log;
而在事务提交时,会依次执行:
tc_log->prepare();
tc_log->commit();
参考代码:sql/binlog.cc中的ha_commit_trans()。当mysql_bin_log是tc_log时,prepare和commit的代码在sql/binlog.cc中:
MYSQL_BIN_LOG::prepare();
MYSQL_BIN_LOG::commit();
-协调者日志Xid_log_event
作为协调者,Binlog需要将事务的XID记入日志,供恢复时使用。Xid_log_event有以下几个特点:
-仅记录query_id
因为前缀部分不变,server_id已经记录在Event Header中,Xid_log_event中只记录query_id部分。
-标志事务的结束
在Binlog中相当于一个事务的COMMIT语句。
一个事务在Binlog中看起来时这样的:
Query_log_event("BEGIN");DML产生的events; Xid_log_event;
- DDL没有BEGIN,也没有Xid_log_event。
-仅InnoDB的DML会产生Xid_log_event
因为MyISAM不支持2PC所以不能用Xid_log_event,但会有COMMIT Event。
Query_log_event("BEGIN");DML产生的events;Query_log_event("COMMIT");
问题:Query_log_event("COMMIT")和Xid_log_event有不同的影响吗?
- Xid_log_event中的Xid可以帮助master实现CrashSafe。
- Slave的CrashSafe不依赖Xid_log_event
事务在Slave上重做时,会重新产生XID。所以Slave服务器的CrashSafe并不依赖于Xid_log_event。Xid_log_event和Query_log_event("COMMIT"),只是作为事务的结尾,告诉Slave Applier去提交这个事务。因此二者在Slave上的影响是一样的。
3-恢复(Recovery)
这个机制是如何保证MySQL的CrashSafe的呢,我们来分析一下。这里我们假设用户设置了以下参数来保证可靠性:
-恢复前事务的状态
在恢复开始前事务有以下几种状态:
- InnoDB中已经提交
根据前面2PC的过程,可知Binlog中也一定记录了该事务的的Events。所以这种事务是一致的不需要处理。
- InnoDB中是prepared状态,Binlog中有该事务的Events。
需要通知InnoDB提交这些事务。
- InnoDB中是prepared状态,Binlog中没有该事务的Events。
因为Binlog还没记录,需要通知InnoDB回滚这些事务。
- Before InnoDB Prepare
事务可能还没执行完,因此InnoDB中的状态还没有prepare。根据2PC的过程,Binlog中也没有该事务的events。需要通知InnoDB回滚这些事务。
-恢复过程
从上面的事务状态可以看出:恢复时事务要提交还是回滚,是由Binlog来决定的。
-事务的Xid_log_event存在,就要提交。
-事务的Xid_log_event不存在,就要回滚。
恢复的过程非常简单:
-从Binlog中读出所有的Xid_log_event
-告诉InnoDB提交这些XID的事务
- InnoDB回滚其它的事务
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!