表示 进入内容 11028
下一步 10 较早的记录 »
Displaying posts with tag: MySQL解错方案 (reset)
纳尼,mysqldump导出的数据居然少了40万?

0、导读

   用mysqldump备份数据时,加上 -w 条件选项过滤部分数据,发现导出结果比实际少了40万,什么情况?

   本文约1500字,阅读时间约5分钟。

1、问题

   我的朋友小文前几天遇到一个怪事,他用mysqldump备份数据时,加上了 -w 选项过滤部分数据,发现导出的数据比实际上少了40万。

   要进行备份表DDL见下:

   CREATE TABLE `oldbiao` (

   `aaaid` int(11) NOT NULL,

   `bbbid` int(11) NOT NULL,

   `cccid` int(11) NOT NULL,

   `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

   `dddid` int(11) DEFAULT NULL,

   KEY `index01` (`ccccid`),

   KEY `index02` (`dddid`,`time`)

   ) ENGINE=InnoDB DEFAULT …

[获取更多]
今天你检查备份了吗?

   

0、导读

《炉石传说》游戏数据库回档事件反思

今天引爆各大技术群的事情就是网易游戏《炉石传说》游戏数据库发生宕机并引发数据丢失事故,最终决定回档并后续补偿玩家损失。详情可见官网公告:http://hs.blizzard.cn/articles/16/8565

我以前也在搜狐畅游(http://www.changyou.com,NASDAQ:CYOU)负责游戏数据库维护,也遇到过因为服务器故障最终导致回档的事故,不过都没像这次炉石搞这么大动作。在这里我并不想借机调侃消费他们或搞营销,只想和大家一起聊聊作为DBA,应该注意哪些事。

我们从公告的内容中,我们看到了几个问题:

  1. 公告发布时间是2017.1.18 18点,决定回档到2017.1.14 …

[获取更多]
数据导入主键冲突问题

0、导读

用LOAD DATA导入数据却一直提示主键冲突问题解决案例。

1、问题描述

有位学生遇到数据导入时一直提示1022主键冲突问题,而导入的数据明明完全没有任何冲突,百思不得其解,请我帮忙协查。

下面是关于该问题现象描述:

1、表结构DDL

CREATE TABLE `wcp` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`txcode` char(4) NOT NULL,

`notice_from` enum(‘page’,’server’) ,

`message` varchar(600) NOT NULL ,

`signature` varchar(260) NOT NULL ,

`payment_no` char(30) NOT NULL ,

`notice_time` int(10) unsigned NOT NULL COMMENT ,

`dealt_ok` tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT,

 PRIMARY KEY (`id`)

) ENGINE=ARCHIVE AUTO_INCREMENT=117 DEFAULT CHARSET=utf8;

[获取更多]
MySQL复制线程长时间Opening tables

0、导读

   在slave上,发现SQL thread长时间处于Opening tables状态

1、问题描述

   朋友的数据库,做了主从replication复制。在slave实例上,SQL thread的长时间处于Opening tables状态,复制进程异常。

   mysql> show processlist;

   +—-+————-+———-+——+———+——-+—————————————-+——————+

   | Id | User        | Host      | db   | Command | Time  | State                                  | Info             |

   +—-+————-+———-+——+———+——-+—————————————-+——————+

   |  1 | system user | …

[获取更多]
获取 MySQL 崩溃时的 core file

   对于一般进程,要让进程崩溃时能生成 core file 用于调试,只需要设置 rlimit 的 core file size > 0 即可。比如,用在 ulimit -c unlimited 时启动程序。

   对 MySQL 来说,由于 core file 中会包含表空间的数据,所以默认情况下为了安全,mysqld 捕获了 SEGV 等信号,崩溃时并不会生成 core file,需要在 my.cnf 或启动参数中加上 core-file。

   但是即使做到了以上两点,在 mysqld crash 时还是可能无法 core dump。还有一些系统参数会影响 core dump。以下脚本可供参考:

echo 2 >/proc/sys/fs/suid_dumpable
chmod 0777 /var/crash
echo /var/crash/core> /proc/sys/kernel/core_pattern
echo 1 >/proc/sys/kernel/core_uses_pid

   由于 mysql 通常会以 suid 方式启动,所以需要打开 suid_dumpable 。对于 …

[获取更多]
MySQL问题之修改my.cnf配置不生效

问题 修改了 my.cnf 配置文件后,却不生效,这是怎么回事? 原因 我们注意到,这里只说了修改 my.cnf,并没有说清楚其绝对路径是哪个文件。也就是说,有可能修改的不是正确路径下的my.cnf文件。

   

   在MySQL中,是允许存在多个 my.cnf 配置文件的,有的能对整个系统环境产生影响,例如:/etc/my.cnf。有的则只能影响个别用户,例如:~/.my.cnf。

MySQL读取各个my.cnf配置文件的先后顺序是:

  • /etc/my.cnf

  • /etc/mysql/my.cnf

  • /usr/local/mysql/etc/my.cnf

  • ~/.my.cnf

  • 其他自定义路径下的my.cnf,例如:/data/mysql/yejr_3306/my.cnf

  …

[获取更多]
解决 SQL 注入的另类方法

问题解读

我觉得,这个问题每年带来的成本可以高达数十亿美元了。本文就来谈谈,假定我们有如下 SQL 模板语句:

select * from T where f1 = ‘{value1}’ and f2 = {value2}

现在我们需要根据用户输入值填充该语句:

value1=hello
value2=5

我们得到了下面的 SQL 语句,我们再提交给数据库:

select * from T where f1=’hello’ and f2=5

问题在于,攻击者可以构造如下的用户输入值:

value1=anything’ or 1=1 or f1=’whatever
value2=5

拼接好的最终语句就变成了:

select * from T where f1=’anything’ or 1=1 or f1=’whatever’ and f2=5

攻击者成功地改变了模板语句的语义。这种问题不单单发生在 SQL 上,还出现在通常使用模板的任何语言上,比如 HTML 和 shell 脚本。

常规解决方案的说明

[获取更多]
MySQL异常恢复之恢复数据字典表讲解

   在以前的文章中说过mysql的数据字典的恢复(使用工具直接抽取MySQL数据字典,缺少SYS_FIELDS表),主要的数据字典有一下几个,在本文中主要对这些数据字典的意义进行一些讲解,为大家更深一步了解mysql恢复处理思路

   MySQL恢复字典表

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| SYS_COLUMNS    | 
| SYS_FIELDS     | 
| SYS_INDEXES    | 
| SYS_TABLES     | 
+----------------+
4 rows in set (0.00 sec)

   SYS_TABLES

   这个表是mysql恢复的最核心的表之一,主要是记录数据库在InnoDB中表的信息。它默认写在InnoDB的index_ids为1的里面,它的根页在8号page上,他的主要列结构为:

mysql> desc SYS_TABLES; …
[获取更多]
MySQL运行中被改权限测试

今天一个接到一个朋友求助,说是数据在运行中,数据库的目录被改了权限。如: 数据库目结构如下:

1 2 3 datadir=/data/mysql/mysql3306/data log-bin=/data/mysql/mysql3306/logs tmpdir =/data/mysql/mysql3306/tmp

被运维同步执行了:

1 chown-R root:root/data/mysql/mysql3306

1.构建主从环境

1 2 3 4 mysql;3306 主 /data/mysql/mysql3306/{data,tmp,logs} mysql;3307 从 /data/mysql/mysql3307/{data,tmp,logs}

2. 在主的wubx库里创建:

1 2 3 4 5 CREATE TABLE `t2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) )
[获取更多]
MySQL不同复制模式下,如何忽略某些binlog事件

导读

在MySQL复制中,如何忽略slave节点上发生的主键冲突、数据不存在等错误。

在MySQL复制中,如果slave节点上遇到错误,比如数据不存在或者主键冲突等错误时,想要忽略这些错误,可以采用以下几种方法:

1、未启用GTID模式时

只需通过设定 SQL_SLAVE_SKIP_COUNTER 的值,即可忽略一些复制事件。例如:

#需要先关闭SLAVE服务

   root@imysql.com [test]> STOP SLAVE;

#忽略N个事件(event),通常一个SQL是一个事件

   root@imysql.com [test]> SET SQL_SLAVE_SKIP_COUNTER=N;

#再次启动SLAVE服务

   root@imysql.com [test]> START SLAVE;

2、启用GTID模式时

启用GTID,想要忽略某些错误事件就稍微麻烦一点点了。

  …

[获取更多]
表示 进入内容 11028
下一步 10 较早的记录 »