mysql安装,在很多开发者看来,是非常easy的事情,实际上未必,如果只是临时用一用,确实简单,如果要安装给业务系统使用,需要考虑如下问题:
1、可靠性(尽可能规避网上已经暴露出的坑)
2、高性能(尽可能充分发挥服务器性能)
3、用户权限规划(若不提前规划,研发人员可能直接用root上了)
4、架构选型(本文不谈)
5、备份策略(本文不谈)
6、管理工具(percona有很多好的mysql管理工具,本文不谈)
一、建议安装四个包
很多同事以为安装前面两个包就可以了,为了免去后续麻烦,建议安装4个包,以mysql5.6.21为例:
MySQL-server-advanced-5.6.21-1.el6.x86_64.rpm
MySQL-client-advanced-5.6.21-1.el6.x86_64.rpm
MySQL-devel-advanced-5.6.21-1.el6.x86_64.rpm
#这个不安装,没有mysql_config文件,在安装某些软件时会有问题
MySQL-shared-compat-advanced-5.6.21-1.el6.x86_64.rpm
#这个不安装,安装某些依赖低版本mysql的软件时会有问题,这个包里面有所有低版本mysql的so库文件
二、服务端参数(只考虑innodb引擎,以16G内存服务器为例)
lower_case_table_names = 1
[mysqld]
character_set_server = utf8
(skip-character-set-client-handshake)
[mysql]
default-character-set = utf8
[client]
default-character-set = utf8
上面三个是字符集参数,根据项目需要,一般设置为utf8,如果想忽略客户端的字符集,可指定skip-character-set-client-handshake
max_connect_errors = 1000 #防止暴力破解密码
max_connections = 2048 #关键参数,超过这个值会报:Too many connections
innodb_read_io_threads = 8
innodb_write_io_threads = 8
#关键参数,与cpu个数和核数有关,假如CPU是2颗8核的,可以如此设置,如设置不当将难以充分发挥服务器cpu性能
innodb_buffer_pool_size = 8192M #关键参数,建议值为物理内存的50%~70%
innodb_data_file_path = ibdata1:1G:autoextend
innodb_autoextend_increment = 1G
innodb_log_file_size = 256M
innodb_file_per_table = 1
#关键参数,设定后每个innodb表会在datadir下有独立的ibd文件,避免全部进入ibdata1
slow_query_log = on
slow_query_log_file = slow_query.log
long_query_time = 10
#慢查询日志,阀值为10秒,超过此阀值的sql会写入日志,有利于分析问题
max_allowed_packet = 64M
#默认4M在sql里面有长字符串字段的时候可能不够用,特别是用mysqldump备份导库恢复数据的时候
skip-host-cache
skip-name-resolve #禁用ip地址反解析
explicit_defaults_for_timestamp
#要求显式指定timestamp字段缺省值,否则表的第一个timestamp字段缺省值为当前时间,但是mysql提示该特性在以后会被取消
federated
#此配置表示启用FEDERATED,这是一个类似oracle dblink的特性
innodb_print_all_deadlocks = 1
#error 日志记录死锁信息(mysql5.6才有)
三、权限规划
根据笔者的mysql使用经验,建议把mysql用户规划为四类:
一类用户:仅有业务表select权限(运营客服查数据使用)
二类用户:有业务表select、insert、update、delete、execute、show view权限(业务系统使用)
三类用户:在二类用户基础上增加create、drop、grant、references、index、alter、alter routine、create routine、create view和trigger权限(DBA用户、DDL使用)
四类用户:root
用DBA用户建存储过程的时候,注意把definer改为业务用户,如create definer='manager'@'%' procedure xxx
DBA用户密码和root密码由公司专职DBA掌握,统一管理数据库变更。
本文出自 “记忆碎片” 博客,谢绝转载!