笔者在刚开端进修数据库的时刻,没少走弯路。经常会碰到各类八怪七喇的 error 信息,碰到报错会很慌张,急需一个解决问题的办法。跟无头苍蝇一样,会不加思考地把缺点粘到百度上,欲望赶紧查找一下有没有好的问题处理办法。我想上述这个应当是刚大年夜事数据库的小白都邑碰到的困境。

今天就给大年夜家列举 MySQL 数据库中最经典的十大年夜缺点案例,并附有处理问题的解决思路和办法。欲望能给刚入行或数据库爱好者一些赞助,往后再碰到任何报错,我们都可以很淡定地去处理。

进修任何一门技巧的同时,其实就是自我修炼的过程。沉下心,测验测验却竽暌沟抱数据的世界!

案例一

Too many connections

(连接数过多,导致连接不上数据库,营业无法正常进行)mysql> show variableslike'%max_connection%';

| Variable_name   | Value |
max_connections | 151   |
mysql> setglobalmax_connections=1;Query OK, 0rowsaffected (0.00 sec)
[root@node4 ~]# mysql -uzs -p123456 -h 192.168.56.132
ERROR 1040 (00000): Too many connections

解决问题的思路:

但如许调剂会有隐患,因为我们无法确认数据库是否可以承担这么大年夜的连接压力,就比如本来一小我只能吃一个馒头,但如今却非要让他吃 10 个,他肯假寓受不了。反竽暌功到办事器膳绫擎,就有可能会出现宕机的可能。

所以这又反竽暌钩出了,我们在新上线一个营业体系的时刻,要做浩揭捉?力测试。包管后期对数据库进行优化调剂。

2、其次可以限制 InnoDB的并发处理数量,如不雅 innodb_thread_concurrency = 0(这种代表不受限制) 可以先改成 16 或是 64 看办事器压力。

如不雅异常大年夜,可以先改的小一点让办事器的压力下来之后,然后再慢慢增大年夜,根据本身的营业而定,小我建议可以先调剂为 16 即可。

MySQL 跟着连接数的增长机能是会降低的,在 MySQL 5.7 之前都须要闪开辟合营设置 thread pool,连接复竽暌姑。MySQL 5.7 之后数据库自带 thread pool 了,连接数问题也获得了响应的解决。

别的对于有的监控法度榜样会攫取 information_schema 下面的表,可以推敲封闭下面的参数:

innodb_stats_on_metadata=http://database.51cto.com/art/201708/0
set global innodb_stats_on_metadata=http://database.51cto.com/art/201708/0

案例二

Last_SQL_Errno: 1062 (大年夜库与主库数据冲突)
Last_Errno: 1062Last_Errno: 1062
Last_Error: Could notexecuteWrite_rows eventontabletest.t;
Duplicate entry '4'forkey'PRIMARY',
Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY;
the event's master log mysql-bin.000014, end_log_pos 1505

解决办法:在确保主大年夜数据一致性的前提下,可以在大年夜库进行缺点跳过。一般应用 percona-toolkit 中的 pt-slave-restart 进行。

在大年夜库完成如下操作:

[root@zs bin]# ./pt-slave-restart -uroot -proot123
2017-07-20T14:05:30 p=…,u=root node4-relay-bin.000002 1506 1062

之后最好在大年夜库中开启 read_only 参数,禁止在大年夜库进行写入操作。

Last_IO_Errno: 1593(server-id冲突)Last_IO_Error:
Fatal error: The slave I/O thread stops because master andslave have equal MySQL server ids;