01:生产环境上,使用update命令误更新了一条记录中的单个字段的值;
02:生产环境上是开启了binlog日志的,模式为row模式;未开启gtid;
03:需要进行数据恢复,mysql服务肯定是不能停止的了;
#### 数据库版本、binlog的配置
mysql> select @@version,@@global.log_bin,@@global.log_bin_basename,@@binlog_format;
+------------+------------------+------------------------------------------+-----------------+
| @@version | @@global.log_bin | @@global.log_bin_basename | @@binlog_format |
+------------+------------------+------------------------------------------+-----------------+
| 5.7.28-log | 1 | /data/mysql/3306/logs/binlog/21_mysql_bin| ROW |
+------------+------------------+------------------------------------------+-----------------+
1 row in set (0.00 sec)
#### binlog的其它配置
mysql> select @@global.binlog_row_image,@@binlog_rows_query_log_events;
+---------------------------+--------------------------------+
| @@global.binlog_row_image | @@binlog_rows_query_log_events |
+---------------------------+--------------------------------+
| FULL | 1 |
+---------------------------+--------------------------------+
1 row in set (0.00 sec)
#### 特别说明
binlog_row_image
# 默认值是full,对inset\update\delete语句进行详细的记录
binlog_rows_query_log_events
# 默认值是off,针对row模式,可在线设置;若为on可以在mysql中用show binlog events in "二
# 进制日志文件名";命令查看二进制日志# 文件中记录的DML语句和其它信息;
#### 当前binlog日志的状态
mysql> show master status\G
*************************** 1. row ***************************
File: 21_mysql_bin.000001
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
#### 创建lili库,并进入到lili库下面
create database if not exists lili character set utf8 collate utf8_general_ci;
use lili;
#### 创建test1表
create table if not exists test1(
id int unsigned not null auto_increment comment"序列",
name varchar(20) not null comment"姓名",
sex enum("男","女") not null comment"性别",
age tinyint unsigned not null comment"年龄",
height float(5,2) not null comment"身高",
weight float(5,2) not null comment"体重",
gr_sc varchar(30) not null comment"毕业院校",
education varchar(10) not null comment"学历",
phone char(11) not null comment"电话号码",
email varchar(30) not null comment"邮箱",
salary float(9,2) unsigned not null comment"薪资",
primary key(id)
)engine=innodb character set utf8 collate utf8_general_ci comment"测试表1";
#### 查看test1表的表结构
mysql> desc test1;
+-----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| sex | enum('男','女') | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| height | float(5,2) | NO | | NULL | |
| weight | float(5,2) | NO | | NULL | |
| gr_sc | varchar(30) | NO | | NULL | |
| education | varchar(10) | NO | | NULL | |
| phone | char(11) | NO | | NULL | |
| email | varchar(30) | NO | | NULL | |
| salary | float(9,2) unsigned | NO | | NULL | |
+-----------+---------------------+------+-----+---------+----------------+
11 rows in set (0.00 sec)
# 注意:id字段为auto_increment,sex字段为enum数据类型
# 注意:sex字段的数据类型为enum
#### 往test1表中插入几条数据
insert into test1(name,sex,age,height,weight,gr_sc,education,phone,email,salary) values
("cl01","男",21,171,65.5,"四川信息1","专科","18382024221","[email protected]",6000),
("cl02","男",22,172,65.5,"四川信息2","专科","18382024222","[email protected]",6200),
("cl03","男",23,173,65.5,"四川信息3","专科","18382024223","[email protected]",6300),
("cl04","男",24,174,65.5,"四川信息4","专科","18382024224","[email protected]",6400),
("cl05","男",25,175,65.5,"四川信息5","专科","18382024225","[email protected]",6500),
("cl06","男",26,176,65.5,"四川信息6","专科","18382024226","[email protected]",6600),
("cl07","男",27,177,65.5,"四川信息7","专科","18382024227","[email protected]",6700),
("cl08","男",28,178,65.5,"四川信息8","专科","18382024228","[email protected]",6800),
("cl09","男",29,179,65.5,"四川信息9","专科","18382024229","[email protected]",6900),
("cl10","男",30,180,65.5,"四川信息10","专科","18382024230","[email protected]",7000);
commit;
#### 查看test1表中的数据
mysql> select * from test1;
+----+------+-----+-----+--------+--------+----------------+-----------+-------------+------------------+---------+
| id | name | sex | age | height | weight | gr_sc | education | phone | email | salary |
+----+------+-----+-----+--------+--------+----------------+-----------+-------------+------------------+---------+
| 1 | cl01 | 男 | 21 | 171.00 | 65.50 | 四川信息1 | 专科 | 18382024221 | [email protected] | 6000.00 |
| 2 | cl02 | 男 | 22 | 172.00 | 65.50 | 四川信息2 | 专科 | 18382024222 | [email protected] | 6200.00 |
| 3 | cl03 | 男 | 23 | 173.00 | 65.50 | 四川信息3 | 专科 | 18382024223 | [email protected] | 6300.00 |
| 4 | cl04 | 男 | 24 | 174.00 | 65.50 | 四川信息4 | 专科 | 18382024224 | [email protected] | 6400.00 |
| 5 | cl05 | 男 | 25 | 175.00 | 65.50 | 四川信息5 | 专科 | 18382024225 | [email protected] | 6500.00 |
| 6 | cl06 | 男 | 26 | 176.00 | 65.50 | 四川信息6 | 专科 | 18382024226 | [email protected] | 6600.00 |
| 7 | cl07 | 男 | 27 | 177.00 | 65.50 | 四川信息7 | 专科 | 18382024227 | [email protected] | 6700.00 |
| 8 | cl08 | 男 | 28 | 178.00 | 65.50 | 四川信息8 | 专科 | 18382024228 | [email protected] | 6800.00 |
| 9 | cl09 | 男 | 29 | 179.00 | 65.50 | 四川信息9 | 专科 | 18382024229 | [email protected] | 6900.00 |
| 10 | cl10 | 男 | 30 | 180.00 | 65.50 | 四川信息10 | 专科 | 18382024230 | [email protected] | 7000.00 |
+----+------+-----+-----+--------+--------+----------------+-----------+-------------+------------------+---------+
10 rows in set (0.00 sec)
#### 更新了name字段等于chenliang08,条件是id等于8
mysql> select * from lili.test1 where id=8;
+----+------+-----+-----+--------+--------+---------------+-----------+-------------+------------------+---------+
| id | name | sex | age | height | weight | gr_sc | education | phone | email | salary |
+----+------+-----+-----+--------+--------+---------------+-----------+-------------+------------------+---------+
| 8 | cl08 | 男 | 28 | 178.00 | 65.50 | 四川信息8 | 专科 | 18382024228 | [email protected] | 6800.00 |
+----+------+-----+-----+--------+--------+---------------+-----------+-------------+------------------+---------+
1 row in set (0.00 sec)
mysql> update lili.test1 set name="chenliang08" where id=8;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from lili.test1 where id=8;
+----+-------------+-----+-----+--------+--------+---------------+-----------+-------------+------------------+---------+
| id | name | sex | age | height | weight | gr_sc | education | phone | email | salary |
+----+-------------+-----+-----+--------+--------+---------------+-----------+-------------+------------------+---------+
| 8 | chenliang08 | 男 | 28 | 178.00 | 65.50 | 四川信息8 | 专科 | 18382024228 | [email protected] | 6800.00 |
+----+-------------+-----+-----+--------+--------+---------------+-----------+-------------+------------------+---------+
1 row in set (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
#### 当前业务还在产生数据
insert into lili.test1(name,sex,age,height,weight,gr_sc,education,phone,email,salary) values
("cl11","男",21,171,65.5,"四川信息11","专科","18382024211","[email protected]",6000);
commit;
01:在得知使用update更新错了一条记录中单个字段的数据时,应马上要做的事情:
A:使用show master status;命令查看看当前binlog是哪个文件,并记录下来;
B:执行flush logs命令重新生成新的binlog日志文件来记录sql语句产生的记录;
C:确定删除数据的命令是什么,这里是:update lili.test1 set name="chenliang08" where id=8;
02:对lili.test1表中id等于8的记录加一个"意向共享锁(IS)",严格按照事务流程来,不要结束事务,不要退出当前会话;
start transaction;
select * from lili.test1 where id=8 lock in share mode;
....不要结束事务,不要退出当前会话........................
03:对"01阶段中"的"A步骤"中的binlog日志做备份(复制一份到其它目录下,防止损坏源文件);
04:在mysql中使用"show binlog events in "01阶段中A步骤记录的binlog文件名";"命令找到
update lili.test1 set name="chenliang08" where id=8;这条语句(事务)的起始/结束pos点
05:用mysqlbinlog命令结合"04阶段"找到的起始pos点和结束pos点对03步骤复制的binlog文件进行解析并生成新的文件;
06:在"05阶段"中新生成的文件中进行处理; 但得在最终的sql文件中还得添加些内容;
-- 在文件的第1行和2行加上以下内容;
start transaction;
select * from lili.test1 where id=8 for update;
-- 在文件的末属加上
commit;
07:结束"02阶段"的事务;
08:将"06阶段"处理的数据,在mysql实例中执行;
解决思路中的01阶段
#### 查看当前binlog的信息,并记录下来
mysql> show master status\G
*************************** 1. row ***************************
File: 21_mysql_bin.000001
Position: 4318
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
#### 执行命令重新生成binlog文件
mysql> flush logs;
解决思路中的02阶段
解决思路中的03阶段
[root@node21 ~]# cp -a /data/mysql/3306/logs/binlog/21_mysql_bin.000001 /tmp/
[root@node21 ~]# ll /tmp/21_mysql_bin.000001
-rw-r----- 1 mysql mysql 4368 Jul 7 20:26 /tmp/21_mysql_bin.000001
解决思路中的04阶段
最终的结果是:开始的pos点为:3245 结束的pos点:3757
解决思路中的05阶段
##### 进入到之前备份binlog文件的目录
[root@node21 tmp]# pwd
/tmp
[root@node21 tmp]# ll 21_mysql_bin.000001
-rw-r----- 1 mysql mysql 2017 3月 3 19:22 21_mysql_bin.000001
#### 对binlog日志进行解释并保存到a.txt文件中
[root@node21 tmp]# mysqlbinlog --base64-output=decode-rows -vv --start-position=3245 --stop-position=3757 21_mysql_bin.000001 >a.txt
解决思路中的06阶段
############################# 处理 a.txt文件,生成 b.txt文件 ######################
[root@node21 tmp]# sed -n '/^###/'p a.txt >b.txt
[root@node21 tmp]# cat b.txt
### UPDATE `lili`.`test1`
### WHERE
### @1=8 /* INT meta=0 nullable=0 is_null=0 */
### @2='cl08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
### @3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */
### @4=28 /* TINYINT meta=0 nullable=0 is_null=0 */
### @5=178 /* FLOAT meta=4 nullable=0 is_null=0 */
### @6=65.5 /* FLOAT meta=4 nullable=0 is_null=0 */
### @7='四川信息8' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
### @8='专科' /* VARSTRING(30) meta=30 nullable=0 is_null=0 */
### @9='18382024228' /* STRING(33) meta=65057 nullable=0 is_null=0 */
### @10='[email protected]' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
### @11=6800 /* FLOAT meta=4 nullable=0 is_null=0 */
### SET
### @1=8 /* INT meta=0 nullable=0 is_null=0 */
### @2='chenliang08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
### @3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */
### @4=28 /* TINYINT meta=0 nullable=0 is_null=0 */
### @5=178 /* FLOAT meta=4 nullable=0 is_null=0 */
### @6=65.5 /* FLOAT meta=4 nullable=0 is_null=0 */
### @7='四川信息8' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
### @8='专科' /* VARSTRING(30) meta=30 nullable=0 is_null=0 */
### @9='18382024228' /* STRING(33) meta=65057 nullable=0 is_null=0 */
### @10='[email protected]' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
### @11=6800 /* FLOAT meta=4 nullable=0 is_null=0 */
############################# 处理 b.txt文件,生成 c.txt文件 ######################
[root@node21 tmp]# sed 's/### //g' b.txt >c.txt
[root@node21 tmp]# cat c.txt
UPDATE `lili`.`test1`
WHERE
@1=8 /* INT meta=0 nullable=0 is_null=0 */
@2='cl08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
@3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */
@4=28 /* TINYINT meta=0 nullable=0 is_null=0 */
@5=178 /* FLOAT meta=4 nullable=0 is_null=0 */
@6=65.5 /* FLOAT meta=4 nullable=0 is_null=0 */
@7='四川信息8' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@8='专科' /* VARSTRING(30) meta=30 nullable=0 is_null=0 */
@9='18382024228' /* STRING(33) meta=65057 nullable=0 is_null=0 */
@10='[email protected]' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@11=6800 /* FLOAT meta=4 nullable=0 is_null=0 */
SET
@1=8 /* INT meta=0 nullable=0 is_null=0 */
@2='chenliang08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
@3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */
@4=28 /* TINYINT meta=0 nullable=0 is_null=0 */
@5=178 /* FLOAT meta=4 nullable=0 is_null=0 */
@6=65.5 /* FLOAT meta=4 nullable=0 is_null=0 */
@7='四川信息8' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@8='专科' /* VARSTRING(30) meta=30 nullable=0 is_null=0 */
@9='18382024228' /* STRING(33) meta=65057 nullable=0 is_null=0 */
@10='[email protected]' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@11=6800 /* FLOAT meta=4 nullable=0 is_null=0 */
############################# 处理 c.txt文件,生成 d.txt文件 ####################
[root@node21 tmp]# sed '/WHERE/{:a;N;/SET/!ba;s#WHERE#set#g}' c.txt >d.txt
[root@node21 tmp]# cat d.txt
UPDATE `lili`.`test1`
set
@1=8 /* INT meta=0 nullable=0 is_null=0 */
@2='cl08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
@3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */
@4=28 /* TINYINT meta=0 nullable=0 is_null=0 */
@5=178 /* FLOAT meta=4 nullable=0 is_null=0 */
@6=65.5 /* FLOAT meta=4 nullable=0 is_null=0 */
@7='四川信息8' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@8='专科' /* VARSTRING(30) meta=30 nullable=0 is_null=0 */
@9='18382024228' /* STRING(33) meta=65057 nullable=0 is_null=0 */
@10='[email protected]' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@11=6800 /* FLOAT meta=4 nullable=0 is_null=0 */
SET
@1=8 /* INT meta=0 nullable=0 is_null=0 */
@2='chenliang08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
@3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */
@4=28 /* TINYINT meta=0 nullable=0 is_null=0 */
@5=178 /* FLOAT meta=4 nullable=0 is_null=0 */
@6=65.5 /* FLOAT meta=4 nullable=0 is_null=0 */
@7='四川信息8' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@8='专科' /* VARSTRING(30) meta=30 nullable=0 is_null=0 */
@9='18382024228' /* STRING(33) meta=65057 nullable=0 is_null=0 */
@10='[email protected]' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@11=6800 /* FLOAT meta=4 nullable=0 is_null=0 */
############################# 处理 d.txt文件,生成 e.txt文件 ##################
[root@node21 tmp]# sed '/SET/{:a;N;/\n/!ba;s#SET#where#g}' d.txt >e.txt
[root@node21 tmp]# cat e.txt
UPDATE `lili`.`test1`
set
@1=8 /* INT meta=0 nullable=0 is_null=0 */
@2='cl08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
@3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */
@4=28 /* TINYINT meta=0 nullable=0 is_null=0 */
@5=178 /* FLOAT meta=4 nullable=0 is_null=0 */
@6=65.5 /* FLOAT meta=4 nullable=0 is_null=0 */
@7='四川信息8' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@8='专科' /* VARSTRING(30) meta=30 nullable=0 is_null=0 */
@9='18382024228' /* STRING(33) meta=65057 nullable=0 is_null=0 */
@10='[email protected]' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@11=6800 /* FLOAT meta=4 nullable=0 is_null=0 */
where
@1=8 /* INT meta=0 nullable=0 is_null=0 */
@2='chenliang08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
@3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */
@4=28 /* TINYINT meta=0 nullable=0 is_null=0 */
@5=178 /* FLOAT meta=4 nullable=0 is_null=0 */
@6=65.5 /* FLOAT meta=4 nullable=0 is_null=0 */
@7='四川信息8' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@8='专科' /* VARSTRING(30) meta=30 nullable=0 is_null=0 */
@9='18382024228' /* STRING(33) meta=65057 nullable=0 is_null=0 */
@10='[email protected]' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@11=6800 /* FLOAT meta=4 nullable=0 is_null=0 */
################ 处理 e.txt文件,生成 f.txt文件,对 f.txt文件处理后生成 i.txt #############
01:执行的update命令为:update lili.test1 set name="chenliang08" where id=8;
02:查看lili.tst1表的表结构
mysql> desc lili.test1;
+-----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| sex | enum('男','女') | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| height | float(5,2) | NO | | NULL | |
| weight | float(5,2) | NO | | NULL | |
| gr_sc | varchar(30) | NO | | NULL | |
| education | varchar(10) | NO | | NULL | |
| phone | char(11) | NO | | NULL | |
| email | varchar(30) | NO | | NULL | |
| salary | float(9,2) unsigned | NO | | NULL | |
+-----------+---------------------+------+-----+---------+----------------+
11 rows in set (0.00 sec)
03:对e.txt文件做处理,生成f.txt文件
[root@node21 tmp]# sed '/set/{:a;N;/where/!ba;s#@2=#name=#g}' e.txt >f.txt
[root@node21 tmp]# cat f.txt
UPDATE `lili`.`test1`
set
@1=8 /* INT meta=0 nullable=0 is_null=0 */
name='cl08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
@3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */
@4=28 /* TINYINT meta=0 nullable=0 is_null=0 */
@5=178 /* FLOAT meta=4 nullable=0 is_null=0 */
@6=65.5 /* FLOAT meta=4 nullable=0 is_null=0 */
@7='四川信息8' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@8='专科' /* VARSTRING(30) meta=30 nullable=0 is_null=0 */
@9='18382024228' /* STRING(33) meta=65057 nullable=0 is_null=0 */
@10='[email protected]' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@11=6800 /* FLOAT meta=4 nullable=0 is_null=0 */
where
@1=8 /* INT meta=0 nullable=0 is_null=0 */
@2='chenliang08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
@3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */
@4=28 /* TINYINT meta=0 nullable=0 is_null=0 */
@5=178 /* FLOAT meta=4 nullable=0 is_null=0 */
@6=65.5 /* FLOAT meta=4 nullable=0 is_null=0 */
@7='四川信息8' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@8='专科' /* VARSTRING(30) meta=30 nullable=0 is_null=0 */
@9='18382024228' /* STRING(33) meta=65057 nullable=0 is_null=0 */
@10='[email protected]' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@11=6800 /* FLOAT meta=4 nullable=0 is_null=0 */
[root@node21 tmp]# sed '/where/{:a;N;/\n/!ba;s#@1=#id=#g}' f.txt >i.txt
[root@node21 tmp]# cat i.txt
UPDATE `lili`.`test1`
set
@1=8 /* INT meta=0 nullable=0 is_null=0 */
name='cl08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
@3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */
@4=28 /* TINYINT meta=0 nullable=0 is_null=0 */
@5=178 /* FLOAT meta=4 nullable=0 is_null=0 */
@6=65.5 /* FLOAT meta=4 nullable=0 is_null=0 */
@7='四川信息8' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@8='专科' /* VARSTRING(30) meta=30 nullable=0 is_null=0 */
@9='18382024228' /* STRING(33) meta=65057 nullable=0 is_null=0 */
@10='[email protected]' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@11=6800 /* FLOAT meta=4 nullable=0 is_null=0 */
where
id=8 /* INT meta=0 nullable=0 is_null=0 */
@2='chenliang08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
@3=1 /* ENUM(1 byte) meta=63233 nullable=0 is_null=0 */
@4=28 /* TINYINT meta=0 nullable=0 is_null=0 */
@5=178 /* FLOAT meta=4 nullable=0 is_null=0 */
@6=65.5 /* FLOAT meta=4 nullable=0 is_null=0 */
@7='四川信息8' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@8='专科' /* VARSTRING(30) meta=30 nullable=0 is_null=0 */
@9='18382024228' /* STRING(33) meta=65057 nullable=0 is_null=0 */
@10='[email protected]' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
@11=6800 /* FLOAT meta=4 nullable=0 is_null=0 */
############################# 处理 i.txt文件,生成 j.txt文件 ####################
[root@node21 tmp]# sed '/@/'d i.txt >j.txt
[root@node21 tmp]# cat j.txt
UPDATE `lili`.`test1`
set
name='cl08' /* VARSTRING(60) meta=60 nullable=0 is_null=0 */
where
id=8 /* INT meta=0 nullable=0 is_null=0 */
############################# 处理 j.txt文件,生成 k.txt文件 ##################
[root@node21 tmp]# sed 's#/.*##g' j.txt >k.txt
[root@node21 tmp]# cat k.txt
UPDATE `lili`.`test1`
set
name='cl08'
where
id=8
############################# 处理 k.txt文件,生成 aa.sql文件 ##################
[root@node21 tmp]# sed -r 's#(id=.*)#\1;#g' k.txt >>aa.sql
[root@node21 tmp]# cat aa.sql
UPDATE `lili`.`test1`
set
name='cl08'
where
id=8 ;
############################# 在aa.sql文件前面添加相关内容 #################
[root@node21 tmp]# sed -i '1i start transaction;\nselect * from lili.test1 where id=8 for update;\n' aa.sql
[root@node21 tmp]# cat aa.sql
start transaction;
select * from lili.test1 where id=8 for update;
UPDATE `lili`.`test1`
set
name='cl08'
where
id=8 ;
############################# 在aa.sql文件后面追加commit;命令#################
[root@node21 tmp]# sed -i '$a \\ncommit;' aa.sql
[root@node21 tmp]# cat aa.sql
start transaction;
select * from lili.test1 where id=8 for update;
UPDATE `lili`.`test1`
set
name='cl08'
where
id=8 ;
commit;
解决思路中的07阶段
解决思路中的08阶段