‘壹’ 如何记录mysql命令行操作的内容和时间
创建记录表
创建触发器 记录数据
CREATE TRIGGER t_make_data //创建触发器
BEFORE INSERT ON t_tab1 //触发在这张表新增数据前 你可以把增删查改一起加入。。。 你的逻辑 插入记录表‘贰’ 在DOS端如何用命令行进行 MySQL 的操作
首先把mysql
加入环境变量
不过一般安装完成就自动加入了
mysql
-hhostname
-u
username
-p
pwd
进入之后就可以执行mysql命令了
‘叁’ 如何用命令行进入mysql具体操作步骤
用命令行进入mysql方法: windows打开命了行,在左下角开始,运行,cmd,mysql 然后就要让你数据密码的,当然前提是你的mysql安装正确,网上有好多图文并茂的安装教程。开始,运行,cmd [ ,cd mysql安装目录/bin ], mysql -u userName -p Password先用CD命令进到mysql的BIN目录 然后mysql -u root -p 再输入ROOT的密码就行了。 这样就可以了哦,希望能帮上朋友们。
‘肆’ 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回滚其它的事务
‘伍’ 如何使用mysql命令行
mysql命令行的使用主要是对sql语句的掌握,这里简要介绍一下基础的命令行操作,更多sql语言相关的内容,用户可自行学习。
1、mysql命令行登录
mysql-uroot-p
或者
mysql-uroot-h(mysql服务器地址)-p
说明:mysql是命令行登录工具,-u指明登录用户,-p指明登录用户的密码,
后面可以直接接密码。-h后面接服务器的地址,主要用于远程登录mysql服务
器。
‘陆’ 怎样用命令行操作MySQL
用命令行进入mysql方法:
windows打开命了行,在左下角开始,运行,cmd,mysql
然后就要让你数据密码的,当然前提是你的mysql安装正确,网上有好多图文并茂的安装教程。开始,运行,cmd [ ,cd mysql安装目录/bin ], mysql -u userName -p Password先用CD命令进到mysql的BIN目录
然后 mysql -u root -p
再输入ROOT的密码就行了。
希望可以帮到您,谢谢!
‘柒’ 如何用批处理进入mysql命令行客户端进行各种操作
mysql既可以交互式地使用mysql输入查询并且查看结果。也可以以批模式运行mysql。为了做到这些,把你想要运行的命令放在一个文件中,然后告诉mysql从文件读取它的输入:
shell> mysql < batch-file1
如果在Windows下运行mysql,并且文件中有一些可以造成问题的特殊字符,可以这样操作:
C:\> mysql -e "source batch-file"1
如果你需要在命令行上指定连接参数,命令应为:
shell> mysql -h host -u user -p < batch-file
Enter password: ********12
当这样操作mysql时,则创建一个脚本文件,然后执行脚本。
如果你想在语句出现错误的时候仍想继续执行脚本,则应使用–force命令行选项。
‘捌’ MySQL数据库是在命令行下操作的吗
恢复整个数据库首先,如果要恢复的数据库是包含授权表的mysql数据库,你将需要使用--skip-赠款表选项来运行服务器。否则,服务器将抱怨无法找到授权表。恢复表后,执行mysqladmin flush-privileges告诉服务器装载授权表,并用它们来启动。数据库目录到其他地方的原始内容
复制。例如,你可能会使用他们在以后的事后分析检查表(验尸)的崩溃。
酒店与最新的数据库备份文件重装。如果你打算使用由mysqlmp的加载的文件,你需要将它们作为mysql的输入。如果你打算使用直接拷贝从数据库文件(例如,使用tar或CP),然后复制他们直接回数据库目录。然而,在这种情况下,您应关闭服务器之前复制这些文件,然后重新启动它。在备份过程中
重做日志,然后查询来更新数据库表。对于所有可用的更新日志,你可以使用它作为mysql的输入。指定--one-database选项,以使MySQL只对要还原的数据库执行查询。如果您知道需要使用所有的更新日志文件,你可以使用包含以下命令日志的目录:点击看详细%LS-TRL更新(0-9)* | xargs的猫| mysql--。一个数据库DB_NAME
ls命令生成一个单独的日志文件更新列表更新日志文件根据服务器生成的顺序进行排序(你知道,如果你其中的任何文件,排序顺序将改变,这将导致更新日志使用错误的顺序)。
你可能不得不使用一些更新日志。例如,如果日志,因为命名update.392备份,pdate.393等产生的,他们可以重新运行命令:点击看详细%的mysql - 一个数据库DB_NAME <UPDATA。 392
%的mysql - 一个数据库DB_NAME <updata.393
...
如果正在运行恢复并打算使用更新日志恢复由于失策DROP DATA BASE,DROPTABLE或DELETE语句和损失的信息,一定要在开始更新日志中删除这些语句。
中国恢复单个表恢复单个表是很困难的。如果备份文件中的mysqlmp生成的,它只是不包含数据,你想要一个表,你需要提取的相关线路,并用它们作为mysql的输入,这部分比较容易。难度被施加到提取片段更新日志表。你会发现:mysql_find_rows效用在这方面有用的,它可以从更新的多线查询日志提取。另一种可能性是使用另一台服务器
恢复整个数据库,然后你想要的表中的文件复制到原始数据库。这其实是很容易的!当文件被复制回数据库目录,确保原始数据库服务器关闭。
‘玖’ 怎么用mysql命令行登录,进入mysql命令行
用命令行进入mysql方法:
windows打开命了行,在左下角开始,运行,cmd,mysql
然后就要让你数据密码的,当然前提是你的mysql安装正确,网上有好多图文并茂的安装教程。开始,运行,cmd [ ,cd mysql安装目录/bin ], mysql -u userName -p Password先用CD命令进到mysql的BIN目录
然后 mysql -u root -p
再输入ROOT的密码就行了。