在上周4.14 北京3306π活动中,看到朱进桌分享了滴滴的MySQL架构及一些 … 继续阅读 →
在3306π北京活动中 青云的蒙哲分享了青云RDS中高可用组件: MySQL Plus。 MySQL Plus是基于一套Raft构建的MySQL中自动选主及维护主从的套件。 继续阅读 →
对于金融行业使用MySQL可以说也比较早,例如腾讯的财富通从开始到现 … 继续阅读 →
在MySQL更改数据类型前一定要特别小心,分析一下是不是可行,另外在更改前,需要先进行备份,备份,备份!!! […]
作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#16 […]
作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式:
wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.
今天遇一个同学聊存储过程返回值经常得到意外的值为null,
因为白天有事,晚上给做一个实验放在这里供有相应问题的同学查看一下。
存储过程:
delimiter // create procedure usp_s2(out par1 int) begin select inet_ntoa(ip) , port from proxy_list limit 5; select count(*) into par1 from proxy_list; END// delimiter ;
session 1执行:
mysql> call usp_s2(@a); +---------------+------+ | inet_ntoa(ip) | port | +---------------+------+ | 1.34.21.86 | 8088 | | 1.34.59.50 | 8088 | | 1.34.69.15 | 8088 | | 1.34.73.110 | 8088 | | 1.34.76.218 | 8088 | +---------------+------+ 5 rows in set (0.00 sec) Query OK, 1 row affected (0.01 sec) mysql> select @a; +------+ …[获取更多]
作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.
实际线上的场景比较复杂,当时涉及了truncate, delete 两个操作,经确认丢数据差不多7万多行,等停下来时,差不多又有共计1万多行数据写入。 这里为了简单说明,只拿弄一个简单的业务场景举例。
测试环境: Percona-Server-5.6.16
日志格式: mixed 没起用gtid
表结构如下:
CREATE TABLE `tb_wubx` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
基于某个时间点有一个备份或是有全量的binlog是能恢复数据的一个唯一保证。 例如我们的备份就是一个表结构创建语句,binlog pos相关信息: mysql-bin.000004 , …
[获取更多]作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.
现象
在PHP error log里发现:
PHP Warning: mysqli::mysqli(): (HY000/2003): Can’t connect to
MySQL server on ‘XXX.XXX.XXX.XXX’ (99) in /u1/www/XXXX.php on
line 10
PHP Warning: mysqli::close(): Couldn’t fetch mysqli in
/u1/www/XXXX.php on line 11
推断:只有在高并发的环境下出现
诊断分析:
通过MySQL数据库上抓包,没发现异常。又把目标转到php 服务器上。
BTW:
linux开着selinux连接MySQL在测试中基本上属于1ms+,禁掉selinux后在0.96左右。selinux还是要禁掉的。
既然又怀疑是PHP的问题就写一个程序测试(禁掉selinux后):
cat tconn.php …
作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.
在MySQL数据库连接数很多,而且大多属于活跃的状态时MySQL机器基本上负载很高,属于基本上快要死去的状态了.
这时怎么办呢?
有可能两个办法.
第一先限制Innodb的并发处理.如果innodb_thread_concurrency = 0 可以先改成 16或是64
看机器压力,如果
非常大,先改成16让机器的压力下来,然后慢慢增达,适应自已的业务.
处理方法: set global innodb_thread_concurrency=16;
第二: 对于连接数已经超过600或是更多的情况,可以考虑适当的限制一下连接数,让前端报一下错,也别让DB挂了.
…
作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.
CASE:
mysql的IO处理上有抖动, 从日值上观查binlog最大的有(512M)大于max_binlog_size(128M)
原因:
当mysql在处理大事务时,不会进行binlog切换,所有的日值还是会写到一个数据文件里.
如: bulk insert之类的操作
解决办法:
拆分大事务. 或是把大事务处理放到业务低峰期,避免大事务对业务的冲击.
特别提示:
看到这种现象可以通过分析binlog查到是什么操作, 可以通过业务的方面考虑一下怎么规避.