MySQL模拟:线上误update的恢复

作为DBA,细心、沉稳是首要的基本素质。不过总有那么一会心烦意乱或者开发同学出现误操作之类的。。。这里模拟一个误update操作,然后恢复。

如果开发同学有误操作之后最好先别乱动生产环境,需要记录几个信息给DBA同学来恢复数据。

1:binlog_format、autocommit、binlog位置、误操作的时间点

mysql> SHOW VARIABLES LIKE ‘%binlog_format%‘;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> SHOW MASTER STATUS \G
*************************** 1. row ***************************
            File: binlog.000048
        Position: 442
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
时间点大约在2015年6月29日 16:50:00 - 2015年6月29日 17:50:00之间
mysql> SHOW VARIABLES LIKE ‘%autocommit%‘;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

  

2:如果在一个事物内的操作,同时autocommit是off的话,可以直接尝试回滚。看看是否可以恢复过来。

3:原始数据

mysql> select * from t1.t1;
+------+------+
| id1  | name |
+------+------+
|    8 | u11  |
|    8 | u12  |
|    8 | u13  |
|    8 | u14  |
|    8 | u15  |
|    8 | name |
|    8 | name |
|    8 | name |
|    8 | name |
+------+------+
9 rows in set (0.00 sec)

误操作之后

mysql> update t1.t1 set id1 = 10;
Query OK, 9 rows affected (0.00 sec)
Rows matched: 9  Changed: 9  Warnings: 0

mysql> commit;
Query OK, 0 rows affected (0.01 sec)

  

恢复开始:

1:找到当前写入的binlog信息:

mysql> SHOW MASTER STATUS \G
*************************** 1. row ***************************
            File: binlog.000048
        Position: 777
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

2:估计误操作的时间点:2015-06-29 16:50:00和2015-06-29 17:20:00 之间,

3:另外开一个窗口解析binlog

mysqlbinlog --start-datetime=‘2015-06-29 01:30:00‘ --stop-datetime=‘2015-06-29 02:10:00‘ -vv binlog.000048
[[email protected] mysqllog]# mysqlbinlog --start-datetime=‘2015-06-29 01:30:00‘ --stop-datetime=‘2015-06-29 02:10:00‘ -vv binlog.000048
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#150629  1:44:39 server id 1  end_log_pos 107 	Start: binlog v 4, server v 5.5.20-log created 150629  1:44:39
# Warning: this binlog is either in use or was not closed properly.
BINLOG ‘
dwWRVQ8BAAAAZwAAAGsAAAABAAQANS41LjIwLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
‘/*!*/;
# at 107
#150629  1:45:06 server id 1  end_log_pos 173 	Query	thread_id=7	exec_time=0	error_code=0
SET TIMESTAMP=1435567506/*!*/;
SET @@session.pseudo_thread_id=7/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 173
# at 215
#150629  1:44:56 server id 1  end_log_pos 215 	Table_map: `t1`.`t1` mapped to number 33
#150629  1:44:56 server id 1  end_log_pos 415 	Update_rows: table id 33 flags: STMT_END_F

BINLOG ‘
iAWRVRMBAAAAKgAAANcAAAAAACEAAAAAAAEAAnQxAAJ0MQACA/4C/jwD
iAWRVRgBAAAAyAAAAJ8BAAAAACEAAAAAAAEAAv///AYAAAADdTEx/AgAAAADdTEx/AYAAAADdTEy
/AgAAAADdTEy/AYAAAADdTEz/AgAAAADdTEz/AYAAAADdTE0/AgAAAADdTE0/AYAAAADdTE1/AgA
AAADdTE1/AYAAAAEbmFtZfwIAAAABG5hbWX8BgAAAARuYW1l/AgAAAAEbmFtZfwGAAAABG5hbWX8
CAAAAARuYW1l/AYAAAAEbmFtZfwIAAAABG5hbWU=
‘/*!*/;
### UPDATE `t1`.`t1`
### WHERE
###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u11‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u11‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u12‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u12‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u13‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u13‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u14‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u14‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u15‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u15‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=6 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
# at 415
#150629  1:45:06 server id 1  end_log_pos 442 	Xid = 313
COMMIT/*!*/;
# at 442
#150629  2:00:29 server id 1  end_log_pos 508 	Query	thread_id=7	exec_time=0	error_code=0
SET TIMESTAMP=1435568429/*!*/;
BEGIN
/*!*/;
# at 508
# at 550
#150629  2:00:27 server id 1  end_log_pos 550 	Table_map: `t1`.`t1` mapped to number 33
#150629  2:00:27 server id 1  end_log_pos 750 	Update_rows: table id 33 flags: STMT_END_F

BINLOG ‘
KwmRVRMBAAAAKgAAACYCAAAAACEAAAAAAAEAAnQxAAJ0MQACA/4C/jwD
KwmRVRgBAAAAyAAAAO4CAAAAACEAAAAAAAEAAv///AgAAAADdTEx/AoAAAADdTEx/AgAAAADdTEy
/AoAAAADdTEy/AgAAAADdTEz/AoAAAADdTEz/AgAAAADdTE0/AoAAAADdTE0/AgAAAADdTE1/AoA
AAADdTE1/AgAAAAEbmFtZfwKAAAABG5hbWX8CAAAAARuYW1l/AoAAAAEbmFtZfwIAAAABG5hbWX8
CgAAAARuYW1l/AgAAAAEbmFtZfwKAAAABG5hbWU=
‘/*!*/;
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u11‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u11‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u12‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u12‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u13‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u13‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u14‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u14‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u15‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u15‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
# at 750
#150629  2:00:29 server id 1  end_log_pos 777 	Xid = 318
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET [email protected]_COMPLETION_TYPE*/;

  

找到误操作的update:

### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u11‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u11‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u12‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u12‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u13‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u13‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u14‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u14‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u15‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘u15‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
### UPDATE `t1`.`t1`
### WHERE
###   @1=8 /* INT meta=0 nullable=1 is_null=0 */
###   @2=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */

处理之后的误操作语句

UPDATE `t1`.`t1`
WHERE
  id1=8 /* INT meta=0 nullable=1 is_null=0 */
  name=‘u11‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
SET
  id1=10 /* INT meta=0 nullable=1 is_null=0 */
  name=‘u11‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
UPDATE `t1`.`t1`
WHERE
  id1=8 /* INT meta=0 nullable=1 is_null=0 */
  name=‘u12‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
SET
  id1=10 /* INT meta=0 nullable=1 is_null=0 */
  name=‘u12‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
UPDATE `t1`.`t1`
WHERE
  id1=8 /* INT meta=0 nullable=1 is_null=0 */
  name=‘u13‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
SET
  id1=10 /* INT meta=0 nullable=1 is_null=0 */
  name=‘u13‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
UPDATE `t1`.`t1`
WHERE
  id1=8 /* INT meta=0 nullable=1 is_null=0 */
  name=‘u14‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
SET
  id1=10 /* INT meta=0 nullable=1 is_null=0 */
  name=‘u14‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
UPDATE `t1`.`t1`
WHERE
  id1=8 /* INT meta=0 nullable=1 is_null=0 */
  name=‘u15‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
SET
  id1=10 /* INT meta=0 nullable=1 is_null=0 */
  name=‘u15‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
UPDATE `t1`.`t1`
WHERE
  id1=8 /* INT meta=0 nullable=1 is_null=0 */
  name=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
SET
  id1=10 /* INT meta=0 nullable=1 is_null=0 */
  name=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
UPDATE `t1`.`t1`
WHERE
  id1=8 /* INT meta=0 nullable=1 is_null=0 */
  name=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
SET
  id1=10 /* INT meta=0 nullable=1 is_null=0 */
  name=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
UPDATE `t1`.`t1`
WHERE
  id1=8 /* INT meta=0 nullable=1 is_null=0 */
  name=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
SET
  id1=10 /* INT meta=0 nullable=1 is_null=0 */
  name=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */
UPDATE `t1`.`t1`
WHERE
  id1=8 /* INT meta=0 nullable=1 is_null=0 */
  name=‘name‘ /* STRING(60) meta=65084 nullable=1 is_null=0 */

根据对应的语句一句一句恢复即可。

  

时间: 2024-10-10 02:29:47

MySQL模拟:线上误update的恢复的相关文章

[MySQL CPU]线上飙升800%,load达到12的解决过程

接到报警通知,负载过高,达到800%,load也过高,有11了. MySQL版本号为5.6.12-log 1 top 之后,确实是mysqld进程占领了全部资源. 2 查看error日志,无不论什么异常 3 show eninge innodb status\G,没有死锁信息. 4 show full processlist; 没有耗时很大的慢sql再跑.看并发,当前的线程总数量也才30个左右. 5 查看iostat,读写正常. 究竟是什么问题呢?查看slow log,发现例如以下SQL,频繁运

7月26日云栖精选夜读:MySQL金融版线上发布会:它为什么是金融企业的首选_技术大佬、产品和神秘嘉宾本位“演绎”

原文地址 2017年8月10日,云栖社区将迎来一场特殊的直播--阿里云数据库MySQL金融版线上发布会. 届时,我们不仅请到了阿里云金融业务部总监九河.阿里云数据库掌门人褚霸以及阿里云数据库产品专家乙休来一起宣布这个好消息,同时还邀请到一位在金融界绝对是重磅级人物的神秘嘉宾,一起来聊一聊产品发布背后的故事. 热点热议 MySQL金融版线上发布会:它为什么是金融企业的首选,技术大佬.产品和神秘嘉宾本位"演绎" 作者:好麦 CVPR论文解读 | 剁手有了新方法,明星同款边看边买 作者:仁太

【原创】MySQL Replay线上流量压测工具

一. 背景 去年做过一次mysql trace 重放的测试,由于performance schema本身采集样本的长度等限制,实际回放的成功率比较低. 最近找到一款开源的工具,基于TCPCopy实现了线上流量的仿真测试,这款开源工具是网易的王斌开发,后面很多公司的模拟在线测试都是基于TCPCopy实现. https://github.com/session-replay-tools/mysql-replay-module 1.实现原理 生产服务器上部署TCPCopy, 包捕获是在数据链路层增加一

线上一个数组查询遇到的坑

背景 中午12点半,接到了线上MongoDB 数据库异常的告警通报: "CPU不间断飙升到百分百,业务也相应出现了抖动现象." 通过排查数据库主节点的日志,发现了这样的一个慢语句: 2019-03-07T10:56:43.470+0000 I COMMAND [conn2544772] command nlp.ApplicationDevice appName: "nlp" command: find { find: "ApplicationDevice&

记一次线上mysql主从架构异常的恢复经历

前提:之前一位同事负责的一位客户,因后期转到devops小组.所以将此用户交接给我,在后期发现有一套数据库主从环境,从库已经无法正常使用.查看slave 状态为: 其中:Master_Log_File:#此处显示的bin-log已经在master上找不见了Read_Master_Log_Pos:#显示的行数也就存在没有意义了Slave_IO_Running:NO #salve io进程显示为no,无法从master同步数据因此判定从库已经无法使用,需要及时修复.保证主从架构正常使用. 以下是恢复

线上MYSQL同步报错故障处理总结(转)

前言 在发生故障切换后,经常遇到的问题就是同步报错,数据库很小的时候,dump完再导入很简单就处理好了,但线上的数据库都150G-200G,如果用单纯的这种方法,成本太高,故经过一段时间的摸索,总结了几种处理方法. 生产环境架构图 目前现网的架构,保存着两份数据,通过异步复制做的高可用集群,两台机器提供对外服务.在发生故障时,切换到slave上,并将其变成master,坏掉的机器反向同步新的master,在处理故障时,遇到最多的就是主从报错.下面是我收录下来的报错信息. 常见错误 最常见的3种情

mysql权限的误操作的恢复

mysql权限的误操作的恢复 原因:由于误操作,我把repl用户授予了所有权限,但删除了数据库中的其他用户及权限,因此repl用户虽然具有操作所有数据库的权限,但没有grant权限,所以若想授予其他用户权限,来管理数据库,出现这种状况就酷毙了,没有授予权限怎麽办? 误操作过程: mysql >grant all on *.* to 'repl'@'192.168.1.%' identified by '123456'; mysql> flush privileges; 授予完以后,我把其他的所

线上mysql内存持续增长直至内存溢出被killed分析

来新公司前,领导就说了,线上生产环境Mysql库经常会发生日间内存爆掉被killed的情况,结果来到这第一天,第一件事就是要根据线上服务器配置优化配置,同时必须找出现在mysql内存持续增加爆掉的原因,虽然我主业已经不是数据库更不是dba了. 这个业务上基本山算是OLTP,盘中都是很简单的SQL,所以性能上虽然有些SQL有些慢,但看过slow-log和performance_schema,可以忽略不计. 初步了解,应用是java开发的,但是应用端没有出现过OOM的情况,也不见卡死或者越来越慢的情

如何有效的跟踪线上 MySQL 实例表和权限的变更

介绍 从系统管理员或 DBA 的角度来讲, 总期望将线上的各种变更限制在一个可控的范围内, 减少一些不确定的因素. 这样做有几点好处: 1. 记录线上的库表变更; 2. 对线上的库表变更有全局的了解; 3. 如果有问题, 方便回滚操作; 从这三点来看, 有很多种方式可以实现, 比如通过 migrate 等工具强制所有的操作都以统一的方式执行, 这需要开发人员做更多的配合, 所以这类工具在非规模话的业务场景中较难实现; 另外管理员或 DBA 也可以通过知识库比如 redmine 等类似的方式记录变