zabbix 之 mysql优化

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

    zabbix运行的性能怎么样,有很大一部分是由mysql数据库的性能决定的。因为zabbix实时收集监控数据,数据库一直在增长,因此,监控系统上线一段时间后,就会发现各类问题都与mysql数据库有关。

    在这里我记录了zabbix监控系统上线后对mysql数据库所做的一些操作,有些内容不是提高mysql运行性能,也就不讲究是否切题了,只是觉得经常用到,也就如实记录下来,后面碰到类似操作也好查阅和参考。

    

    

    1、修改mysql的root账号的密码(在忘记密码或者不知道密码的时候有用):

    先停止mysql服务: 

1
     service mysqld stop

    使用--skip-grant-tables忽略密码启动:

1
     mysqld_safe --skip-grant-tables &

    进入mysql修改密码:

1
2
3
     use mysql
     update  user  set  password = password ( 'mysql' where  user = 'root' ;
     flush  privileges ;

    

    

    2、清理大表数据。

        1)查看表占用空间情况:

1
          select  table_name, (data_length+index_length)/1024/1024  as  total_mb, table_rows  from  information_schema.tables  where  table_schema= 'zabbix' ;

    

        2)备份表trends_uint、history_uint、history。我在实际生产环境中,只保留上次的备份,没有留存更早的备份,因为更早以前的数据,没有留存的价值。

    

1
2
3
         mysqldump -uroot -p zabbix history> history.sql
         mysqldump -uroot -p zabbix trends_uint> trends_uint.sql
         mysqldump -uroot -p zabbix history_uint> history_uint.sql

        

        3)清空表trends_uint、history_uint、history中的数据:

    

1
2
3
         truncate  table  trends_uint;
         truncate  table  history;
         truncate  table  history_uint;

    

    3、修改单独表空间:

        1)备份数据

1
     mysqldump -uroot -p zabbix > zabbix.sql

        2)删除数据库:

1
     drop  database  zabbix;

        3)停止数据库:

1
     service mysqld stop

        4)删除共享表空间数据文件

1
2
     cd  /var/lib/mysql
     rm  ib*

        5)增加innodb_file_per_table参数

1
     vi  /etc/my .cnf

        6)在[mysqld]下设置

    innodb_file_per_table=1

        7)重启数据库:

1
     service mysqld start

        8)重新创建数据库:

1
     mysql -uroot -p
1
2
3
     create  database  zabbix  character  set  utf8;
     grant  all  privileges  on  zabbix.*  to  zabbix@localhost identified  by  'zabbix' ;
     flush  privileges ;

    

        9)导入zabbix数据库:

1
     mysql -uzabbix -pzabbix zabbix<zabbix.sql

    其中,zabbix.sql是上面第一步备份的数据库备份文件。

    

    

    4、增大innodb_log_file_size的方法:

    有时候,zabbix在使用数据库的过程中,特别是删除历史数据的过程中,会涉及到大数据操作,如果逻辑日志文件太小,会造成执行不成功,日志回滚的问题。下面是操作方法:

        1)暂停mysql, 

1
         service mysqld stop

        2)转移ib_logfile0和ib_logfile1,   

1
         mkdir  /home/backup/  &&  mv  /var/lib/mysql/ib_logfile *    /home/backup/

        3)编辑my.cnf  ,  增加  

        innodb_log_file_size=20M

        4)启动mysql,  

1
         service mysqld start

    5、生产环境中mysql配置文件my.cnf相关参数的配置。下面是my.cnf配置文件,参考了一些资料,最后形成了实际生产环境使用的参数。所在主机的配置是CPU 8核,内存16G。具体参数的含义我这里就不详细介绍了,参考相关资料。

    [root@oracle etc]# cat my.cnf

    [mysqld]

    datadir=/var/lib/mysql

    socket=/var/lib/mysql/mysql.sock

    user=mysql

    # Disabling symbolic-links is recommended to prevent assorted security risks

    symbolic-links=0

    innodb_buffer_pool_size=3G

    slow_query_log=/var/log/mysql.slow.log

    

    back_log               =500

    connect_timeout        =5

    delayed_insert_timeout =  300

    delayed_insert_limit   =100

    delayed_queue_size     =5000

    flush_time             =0

    interactive_timeout    =28800

    join_buffer_size       =1048540

    key_buffer_size        =1048540

    lower_case_table_names =  0

    long_query_time        =1

    max_allowed_packet     =1048576

    max_connections        =1000

    max_connect_errors     =10

    max_delayed_threads    =20

    max_heap_table_size    =256M

    max_join_size          =4294967295

    max_sort_length        =1024

    max_tmp_tables         =32

    max_write_lock_count   =4294967295

    net_buffer_length      =16384

    read_buffer_size       =134217728

    sort_buffer            =10M

    table_cache            =64

    thread_concurrency     =10

    tmp_table_size         =1048576

    thread_stack           =1M

    wait_timeout           =28800

    innodb-file-per-table=1

    innodb_log_file_size=20M

    innodb_flush_log_at_trx_commit=0

    [mysqld_safe]

    log-error=/var/log/mysqld.log

    pid-file=/var/run/mysqld/mysqld.pid

    

    

    6、移动mysql数据目录的方法:

        在有些情况下,由于当初没有规划好,mysql数据库安装目录所在的文件系统空间不足,这时需要将程序目录(包含数据文件目录)迁移到新的文件系统中。方法比较狡猾,是通过链接文件的方式解决的。下面是操作步骤:

        1)关闭mysql: 

1
         service mysqld stop

        2)复制文件:

1
         cp  -R  /var/lib/mysql  /home/mysql

        其中/var/lib/mysql 目录是原来的目录 ,/home/mysql目录是新目录

        3)重命名目录: 

1
         mv  /var/lib/mysql  /var/lib/mysql-backup

        4)链接文件: 

1
         ln  -s  /home/mysql  /var/lib/mysql

        5)修改目录权限:

1
2
         chown  mysql:mysql  /home/mysql  -R
         chown  -h mysql:mysql  /var/lib/mysql

        6)重新启动mysql: 

1
         service mysqld start

    


    7、每月1日定时清理3个zabbix数据库的大表。

    这一块内容与第2条的内容有些重复,但这一块更加彻底,自动实现对大数据的清理,保持mysql数据库性能的持续性。

    增加定时配置,每月1日凌晨3点01分执行mysql_trunc_mysql.sh:

1
     crontab  -e
1
     01 03 1 * *  /backup/mysql_trunc_mysql .sh &> /dev/null


    下面是mysql_trunc_mysql.sh文件内容:

1
     vim  /backup/mysql_trunc_zabbix .sh

   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  #!/bin/bash
     #truncate 3 big tables :trends_uint,history,history_unit .
     #Every month's 1th 3:00 excute this script
     #Writen by yuweibing ,phonenumber:18080116652
     service zabbix_server stop
     echo  "truncate table trends_uint;"    |mysql -uzabbix -pzabbix zabbix
     echo  "truncate table history;"        |mysql -uzabbix -pzabbix zabbix
     echo  "truncate table history_uint;"   |mysql -uzabbix -pzabbix zabbix
     sleep  1
     mysqldump -uroot -pmysql zabbix >  /backup/zabbix .sql
     if  [ $? - eq  0 ]
     then 
     echo  "drop database zabbix;" |mysql  -uroot -pmysql
     else
     exit  1
     fi
     
     echo  "create database zabbix character set utf8;" |mysql  -uroot -pmysql
     echo  "grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';" |mysql  -uroot -pmysql
     echo  "flush privileges;" |mysql  -uroot -pmysql
     
     mysql -uzabbix -pzabbix zabbix< /backup/zabbix .sql
     sleep  1
     service zabbix_server start
















本文转自yuweibing51CTO博客,原文链接:http://blog.51cto.com/yuweibing/1656425 ,如需转载请自行联系原作者










相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
5月前
|
SQL 缓存 关系型数据库
MySQL 慢查询是怎样优化的
本文深入解析了MySQL查询速度变慢的原因及优化策略,涵盖查询缓存、执行流程、SQL优化、执行计划分析(如EXPLAIN)、查询状态查看等内容,帮助开发者快速定位并解决慢查询问题。
246 0
|
3月前
|
缓存 关系型数据库 MySQL
降低MySQL高CPU使用率的优化策略。
通过上述方法不断地迭代改进,在实际操作中需要根据具体场景做出相对合理判断。每一步改进都需谨慎评估其变动可能导致其他方面问题,在做任何变动前建议先在测试环境验证其效果后再部署到生产环境中去。
203 6
|
4月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
133 2
|
4月前
|
存储 SQL 关系型数据库
MySQL 动态分区管理:自动化与优化实践
本文介绍了如何利用 MySQL 的存储过程与事件调度器实现动态分区管理,自动化应对数据增长,提升查询性能与数据管理效率,并详细解析了分区创建、冲突避免及实际应用中的关键注意事项。
195 0
|
6月前
|
存储 SQL 关系型数据库
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
|
8月前
|
存储 关系型数据库 MySQL
MySQL细节优化:关闭大小写敏感功能的方法。
通过这种方法,你就可以成功关闭 MySQL 的大小写敏感功能,让你的数据库操作更加便捷。
660 19
|
9月前
|
关系型数据库 MySQL 数据库
从MySQL优化到脑力健康:技术人与效率的双重提升
聊到效率这个事,大家应该都挺有感触的吧。 不管是技术优化还是个人状态调整,怎么能更快、更省力地完成事情,都是我们每天要琢磨的事。
243 23
|
9月前
|
SQL 关系型数据库 MySQL
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
426 9
|
9月前
|
监控 关系型数据库 MySQL
MySQL和SQLSugar百万条数据查询分页优化
在面对百万条数据的查询时,优化MySQL和SQLSugar的分页性能是非常重要的。通过合理使用索引、调整查询语句、使用缓存以及采用高效的分页策略,可以显著提高查询效率。本文介绍的技巧和方法,可以为开发人员在数据处理和查询优化中提供有效的指导,提升系统的性能和用户体验。掌握这些技巧后,您可以在处理海量数据时更加游刃有余。
871 9
|
9月前
|
关系型数据库 MySQL
图解MySQL【日志】——磁盘 I/O 次数过高时优化的办法
当 MySQL 磁盘 I/O 次数过高时,可通过调整参数优化。控制刷盘时机以降低频率:组提交参数 `binlog_group_commit_sync_delay` 和 `binlog_group_commit_sync_no_delay_count` 调整等待时间和事务数量;`sync_binlog=N` 设置 write 和 fsync 频率,`innodb_flush_log_at_trx_commit=2` 使提交时只写入 Redo Log 文件,由 OS 择机持久化,但两者在 OS 崩溃时有丢失数据风险。
241 3

推荐镜像

更多