www.98455.comLinux系统磁盘空间不足Zabbix服务器数据库迁移

Zabbix登陆账户admin密码修改

今天登陆Zabbix,发现zabbix-server磁盘已经超过了80%,发出了告警,如图:

一、正常更改用户密码

www.98455.com 1

管理-用户-右侧选择“用户”-点击列表里的Admin-点击修改密码-输入新密码后点击存档

www.98455.com 2

www.98455.com 3

登入服务器一看,使用#ll
-Shil发现以下几个数据表太大了,占用了磁盘空间很多:

www.98455.com 4

www.98455.com 5

www.98455.com 6

在mysql里查看也是这样(我的zabbix的databases就叫zabbix):

二、忘记密码,重置密码

mysql> select table_name, (data_length+index_length)/1024/1024 as
total_mb, table_rows from information_schema.tables where
table_schema='zabbix';
+----------------------------+---------------+------------+
| table_name                | total_mb      | table_rows |
+----------------------------+---------------+------------+
| events                    | 2876.00000000 |  23659702 |
| history                    | 3005.60937500 |  36816179 |
| history_uint              | 2762.26562500 |  35895354 |
| trends_uint                | 1189.60937500 |  16612396 |
| trends                    |  831.59375000 |  11548652 |
+----------------------------+---------------+------------+
113 rows in set (0.08 sec)
上面几个就是数据比较大的表,那么我们重点就是对他们开刀。由于数据量太大,按照普通的方式delete数据的话基本上不太可能。所以决定直接采用truncate
table的方式来快速清空这些表的数据,再使用mysqldump导出数据,删除共享表空间数据文件,重新导入数据。

如果忘记了zabbix的登陆账户admin密码,可以通过以下方式找回

这个时候我们先停止zabbxi-server。

[root@localhost ~]# mysql -uroot -p      #登陆数据库
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> show databases;                  #查询当前所有的库
+--------------------+
| Database          |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| zabbix            |
+--------------------+
4 rows in set (0.02 sec)
 
mysql> use zabbix;                  #进入zabbix数据库
Database changed
mysql> show tables;               
#再查看一下里面有很多张表,admin密码放在users表里面。
+-----------------------+
| Tables_in_zabbix      |
+-----------------------+
| acknowledges          |
| actions              |
| alerts                |
| application_template  |
| applications          |
| auditlog              |
| auditlog_details      |
| autoreg_host          |
| conditions            |
| config                |
| dbversion            |
| dchecks              |
| dhosts                |
| drules                |
| dservices            |
| escalations          |
| events                |
| expressions          |
| functions            |
| globalmacro          |
| globalvars            |
| graph_discovery      |
| graph_theme          |
| graphs                |
| graphs_items          |
| group_discovery      |
| group_prototype      |
| groups                |
| history              |
| history_log          |
| history_str          |
| history_str_sync      |
| history_sync          |
| history_text          |
| history_uint          |
| history_uint_sync    |
| host_discovery        |
| host_inventory        |
| hostmacro            |
| hosts                |
| hosts_groups          |
| hosts_templates      |
| housekeeper          |
| httpstep              |
| httpstepitem          |
| httptest              |
| httptestitem          |
| icon_map              |
| icon_mapping          |
| ids                  |
| images                |
| interface            |
| interface_discovery  |
| item_discovery        |
| items                |
| items_applications    |
| maintenances          |
| maintenances_groups  |
| maintenances_hosts    |
| maintenances_windows  |
| mappings              |
| media                |
| media_type            |
| node_cksum            |
| nodes                |
| opcommand            |
| opcommand_grp        |
| opcommand_hst        |
| opconditions          |
| operations            |
| opgroup              |
| opmessage            |
| opmessage_grp        |
| opmessage_usr        |
| optemplate            |
| profiles              |
| proxy_autoreg_host    |
| proxy_dhistory        |
| proxy_history        |
| regexps              |
| rights                |
| screens              |
| screens_items        |
| scripts              |
| service_alarms        |
| services              |
| services_links        |
| services_times        |
| sessions              |
| slides                |
| slideshows            |
| sysmap_element_url    |
| sysmap_url            |
| sysmaps              |
| sysmaps_elements      |
| sysmaps_link_triggers |
| sysmaps_links        |
| timeperiods          |
| trends                |
| trends_uint          |
| trigger_depends      |
| trigger_discovery    |
| triggers              |
| user_history          |
| users                |                  #users表
| users_groups          |
| usrgrp                |
| valuemaps            |
+-----------------------+
108 rows in set (0.00 sec)
 
mysql> select * from users;      #
查看表里的字段,admin对应的ID是1
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
| userid | alias | name  | surname      | passwd                       
  | url | autologin | autologout | lang  | refresh | type | theme  |
attempt_failed | attempt_ip | attempt_clock | rows_per_page |
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
|      1 | Admin | Zabbix | Administrator |
5fce1b3e34b520afeffb37ce08c7cd66 |    |        1 |          0 | zh_CN
|      30 |    3 | default |              0 |            |            0
|            50 |
|      2 | guest |        |              |
d41d8cd98f00b204e9800998ecf8427e |    |        0 |        900 | en_GB
|      30 |    1 | default |              0 |            |            0
|            50 |
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
2 rows in set (0.00 sec)
 
mysql> select userid,passwd from users;
+--------+----------------------------------+
| userid | passwd                          |
+--------+----------------------------------+
|      1 | 5fce1b3e34b520afeffb37ce08c7cd66 |      #密码是加密的 
|      2 | d41d8cd98f00b204e9800998ecf8427e |
+--------+----------------------------------+
2 rows in set (0.00 sec)
 
mysql>

systemctl stop zabbix-server
systemctl stop httpd
然后登陆mysql,清除历史数据:

重新开个终端,生成一个MD5加密的密码,这里密码设置的是RedHat
[root@localhost ~]# echo -n redhat|openssl md5   
#-n就表示不输入回车符,不加-n,否则就不是这个结果了。
(stdin)= e2798af12a7a0f4f70b4d69efbc25f4d
[root@localhost ~]#

[root@www.linuxidc.com-zabbixserver ~] # mysql -uroot -p
mysql > use zabbix;
Database changed
mysql > truncate table history;
Query OK, 123981681 rows affected (0.23 sec)
mysql > optimize table history;
1 row in set (0.02 sec)
mysql > truncate table history_uint;
Query OK, 57990562 rows affected (0.12 sec)
mysql > optimize table history_uint;
1 row in set (0.03 sec)
注意!如果在这一步,你先选择了delete,比如先删除了history_uint里7天之前的数据:

接着上面的为admin用户设定一个密码

mysql> delete from history_uint where
clock<unix_timestamp(adddate(now(),-7));
但是你删了半天,发现数据量太大,这么删太慢了,又想到zabbix还有每小时统计一次的趋势数据,所以想干脆连7天的记录都不要了,于是查找并干掉了delete进程然后改用了truncate,如下:

mysql> update users set passwd='e2798af12a7a0f4f70b4d69efbc25f4d'
where userid = '1';
      #或者直接使用update  users set passwd=md5("redhat") where
userid='1';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
 
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
 
mysql> quit
Bye
[root@localhost ~]#

mysql> show processlist;
mysql> kill 136765
mysql> truncate table history_uint
这样的话,你会发现truncate的速度很很慢的,就会很奇怪。答案其实不是truncate慢,而是直接死锁了!这个时候如果查看一下线程就会发现truncate正在等待insert
、select等等锁。

��新页面使用admin  redhat登陆即可。

为什么会这样呢?是因为truncate没有拿到mdl锁,MySQL在回滚delete回滚结束前持有mdl锁,truncate被锁后续insert被truncate锁(表锁),杀掉truncate就可以正常
insert、select,完成delete回滚,回滚完成后就可以truncate了。这是一种锁阻塞现象。

一些Zabbix相关教程集合

这个时候就只能杀掉truncate线程,等待MySQL的delete回滚结束,然后重新去truncate表。

Ubuntu
14.04下Zabbix2.4.5 源码编译安装 
http://www.linuxidc.com/Linux/2015-05/117657.htm

插播结束,现在可以对原有的数据库进行备份,#mysqldump -uroot -p密码
zabbix > /home/zabbix_db.sql 。

CentOS 7
LNMP环境搭建Zabbix3.0 
http://www.linuxidc.com/Linux/2017-02/140134.htm

备份完毕之后,就可以# systecmtl stop
mariadb关闭掉mysql,同时删除掉共享表空间数据文件,#rm -rf
/var/lib/mysql/ib*。

Ubuntu 16.04安装部署监控系统Zabbix2.4 
http://www.linuxidc.com/Linux/2017-03/141436.htm

然后准备一个空间比较大的盘,比如这个新磁盘就叫ZabbixDB,然后在里面建立一个DB文件夹。然后将/ZabbixDB/DB的所属组和用户都改成mysql,语句是:#
chown -vR mysql:mysql /ZabbixDB/DB。

Zabbix监控安装部署及警报配置 
http://www.linuxidc.com/Linux/2017-03/141611.htm

改完了之后再给予700权限:# chmod -vR 700 /etc/ZabbixDB/DB。

Zabbix触发器表达式详解
http://www.linuxidc.com/Linux/2017-03/141921.htm

然后就把整个/var/lib/mysql*的内容都导入到ZabbixDB/DB里:#cp -av
/var/lib/mysql* /ZabbixDB/DB。

Ubuntu 16.04下安装部署Zabbix3.0 
http://www.linuxidc.com/Linux/2017-02/140395.htm

修改my.cnf,在[mysqld]添加一句:innodb_file_per_table=1,这是修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间。同时也要修改数据库存放目录:

CentOS 6.3下Zabbix监控apache server-status
http://www.linuxidc.com/Linux/2013-05/84740.htm

www.98455.com 7

CentOS 7 下 Zabbix 3.0安装详解
http://www.linuxidc.com/Linux/2017-03/141716.htm

这个时候就可以# systemctl start
mariadb重启mysql服务,启动完后查看一下刚刚在my.cnf里设置的“独立表空间”功能是否OK,检查语句是
show variables like '%per_table%';,如果看到“ON”,就是说明已经开启了:

64位CentOS 6.2下安装Zabbix 2.0.6 
 http://www.linuxidc.com/Linux/2014-11/109541.htm

www.98455.com 8

ZABBIX
的详细介绍
:请点这里
ZABBIX
的下载地址
:请点这里

然后就可以还原数据库了:

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。