您的位置:首页 > 数据库 > MySQL

MySQL数据库使用注意事项

2016-12-22 15:09 369 查看
首先看一下MySQL的配置,我们使用的是MySQL的变种MariaDB,基本可以认为就是MySQL。安装好,配置用户直接就可以用了。使用前可以调整一下连接端口,数据存储位置,将字符集改为utf8mb4以支持表情字符集。[mysqld > wait_timeout]属性默认值为28800s,即8小时,表示如果一个connection空闲达到这个时间,将被关闭,由于程序端不知道一个connection已经被数据库关闭,就有可能继续使用这个connection,这样会发生错误,因此我们可以将这个值改大些以减少这种情况的发生,比如7天,604800s,wait_timeout过大当然也有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性能。

其配置如下:

cat/etc/my.cnf

[mysqld]

port = 3306

#datadir=/var/lib/mysql

datadir=/home/mysqldata

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

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

symbolic-links=0

#Settings user and group are ignored when systemd is used.

# If youneed to run mysqld under a different user or group,

#customize your systemd unit file for mariadb according to the

#instructions in http://fedoraproject.org/wiki/Systemd
init_connect='SET collation_connection = utf8mb4_unicode_ci'

init_connect='SET NAMES utf8mb4'

character-set-server=utf8mb4

collation-server=utf8mb4_unicode_ci

skip-character-set-client-handshake

wait_timeout=604800

[client]

default-character-set=utf8mb4

 

[mysql]

default-character-set=utf8mb4

 

[mysqld_safe]

log-error=/var/log/mariadb/mariadb.log

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

 

#

# includeall files from the config directory

#

!includedir/etc/my.cnf.d

 

除了wait_timeout属性外,还有个interactive_timeout属性,和wait_timeout的区别如下,不用搭理:

interactive_timeout:交互式连接超时时间(mysql工具、mysqldump等)。

wait_timeout:非交互式连接超时时间,默认的连接mysql api程序。

 

在程序端,使用Druid连接池来管理数据库连接,其配置同dbcp,c3p0等大同小异。属性表如下,从网上找了一张,部分缺省值和我使用的Druid缺省值不同,可能是Druid版本差异的原因,不深究,部分说明似乎有误,进行了修改。

构造DruidDataSource,设定数据库类型,帐号信息等,直接使用即可,如果其缺省值不合适,如initialSize 、maxActive 、minIdle、maxWait,根据实际情况调整一下。

testOnBorrow、testOnReturn、testWhileIdle、timeBetweenEvictionRunsMillis、validationQuery这几个属性强调一下,这几个属性用来检测数据库连接的有效性,testOnBorrow、testOnReturn这两个属性分别是在申请连接和归还连接时检查数据库连接,代价是增加了数据库操作,影响性能,在生产环境一般不开启。testWhileIdle是异步的,对性能影响小,建议开启,每间隔timeBetweenEvictionRunsMillis执行检测。validationQuery是用来验证数据库连接的查询语句,这个查询语句必须是至少返回一条数据的SELECT语句,每种数据库都有各自的验证语句,下面的表中收集了几种常见数据库的,如果没有配置这个属性,前面的3个test属性都没有效果。

 

DruidDataSource配置属性列表

配置
缺省值
说明
name
 
配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。

如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this). 

另外配置此属性至少在1.0.5版本中是不起作用的,强行设置name会出错
详情-点此处
url
 
连接数据库的url,不同数据库不一样。例如:

mysql : jdbc:mysql://10.20.153.104:3306/druid2 

oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username
 
连接数据库的用户名
password
 
连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter
driverClassName
根据url自动识别
这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName
initialSize
0
初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
maxActive
8
最大连接池数量
maxIdle
8
已经不再使用,配置了也没效果
minIdle
 
最小连接池数量
maxWait
 
获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
poolPreparedStatements
false
是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
maxOpenPreparedStatements
-1
要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
validationQuery
 
用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会有作用。
validationQueryTimeout
 
单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法
testOnBorrow
true
申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testOnReturn
false
归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testWhileIdle
false
建议配置为true,不影响性能,并且保证安全性。每隔timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
timeBetweenEvictionRunsMillis
1分钟(1.0.14)
有两个含义:

1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
numTestsPerEvictionRun
 
不再使用,一个DruidDataSource只支持一个EvictionRun
minEvictableIdleTimeMillis
30分钟(1.0.14)
连接保持空闲而不被驱逐的最长时间
connectionInitSqls
 
物理连接初始化的时候执行的sql
exceptionSorter
根据dbType自动识别
当数据库抛出一些不可恢复的异常时,抛弃连接
filters
 
属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:

监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
proxyFilters
 
类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系
  

DataBase
validationQuery
hsqldb
select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
Oracle
select 1 from dual
DB2
select 1 from sysibm.sysdummy1
MySql
select 1
Microsoft SqlServer
select1
postgresql
select version()
ingres
select 1
derby
values 1
H2
select 1
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息