bingtuag 发表于 2019-1-24 07:26:36

mysql 字 符 集 问 题 之 zabbix

  MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对前者进行比较操作的一些规则。这两个参数集可以在数据库实例、单个数据库、表、列等四个级别指定;

  zabbix没有数据存储的功能,所以需要借助第三方数据库完成数据存储,比较流行的是使用mysql,而关于她的字符集就成了一个小问题,我们来是这去解决一下;

  一:zabbix监控中常碰到的字符集问题解决

  1. 图形中显示中文乱码
  2. 历史记录处出现乱码
  二:更改mysql字符集的操作

  1. 查看当前的默认字符集
  2. 安装之前设定字符集
  3. 安装后没有存储数据时更改
  4. 有了一定的数据存储后更改
  

  一:zabbix监控中常碰到的字符集问题

  1.图形中显示中文乱码

http://s3.运维网.com/wyfs02/M02/74/6B/wKioL1Yc6S6zRpmbAAJOkMnPcAM756.jpg

  yum 安装的zabbix 字体并不是在/usr/share/zabbix/fonts下,而在/usr/share/zabbix/fonts/dejavu下,具体配置可以通过查看配置文件:/usr/share/zabbix/include/defines.inc.php;虽然这个目录下有个 DejaVuSans.ttf但是不管用,

  我们需要搞一个喜欢的中文字体放到这里来,比如从windows上的C:\windows\fonts\目录下拷贝文件simfang.ttf 到 /usr/share/zabbix/fonts/dejavu 目录下,然后修改名字

  mv   DejaVuSans.ttf   DejaVuSans.ttf.bak

  mv    simfang.ttfDejaVuSans.ttf
  重启:/etc/init.d/zabbix-server restart

  2.历史记录处出现问号乱码
  http://s3.运维网.com/wyfs02/M01/74/6F/wKiom1Yc6gSS3u3GAACxANnT0Ns153.jpg
  这是因为zabbix数据库所使用的字符集不是中文的utf8,解决方法如下:
  备份zabbix数据库
  mysqldump-uroot-p 123456   zabbix>zabbix.sql
  修改备份文件
  sed-i's/latin1/utf8/g'zabbix.sql
  删除zabbix数据库
  mysql>drop database zabbix;
  退出mysql数据库,设置默认字符集
  vim /etc/my.cnf

  
  log-bin
  datadir=/var/lib/mysql
  socket=/var/lib/mysql/mysql.sock
  default-character-set = utf8                                  #添加该项
  

  启动mysql并恢复zabbix数据库
  mysql -uroot -p123456 zabbix < zabbix.sql
  

  

  二:更改mysql字符集的操作

  1. 查看当前的默认字符集

  mysql> show create database zabbix;

http://s3.运维网.com/wyfs02/M00/74/6F/wKiom1Yc6iTy2_LwAADPBEl0now942.jpg
  mysql> show variables like 'character%';
http://s3.运维网.com/wyfs02/M01/74/6F/wKiom1Yc6iTyP6ERAAEl1eZI3CQ615.jpg

  2. 安装之前设定,适用于源码包安装

  我们可以在在编译MySQL的时候可以通过 DEFAULT_CHARSET=utf8   

   DEFAULT_COLLATION=utf8_general_ci这两个参数;
  编译的时候指定--with-charset=utf8    --with-collation=utf8_general_ci)来指定默认的字符集为
  utf8,这也是最一劳永逸的办法
  3. 安装后没有数据时

  /etc/my.cnf
  修改mysql的my.ini或my.cnf文件中的字符集键值
  在下添加
  default-character-set=utf8                        (mysql 5.5 版本添加character-set-server=utf8)
  在下添加
  default-character-set=utf8
  重启:service mysql restart
  查看:mysql> SHOW VARIABLES LIKE 'character%'
  

  但是这种更改对客户端的连接是没有作用的,客户端这时候一般需要指定utf8方式连接才能避免乱码。也就是传说中的setnames命令。

  服务器上执行:
  setnamesutf8                                             这就可以,只不过每次开机都得执行
  其实set names utf8命令对应的是服务器端以下几个命令
  SET character_set_client = utf8;
  SET character_set_results = utf8;
  SET character_set_connection = xutf8;
  因为这三个参数是不能写在配置文件my.cnf里的。只能通过set命令来动态修改。但是我们可以用init_connect,这个命令意思是每个用户连接上来的时候都会触发执行,可以在部分增加以下一行

  
  init_connect = 'SET NAMES utf8'
  关于这个设置,有的文档在这个基础上另加了几条命令,在那三个set上又增加了几条,你的实在还不行的话加上试试吧

  http://s3.运维网.com/wyfs02/M00/74/6C/wKioL1Yc63mC_YgPAAEYkv6X2F0901.jpg
  

  




页: [1]
查看完整版本: mysql 字 符 集 问 题 之 zabbix