1、####################################################################################
2019-05-03T00:56:36.941840Z mysqld_safe mysqld from pid file /data/mysqld.pid ended
[root@zabbix-server bin]# mysqld_safe --defaults-file=/etc/my.cnf
2019-05-03T00:59:06.392254Z mysqld_safe Logging to '/data/mysqld.log'.
2019-05-03T00:59:06.395674Z mysqld_safe Logging to '/data/mysqld.log'.
2019-05-03T00:59:06.424562Z mysqld_safe Starting mysqld daemon with databases from /data
^Z
[1]+ Stopped mysqld_safe --defaults-file=/etc/my.cnf
[root@zabbix-server bin]# bg 1
[1] + mysqld_safe --defaults-file=/etc/my.cnf &
如果还是启动不起来,那就是权限问题,赋予数据目录相关权限:chown -R mysql:mysql ./
2、###################################################################################
[root@dbserver-6 data]# mysql -uroot -p123 -s /usr/local/mysql/data/mysql.sock
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
[root@dbserver-6 data]# mysql -uroot -p123 -S /usr/local/mysql/data/mysql.sock
mysql>
3、####################################################################################
[root@dbserver-6 zabbix_agentd.conf.d]# zabbix_get -s 172.16.20.1 -k cpu_number
zabbix_get [11636]: Check access restrictions in Zabbix agent configuration
被监控端的zabbix_agentd.conf配置文件里的server_name没有修改,应该修改成被监控端的主机名Hostname=rh-mysql-1
真正原因是要在server端运行该命令[root@zabbix-server etc]# zabbix_get -s 172.16.20.1 -p 10050 -k "cpu_number"
4
4、####################################################################################
[root@rh-mysql-1 ~]# mysql -uroot -p123 -S /usr/local/mysql/data/mysql.sock --show-warnings=false -Ne "show variables like 'innodb_buffer_pool_size';" 2>/dev/null | awk '{print $2}'
134217728
[root@zabbix-server bin]# zabbix_get -s rh-mysql-1 -k buffer_pool_wait_free
agent端单独测试执行命令没问题,server端zabbix_get监控项键值时,返回值为空,在zabbix监控网页端配置自定义监控项,显示不支持字符类型,
因为我设置的类型为正整数类型,很可能上边参数返回的是一个字符串报错!!
因此我查看zabbix_agent的执行文件
vim /usr/local/zabbix-agent/etc/zabbix_agentd.conf.d/userparameter_mysql.conf
UserParameter=buffer_pool_wait_free,mysql -uroot -p123 -S /usr/local/mysql/data/mysql.sock --show-warnings=false -Ne "show global status like 'Innodb_buffer_pool_wait_free';" 2>/dev/null | awk '{print $2}'
将屏蔽错误和警告道null文件取消,进行测试,
[root@rh-mysql-1 ~]# mysql -uroot -p123 -S /usr/local/mysql/data/mysql.sock --show-warnings=false -Ne "show variables like 'innodb_buffer_pool_size';" | awk '{print $2}'
mysql: [Warning] Using a password on the command line interface can be insecure.
134217728
[root@zabbix-server bin]# zabbix_get -s rh-mysql-1 -k buffer_pool_wait_free
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/usr/local/mysql/data/mysql.sock' (13)
server端出现出错根源,连接不上sock套接字文件,可是我明明在agent端命令中指定sock文件,而且单独执行没有问题,这里可能是由于server端执行命令调用agent端的mysql时,使用的sock文件路径出错;
修改如下:
在agent端的mysql配置文件中vim /etc.my.cnf中,进行sock文件指定,添加内容如下:
[mysql]
socket=/usr/local/mysql/data/mysql.sock
修改zabbix_agent的执行文件
vim /usr/local/zabbix-agent/etc/zabbix_agentd.conf.d/userparameter_mysql.conf
UserParameter=buffer_pool_wait_free,mysql -uroot -p123 --show-warnings=false -Ne "show global status like 'Innodb_buffer_pool_wait_free';" 2>/dev/null | awk '{print $2}'
结果仍然出错。
采用本地回环方式登录agent端的mysql
UserParameter=buffer_pool_wait_free,/usr/local/mysql/bin/mysql -uroot -p123 -h127.0.0.1 -P3306 --show-warnings=false -Ne "show global status like 'Innodb_buffer_pool_wait_free';" 2>/dev/null | awk '{print $2}'
[root@zabbix-server ~]# zabbix_get -s rh-mysql-1 -p 10050 -k "innodb_buffer_pool_size"
134217728
成功!!1
因为server端和agent端都存在一个MySQL数据库,如果server端mysql连接zabbix成功,就不必考虑,只考虑agent端即可,即在zabbix中可能存在默认socket文件的路径必须在/tmp目录下,如果不在导致agent端配置文件中的路径出错,因此会报错。
5、###########################################################################
解决命令行输入mysql密码的Warning
由于在命令行中输入密码造成的Warning通过一般的过滤手段可能无法过滤掉这条警告,这样就造成了在zabbix web界面显示获得的监控项的值的类型和定义的不一致
如何解决:
1、--show-warnings=false
mysql -uroot -p123 --show-warnings=false -Ne "show variables like 'innodb_buffer_pool_size';" 2>/dev/null
2、在mysql配置文件中添加如下内容
[client]
user=zabbix
password=123
host=localhost
socket=/usr/local/mysql/data/mysql.sock
[mysqladmin]
user=zabbix
password=123
host=localhost
socket=/usr/local/mysql/data/mysql.sock
专门在mysql中添加一个zabbix用户,供zabbix获取mysql的信息,不用给zabbix用户很高的权限,实现zabbix用户免密登录mysql,这样就避免了输入密码带来的问题
3、自己在定义一个mysql配置文件,只存放用户名和密码等信息
执行mysql命令时在命令前面加上 HOME=/usr/local/zabbix-agent/etc/ 这个执行时就会读取这个目录 下的配置文件,例
HOME=/usr/local/zabbix-agent/etc/ mysql -e "show variables like 'innodb_buffer_pool_size';"|grep -v Value |awk '{print$2}'
上述的第2中方式需要重启数据库才能读取配置文件,可能在真实的生产环境中不允许重启,第3中方式就弥补了第2 中方式的不足
#####################################################################################################
6、解决zabbix 图表中的中文乱码问题
在web端定义的各种中文表示,到了图表中就显示为一个个方框的乱码,这时因为由PHP编写的zabbix web页面时没有加入中文字体包。
解决方式:
1、找一个中文字体包(windows中的就可以。在C:\Windows\Fonts中)
2、将中文字体包放入zabbix对应网页的目录中(/var/www/zabbix/php/fonts 字体包路径)
注意将文件名后缀改为 .ttf,否则不能识别
3、修改/var/www/zabbix/php/include/defines.inc.php 文件,
将DejaVuSans修改为你上传到fonts下的字体包名,不带ttf
4、或者,不用修改配置文件,直接把fonts下,将新的字体包重命名成原来的那个名字,并且把原来的移走或删除